Skip to content

Instantly share code, notes, and snippets.

Created September 15, 2011 13:32
Show Gist options
  • Save anonymous/1219230 to your computer and use it in GitHub Desktop.
Save anonymous/1219230 to your computer and use it in GitHub Desktop.
Code in action.php
<?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