Created
September 15, 2011 13:32
-
-
Save anonymous/1219230 to your computer and use it in GitHub Desktop.
Code in action.php
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
require_once dirname(__FILE__).'/../lib/userGeneratorConfiguration.class.php'; | |
require_once dirname(__FILE__).'/../lib/userGeneratorHelper.class.php'; | |
/** | |
* user actions. | |
* | |
* @package cestarbucks | |
* @subpackage user | |
* @author Colin Darie | |
* @version SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $ | |
*/ | |
class userActions extends autoUserActions | |
{ | |
public function preExecute() | |
{ | |
$this->dispatcher->connect('admin.save_object', array($this, 'removeCache')); | |
parent::preExecute(); | |
} | |
public function executeIndex(sfWebRequest $request) | |
{ | |
if ($request->hasParameter('is_accepted') && $request->getParameter('is_accepted') == '0') | |
{ | |
$this->setFilters(array('is_accepted' => '0')); | |
} | |
parent::executeIndex($request); | |
} | |
public function executeEdit(sfWebRequest $request) | |
{ | |
$this->sf_guard_user = $this->getRoute()->getObject(); | |
$this->form = $this->configuration | |
->getForm($this->sf_guard_user) | |
->configureForBackend(); | |
} | |
public function executeUpdate(sfWebRequest $request) | |
{ | |
$this->sf_guard_user = $this->getRoute()->getObject(); | |
$this->form = $this->configuration | |
->getForm($this->sf_guard_user) | |
->configureForBackend(); | |
$this->processForm($request, $this->form); | |
$this->setTemplate('edit'); | |
} | |
public function executeShow(sfWebRequest $request) | |
{ | |
$this->sf_guard_user = $this->getRoute()->getObject(); | |
$this->form = $this->configuration | |
->getForm($this->sf_guard_user) | |
->configureForBackend('show'); | |
} | |
protected function executeBatchAccept(sfWebRequest $request) | |
{ | |
$ids = $request->getParameter('ids'); | |
// base query | |
$query = Doctrine_Query::create() | |
->from('sfGuardUserProfile p') | |
->whereIn('p.id', $ids) | |
->andWhere('p.accepted_at IS NULL'); | |
// get the matching ids | |
$records = $query->execute(); | |
if ($records) | |
{ | |
// update db | |
$query->update() | |
->set('p.accepted_at', 'CURDATE()') | |
->execute(); | |
// make sur users are actives | |
Doctrine_Query::create() | |
->update('sfGuardUser u') | |
->set('u.is_active', 1) | |
->whereIn('u.id', $ids) | |
->execute(); | |
// Place validation | |
$query_place = Doctrine_Query::create() | |
->update('PlaceEmployee p') | |
->set('p.is_valid', 1) | |
->whereIn('p.sf_guard_user_profile_id', $ids) | |
->execute(); | |
// remove cache (for all users because we don't have the cache keys of theses partials) | |
$this->getContext()->getViewCacheManager() | |
->remove('@sf_cache_partial?module=user&action=_list_td_tabular&sf_cache_key=*'); | |
// send notification emails | |
$content = StaticEditableTable::getMailContents($this->getUser()->getCulture(), 'INSCRIPTION_ACCEPTED'); | |
foreach ($records as $userProfile) | |
{ | |
$userProfile->User->addMissingInvitations(); | |
$body = StaticEditable::substituteVariables(array( | |
'partnerID' => $userProfile->User->username, | |
'firstname' => $userProfile->firstname, | |
'lastname' => $userProfile->lastname, | |
), $content['body']); | |
$message = $this->getMailer()->composeAndSend( | |
array('noreply@cestarbucks.com' => 'CE Starbucks'), | |
array($userProfile['email'] => $userProfile['firstname'] . ' ' . $userProfile['lastname']), | |
$content['subject'], | |
$body); | |
} | |
} | |
$this->getUser()->setFlash('notice', 'The selected users have been accepted successfully.'); | |
$this->redirect('@sf_guard_user'); | |
} | |
protected function executeBatchContact(sfWebRequest $request) | |
{ | |
$this->getUser()->setAttribute('individual_contact_ids', $request->getParameter('ids')); | |
$this->redirect('@user_contact?mode=individual'); | |
} | |
public function executeWaitingAvatars(sfWebRequest $request) | |
{ | |
$this->picsForm = new WaitingAvatarsForm(); | |
$this->pics = Doctrine::getTable('WaitingAvatar')->getAll(); | |
} | |
public function executeWaitingAvatarsUpdate(sfWebRequest $request) | |
{ | |
$picsForm = new WaitingAvatarsForm(); | |
$pics = Doctrine::getTable('WaitingAvatar')->getAll(); | |
$picsForm->bind($request->getParameter($picsForm->getName())); | |
if ($picsForm->isValid()) | |
{ | |
$data = $picsForm->getValues(); | |
if (isset($data['Photos'])) | |
{ | |
foreach ($data['Photos'] as $id => $avatar) | |
{ | |
if (!isset($avatar['action'])) | |
{ | |
continue; | |
} | |
if ($avatar['action'] == 'delete') | |
{ | |
$pics[$id]->deleteFiles(); | |
$pics[$id]->delete(); | |
} | |
elseif ($avatar['action'] == 'accept') | |
{ | |
// replace (or create) the photo record | |
$userProfile = Doctrine::getTable('SfGuardUser')->find($pics[$id]->sf_guard_user_profile_id); | |
// delete old photo | |
if ($userProfile->Photo->exists()) | |
{ | |
$userProfile->Photo->deleteFiles(); | |
} | |
// set the new filename | |
$userProfile->Photo->photo = $pics[$id]->photo; | |
$userProfile->Photo->save(); | |
// delete WaitingAvatar record | |
$pics[$id]->delete(); | |
} | |
} | |
$this->getUser()->setFlash('notice', 'Le contrôle des photos a été effectué avec succès'); | |
} | |
else | |
{ | |
$this->getUser()->setFlash('notice', 'Aucun photo n\'a été selectionnée'); | |
} | |
$this->redirect('@waiting_avatars'); | |
} | |
$this->picsForm = $picsForm; | |
$this->pics = $pics; | |
$this->getUser()->setFlash('error', 'Des erreurs ont empêché d\'exercer le contrôle des photos'); | |
$this->setTemplate('WaitingAvatars'); | |
} | |
public function executeContact(sfWebRequest $request) | |
{ | |
$this->contactForm = new UserContactForm(); | |
if ($request->isMethod('get')) | |
{ | |
$mode = $request->getParameter('mode'); | |
if ($mode == 'individual') | |
{ | |
$id = $this->getUser()->getAttribute('individual_contact_ids'); | |
$this->getUser()->getAttributeHolder()->remove('individual_contact_ids'); | |
} | |
else | |
{ | |
$id = $request->getParameter('id'); | |
} | |
$this->contactForm->setDefaultsByGet($mode, $id); | |
} | |
} | |
public function executeContactSend(sfWebRequest $request) | |
{ | |
$contactForm = new UserContactForm(); | |
$contactForm->bind($request->getParameter($contactForm->getName())); | |
if ($contactForm->isValid()) | |
{ | |
$nb_contacted = $this->contactPeople($contactForm->getValues()); | |
if ($nb_contacted) | |
{ | |
if ($nb_contacted == 1) | |
{ | |
$notice = "Un email a été envoyé avec succès"; | |
} | |
elseif ($nb_contacted <= 10) | |
{ | |
$notice = $nb_contacted . " emails ont été envoyés avec succès"; | |
} | |
else | |
{ | |
$notice = "L'envoi de $nb_contacted emails a été programmé avec succès"; | |
} | |
$this->getUser()->setFlash('notice', $notice); | |
$this->redirect('@user_contact'); | |
} | |
else | |
{ | |
$this->getUser()->setFlash('error', "Aucun utilisateur ne correspond aux critères de contact.", false); | |
} | |
} | |
else | |
{ | |
$this->getUser()->setFlash('error', "Une ou des erreurs de paramétrage empêchent la validation.", false); | |
} | |
$this->setTemplate('contact'); | |
$this->contactForm = $contactForm; | |
} | |
public function contactPeople($params) | |
{ | |
if ($params['mode'] == 'all') | |
{ | |
$contacted = Doctrine::getTable('sfGuardUser')->findAll(); | |
} | |
elseif ($params['mode'] == 'place') | |
{ | |
$contacted = Doctrine::getTable('PlaceEmployee')->getForPlaces($params['places'], true); | |
} | |
elseif ($params['mode'] == 'job') | |
{ | |
$contacted = Doctrine::getTable('SfGuardUserProfile')->findByTypeJob($params['jobs']); | |
} | |
elseif ($params['mode'] == 'both') | |
{ | |
$contacted = Doctrine::getTable('PlaceEmployee')->getForPlacesAndTypeJobs($params['places'], $params['jobs'], true); | |
} | |
elseif ($params['mode'] == 'individual') | |
{ | |
// we allow contact with non actived users | |
$contacted = Doctrine::getTable('sfGuardUser')->findWithProfile($params['users']); | |
} | |
$nb_contacted = 0; | |
foreach ($contacted as $single) | |
{ | |
if ($single instanceof PlaceEmployee) | |
{ | |
$sfGuardUser = $single->SfGuardUserProfile->User; | |
} | |
else | |
{ | |
if ($single instanceof sfGuardUser) | |
{ | |
$sfGuardUser = $single; | |
} | |
else | |
{ | |
$sfGuardUser = $single->User; | |
} | |
} | |
// drop ewonet account | |
if ($sfGuardUser->id == 1) | |
{ | |
continue; | |
} | |
$nb_contacted++; | |
$user_data = array(); | |
$user_data['partnerID'] = $sfGuardUser->username; | |
$user_data['email'] = $sfGuardUser->Profile->email; | |
$user_data['firstname'] = $sfGuardUser->Profile->firstname; | |
$user_data['lastname'] = $sfGuardUser->Profile->lastname; | |
// send email | |
$body = StaticEditable::substituteVariables(array( | |
'partnerID' => $user_data['partnerID'], | |
'firstname' => $user_data['firstname'], | |
'lastname' => $user_data['lastname'], | |
), $params['mail_body']); | |
$message = $this->getMailer()->composeAndSend( | |
array('noreply@cestarbucks.com' => 'CE Starbucks Coffee France'), | |
array($user_data['email'] => $user_data['firstname'] . ' ' .$user_data['lastname']), | |
$params['mail_subject'], | |
$body); | |
} | |
return $nb_contacted; | |
} | |
public function executeAutocompleteUser(sfWebRequest $request) | |
{ | |
$this->forward404Unless($request->isXMLHttpRequest()); | |
$this->getResponse()->setHttpHeader('Content-type', 'application/json'); | |
$q = $request->getParameter('q'); | |
$len = strlen($q); | |
$formatted = array(); | |
if ($len >= 3) | |
{ | |
$results = sfGuardUserTable::findByPartialUsername($q, Doctrine::HYDRATE_ARRAY); | |
foreach ($results as $user) | |
{ | |
$formatted[] = array( | |
'id' => $user['id'], | |
'username' => $user['username'], | |
'name' => $user['Profile']['lastname'] . ', ' . $user['Profile']['firstname']); | |
} | |
} | |
echo json_encode($formatted); | |
return sfView::HEADER_ONLY; | |
} | |
protected function buildQuery() | |
{ | |
$tableMethod = $this->configuration->getTableMethod(); | |
if (null === $this->filters) | |
{ | |
$this->filters = $this->configuration->getFilterForm($this->getFilters()); | |
} | |
$this->filters->setTableMethod($tableMethod); | |
$query = $this->filters->buildQuery($this->getFilters()); | |
// adds join on profile for sort and avoid multi-queries for each user | |
$alias = $query->getRootAlias(); | |
if (!$query->contains($alias.'.Profile ')) | |
{ | |
$query->leftJoin($alias.'.Profile p'); | |
} | |
// do not list the user_id = 1 (it's our account, not a real count) | |
$query->andWhere($alias.'.id != ?', 1); | |
$this->addSortQuery($query); | |
$event = $this->dispatcher->filter(new sfEvent($this, 'admin.build_query'), $query); | |
$query = $event->getReturnValue(); | |
return $query; | |
} | |
public function executeDelete(sfWebRequest $request) | |
{ | |
$request->checkCSRFProtection(); | |
if (count($this->getRoute()->getObject()->News)) | |
{ | |
$this->getUser()->setFlash('error', "Il est impossible de supprimer un utilisateur qui a écrit des actualités. Supprimez-les ou réattribuez-les avant à quelqu'un d'autre."); | |
} | |
else | |
{ | |
$this->dispatcher->notify(new sfEvent($this, 'admin.delete_object', array('object' => $this->getRoute()->getObject()))); | |
if ($this->getRoute()->getObject()->delete()) | |
{ | |
$this->getUser()->setFlash('notice', "L'utilisateur a été supprimé avec succès."); | |
} | |
} | |
$this->redirect('@sf_guard_user'); | |
} | |
public function removeCache(sfEvent $event) | |
{ | |
$cacheManager = $this->getContext()->getViewCacheManager(); | |
$cacheManager->remove('sf_guard_user/_list_td_tabular?id='.$event['object']->id.'&sf_format=*'); | |
$cacheManager->remove('sf_guard_user/_list_td_actions?id='.$event['object']->id.'&sf_format=*'); | |
} | |
protected function isValidSortColumn($column) | |
{ | |
// allow sorts on custom columns in SfGuardUserProfile table | |
switch($column) | |
{ | |
case 'p.lastname': | |
case 'p.accepted_at': | |
return true; | |
default: | |
return Doctrine::getTable('sfGuardUser')->hasColumn($column); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment