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.
