Como el administrador debe activar a cada afiliado, tenemos que crear en la aplicación backend
un nuevo módulo llamado affiliate
:
$ php symfony propel:generate-admin backend JobeetAffiliate --module=affiliate
Para que el administrador pueda acceder al nuevo módulo, añade un enlace en el menú principal que indique el número de afiliados que están pendientes de activar:
<!-- apps/backend/templates/layout.php -->
<li>
<a href="<?php echo url_for('@jobeet_affiliate') ?>">
Affiliates - <strong><?php echo JobeetAffiliatePeer::countToBeActivated() ?></strong>
</a>
</li>
// lib/model/JobeetAffiliatePeer.php
class JobeetAffiliatePeer extends BaseJobeetAffiliatePeer
{
static public function countToBeActivated()
{
$criteria = new Criteria();
$criteria->add(self::IS_ACTIVE, 0);
return self::doCount($criteria);
}
// ...
}
La única acción que necesitamos en el backend
es la de activar o desactivar cuentas de afiliados, así que puedes modificar la sección config
creada automáticamente por la tarea propel:generate-admin
para simplificar un poco la interfaz y para añadir al listado un enlace que permita activar cuentas directamente:
# apps/backend/modules/affiliate/config/generator.yml
config:
fields:
is_active: { label: Active? }
list:
title: Affiliate Management
display: [is_active, url, email, token]
sort: [is_active]
object_actions:
activate: ~
deactivate: ~
batch_actions:
activate: ~
deactivate: ~
actions: {}
filter:
display: [url, email, is_active]
Si quieres mejorar la productividad de los administradores, modifica los filtros por defecto para que muestren sólo los afiliados pendientes de activar:
// apps/backend/modules/affiliate/lib/affiliateGeneratorConfiguration.class.php
class affiliateGeneratorConfiguration extends BaseAffiliateGeneratorConfiguration
{
public function getFilterDefaults()
{
return array('is_active' => '0');
}
}
El único código que tienes que escribir es el correspondiente a las acciones activate
y deactivate
:
// apps/backend/modules/affiliate/actions/actions.class.php
class affiliateActions extends autoAffiliateActions
{
public function executeListActivate()
{
$this->getRoute()->getObject()->activate();
$this->redirect('@jobeet_affiliate');
}
public function executeListDeactivate()
{
$this->getRoute()->getObject()->deactivate();
$this->redirect('@jobeet_affiliate');
}
public function executeBatchActivate(sfWebRequest $request)
{
$affiliates = JobeetAffiliatePeer::retrieveByPks($request->getParameter('ids'));
foreach ($affiliates as $affiliate)
{
$affiliate->activate();
}
$this->redirect('@jobeet_affiliate');
}
public function executeBatchDeactivate(sfWebRequest $request)
{
$affiliates = JobeetAffiliatePeer::retrieveByPks($request->getParameter('ids'));
foreach ($affiliates as $affiliate)
{
$affiliate->deactivate();
}
$this->redirect('@jobeet_affiliate');
}
}
// lib/model/JobeetAffiliate.php
class JobeetAffiliate extends BaseJobeetAffiliate
{
public function activate()
{
$this->setIsActive(true);
return $this->save();
}
public function deactivate()
{
$this->setIsActive(false);
return $this->save();
}
// ...
}