Author: sevein
Date: Wed Oct 27 06:38:35 2010
New Revision: 8540

Log:
Use $resource, extend DefaultEditAction and cosmetic changes.

Modified:
   trunk/apps/qubit/modules/user/actions/editAction.class.php
   trunk/apps/qubit/modules/user/templates/editSuccess.php

Modified: trunk/apps/qubit/modules/user/actions/editAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/user/actions/editAction.class.php  Wed Oct 27 
05:24:47 2010        (r8539)
+++ trunk/apps/qubit/modules/user/actions/editAction.class.php  Wed Oct 27 
06:38:35 2010        (r8540)
@@ -17,30 +17,64 @@
  * along with Qubit Toolkit.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-class UserEditAction extends sfAction
+class UserEditAction extends DefaultEditAction
 {
+  // Arrays not allowed in class constants
   public static
     $NAMES = array(
-      'username',
-      'email',
-      'password',
       'confirmPassword',
+      'email',
       'groups',
-      'translate');
+      'password',
+      'translate',
+      'username');
+
+  protected function earlyExecute()
+  {
+    $this->form->getValidatorSchema()->setOption('allow_extra_fields', true);
+    $this->form->getValidatorSchema()->setPostValidator(new 
sfValidatorSchemaCompare(
+      'password', '==', 'confirmPassword',
+      array(),
+      array('invalid' => $this->context->i18n->__('Your password confirmation 
did not match you password.'))));
+
+    $this->resource = new QubitUser;
+    if (isset($this->getRoute()->resource))
+    {
+      $this->resource = $this->getRoute()->resource;
+    }
+
+    // HACK: because $this->user->getAclPermissions() is erroneously calling
+    // QubitObject::getaclPermissionsById()
+    $this->permissions = null;
+    if (isset($request->id))
+    {
+      $permissions = QubitUser::getaclPermissionsById($this->resource->id, 
array('self' => $this))->orderBy('constants')->orderBy('object_id');
+
+      foreach ($permissions as $item)
+      {
+        $repoId = $item->getConstants(array('name' => 'repositoryId'));
+        $this->permissions[$repoId][$item->objectId][$item->action] = 
$item->grantDeny;
+      }
+    }
+
+    // List of actions without translate
+    $this->basicActions = QubitInformationObjectAcl::$ACTIONS;
+    unset($this->basicActions['translate']);
+  }
 
   protected function addField($name)
   {
     switch ($name)
     {
       case 'username':
-        $this->form->setDefault($name, $this->user[$name]);
+        $this->form->setDefault($name, $this->resource[$name]);
         $this->form->setValidator($name, new 
sfValidatorString(array('required' => true)));
         $this->form->setWidget($name, new sfWidgetFormInput);
 
         break;
 
       case 'email':
-        $this->form->setDefault($name, $this->user[$name]);
+        $this->form->setDefault($name, $this->resource[$name]);
         $this->form->setValidator($name, new sfValidatorEmail(array('required' 
=> true)));
         $this->form->setWidget($name, new sfWidgetFormInput);
 
@@ -50,7 +84,7 @@
       case 'confirmPassword':
         $this->form->setDefault($name, null);
         // Required field only if a new user is being created
-        $this->form->setValidator($name, new 
sfValidatorString(array('required' => !isset($this->request->id))));
+        $this->form->setValidator($name, new 
sfValidatorString(array('required' => !isset($this->getRoute()->resource))));
         $this->form->setWidget($name, new sfWidgetFormInputPassword);
 
         break;
@@ -58,18 +92,18 @@
       case 'groups':
         $values = array();
         $criteria = new Criteria;
-        $criteria->add(QubitAclUserGroup::USER_ID, $this->user->id);
-        foreach (QubitAclUserGroup::get($criteria) as $userGroup)
+        $criteria->add(QubitAclUserGroup::USER_ID, $this->resource->id);
+        foreach (QubitAclUserGroup::get($criteria) as $item)
         {
-          $values[] = $userGroup->groupId;
+          $values[] = $item->groupId;
         }
 
         $choices = array();
         $criteria = new Criteria;
         $criteria->add(QubitAclGroup::ID, 99, Criteria::GREATER_THAN);
-        foreach (QubitAclGroup::get($criteria) as $group)
+        foreach (QubitAclGroup::get($criteria) as $item)
         {
-          $choices[$group->id] = $group->getName(array('cultureFallback' => 
true));
+          $choices[$item->id] = $item->getName(array('cultureFallback' => 
true));
         }
 
         $this->form->setDefault($name, $values);
@@ -85,15 +119,15 @@
         $choices = array();
         if (0 < count($langSettings = 
QubitSetting::getByScope('i18n_languages')))
         {
-          foreach ($langSettings as $setting)
+          foreach ($langSettings as $item)
           {
-            $choices[$setting->name] = $languages[$setting->name];
+            $choices[$item->name] = $languages[$item->name];
           }
         }
 
         // Find existing translate permissions
         $criteria = new Criteria;
-        $criteria->add(QubitAclPermission::USER_ID, $this->user->id);
+        $criteria->add(QubitAclPermission::USER_ID, $this->resource->id);
         $criteria->add(QubitAclPermission::ACTION, 'translate');
 
         $defaults = null;
@@ -118,7 +152,7 @@
 
         if (0 < strlen(trim($this->form->getValue('password'))))
         {
-          $this->user->setPassword($this->form->getValue('password'));
+          $this->resource->setPassword($this->form->getValue('password'));
         }
 
         break;
@@ -132,9 +166,9 @@
 
         if (null != ($groups = $this->form->getValue('groups')))
         {
-          foreach ($groups as $groupId)
+          foreach ($groups as $item)
           {
-            $newGroupIds[$groupId] = $formGroupIds[$groupId] = $groupId;
+            $newGroupIds[$item] = $formGroupIds[$item] = $item;
           }
         }
         else
@@ -144,24 +178,24 @@
 
         // Don't re-add existing groups + delete exiting groups that are no 
longer
         // in groups list
-        foreach ($this->user->aclUserGroups as $existingUserGroup)
+        foreach ($this->resource->aclUserGroups as $item)
         {
-          if (in_array($existingUserGroup->groupId, $formGroupIds))
+          if (in_array($item->groupId, $formGroupIds))
           {
-            unset($newGroupIds[$existingUserGroup->groupId]);
+            unset($newGroupIds[$item->groupId]);
           }
           else
           {
-            $existingUserGroup->delete();
+            $item->delete();
           }
         }
 
-        foreach ($newGroupIds as $groupId)
+        foreach ($newGroupIds as $item)
         {
           $userGroup = new QubitAclUserGroup;
-          $userGroup->groupId = $groupId;
+          $userGroup->groupId = $item;
 
-          $this->user->aclUserGroups[] = $userGroup;
+          $this->resource->aclUserGroups[] = $userGroup;
         }
 
         break;
@@ -170,14 +204,14 @@
         $languages = $this->form->getValue('translate');
 
         $criteria = new Criteria;
-        $criteria->add(QubitAclPermission::USER_ID, $this->user->id);
+        $criteria->add(QubitAclPermission::USER_ID, $this->resource->id);
         $criteria->addAnd(QubitAclPermission::USER_ID, null, 
Criteria::ISNOTNULL);
         $criteria->add(QubitAclPermission::ACTION, 'translate');
 
         if (null === $permission = QubitAclPermission::getOne($criteria))
         {
           $permission = new QubitAclPermission;
-          $permission->userId = $this->user->id;
+          $permission->userId = $this->resource->id;
           $permission->action = 'translate';
           $permission->grantDeny = 1;
           $permission->conditional = 'in_array(%p[language], %k[languages])';
@@ -197,67 +231,13 @@
         break;
 
       default:
-        $this->user[$name] = $this->form->getValue($name);
+        $this->resource[$name] = $this->form->getValue($name);
     }
   }
 
-  protected function processForm()
-  {
-    foreach ($this->form as $field)
-    {
-      $this->processField($field);
-    }
-
-    return $this;
-  }
-
   public function execute($request)
   {
-    $this->form = new sfForm;
-
-    $this->user = new QubitUser;
-
-    if (isset($this->request->id))
-    {
-      $this->user = QubitUser::getById($this->request->id);
-
-      if (!isset($this->user))
-      {
-        $this->forward404();
-      }
-    }
-
-    $this->form->getValidatorSchema()->setOption('allow_extra_fields', true);
-    $this->form->getValidatorSchema()->setPostValidator(new 
sfValidatorSchemaCompare(
-      'password', '==', 'confirmPassword',
-      array(),
-      array('invalid' => $this->context->i18n->__('Your password confirmation 
did not match you password.'))));
-
-    // HACK: Use static::$NAMES in PHP 5.3,
-    // http://php.net/oop5.late-static-bindings
-    $class = new ReflectionClass($this);
-    foreach ($class->getStaticPropertyValue('NAMES') as $name)
-    {
-      $this->addField($name);
-    }
-
-    // HACK: because $this->user->getAclPermissions() is erroneously calling
-    // QubitObject::getaclPermissionsById()
-    $this->permissions = null;
-    if (isset($request->id))
-    {
-      $permissions = QubitUser::getaclPermissionsById($this->user->id, 
array('self' => $this))->orderBy('constants')->orderBy('object_id');
-
-      foreach ($permissions as $item)
-      {
-        $repoId = $item->getConstants(array('name' => 'repositoryId'));
-        $this->permissions[$repoId][$item->objectId][$item->action] = 
$item->grantDeny;
-      }
-    }
-
-    // List of actions without translate
-    $this->basicActions = QubitInformationObjectAcl::$ACTIONS;
-    unset($this->basicActions['translate']);
+    parent::execute($request);
 
     if ($request->isMethod('post'))
     {
@@ -267,9 +247,9 @@
       {
         $this->processForm();
 
-        $this->user->save();
+        $this->resource->save();
 
-        $this->redirect(array($this->user, 'module' => 'user'));
+        $this->redirect(array($this->resource, 'module' => 'user'));
       }
     }
   }

Modified: trunk/apps/qubit/modules/user/templates/editSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/user/templates/editSuccess.php     Wed Oct 27 
05:24:47 2010        (r8539)
+++ trunk/apps/qubit/modules/user/templates/editSuccess.php     Wed Oct 27 
06:38:35 2010        (r8540)
@@ -1,18 +1,18 @@
 <?php use_helper('Javascript') ?>
 
 <h1>
-  <?php if (isset($sf_request->id)): ?>
+  <?php if (isset($sf_request->getAttribute('sf_route')->resource)): ?>
     <?php echo __('Edit user') ?>
   <?php else: ?>
-    <?php echo __('Create new user') ?>
+    <?php echo __('Add new user') ?>
   <?php endif; ?>
 </h1>
 
-<?php if (isset($sf_request->id)): ?>
-  <h1 class="label"><?php echo __('%1% profile', array('%1%' => 
$user->username)) ?></h1>
+<?php if (isset($sf_request->getAttribute('sf_route')->resource)): ?>
+  <h1 class="label"><?php echo __('%1% profile', array('%1%' => 
$resource->username)) ?></h1>
 <?php endif; ?>
 
-<?php echo $form->renderFormTag(url_for(array($user, 'module' => 'user', 
'action' => 'edit')), array('id' => 'editForm')) ?>
+<?php echo $form->renderFormTag(url_for(array($resource, 'module' => 'user', 
'action' => 'edit')), array('id' => 'editForm')) ?>
 
   <fieldset class="collapsible" id="basicInfo">
 
@@ -74,8 +74,8 @@
 
     <div class="content">
       <ul class="clearfix links">
-        <?php if (isset($sf_request->id)): ?>
-          <li><?php echo link_to(__('Cancel'), array($user, 'module' => 
'user')) ?></li>
+        <?php if (isset($sf_request->getAttribute('sf_route')->resource)): ?>
+          <li><?php echo link_to(__('Cancel'), array($resource, 'module' => 
'user')) ?></li>
           <li><input class="form-submit" type="submit" value="<?php echo 
__('Save') ?>"/></li>
         <?php else: ?>
           <li><?php echo link_to(__('Cancel'), array('module' => 'user', 
'action' => 'list')) ?></li>

-- 
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/qubit-commits?hl=en.

Reply via email to