Author: david
Date: Fri Oct 29 17:49:47 2010
New Revision: 8703

Log:
Factor common acl group form elements into separate class.

Added:
   
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editDefaultAclAction.class.php
   (contents, props changed)
      - copied, changed from r8700, 
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editInformationObjectAclAction.class.php
Modified:
   
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editInformationObjectAclAction.class.php

Copied and modified: 
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editDefaultAclAction.class.php
 (from r8700, 
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editInformationObjectAclAction.class.php)
==============================================================================
--- 
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editInformationObjectAclAction.class.php
 Fri Oct 29 16:56:55 2010        (r8700, copy source)
+++ 
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editDefaultAclAction.class.php
   Fri Oct 29 17:49:47 2010        (r8703)
@@ -17,144 +17,101 @@
  * along with Qubit Toolkit.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-class AclGroupEditInformationObjectAclAction extends sfAction
+class AclGroupEditDefaultAclAction extends sfAction
 {
-  public function execute($request)
+  protected function processField($field)
   {
-    $this->form = new sfForm;
-    $this->group = new QubitAclGroup;
-
-    if (isset($this->request->id))
+    // If key has an underscore, then we are creating a new permission
+    if (1 == preg_match('/([\w]+)_(.*)/', $field->getName(), $matches))
     {
-      $this->group = QubitAclGroup::getById($this->request->id);
-
-      if (!isset($this->group))
+      list ($action, $uri) = array_slice($matches, 1, 2);
+      $params = $this->context->routing->parse(Qubit::pathInfo($uri));
+      if (isset($params['_sf_route']->resource))
       {
-        $this->forward404();
+        $resource = $params['_sf_route']->resource;
+      }
+      else
+      {
+        continue;
       }
-    }
 
-    $this->form->getValidatorSchema()->setOption('allow_extra_fields', true);
+      if (QubitAcl::INHERIT != $this->form->getValue($field->getName()) && 
isset($this->basicActions[$action]))
+      {
+        $aclPermission = new QubitAclPermission;
+        $aclPermission->action = $action;
+        $aclPermission->grantDeny = (QubitAcl::GRANT == 
$this->form->getValue($field->getName())) ? 1 : 0;
+
+        switch ($resource->className)
+        {
+          case 'QubitInformationObject':
+            $aclPermission->object = $resource;
 
-    // Build separate list of permissions by repository and by object
-    $this->repositories = array();
-    $this->informationObjects = array();
-    $this->root = array();
+            break;
 
-    if (null != $this->group->id)
-    {
-      // Get info object permissions for this group
-      $criteria = new Criteria;
-      $criteria->addJoin(QubitAclPermission::OBJECT_ID, QubitObject::ID, 
Criteria::LEFT_JOIN);
-      $criteria->add(QubitAclPermission::GROUP_ID, $this->group->id);
-      $c1 = $criteria->getNewCriterion(QubitAclPermission::OBJECT_ID, null, 
Criteria::ISNULL);
-      $c2 = $criteria->getNewCriterion(QubitObject::CLASS_NAME, 
'QubitInformationObject');
-      $c1->addOr($c2);
-      $criteria->add($c1);
+          case 'QubitRepository':
+            $aclPermission->objectId = QubitInformationObject::ROOT_ID;
+            $aclPermission->setRepository($resource);
 
-      $criteria->addAscendingOrderByColumn(QubitAclPermission::CONSTANTS);
-      $criteria->addAscendingOrderByColumn(QubitAclPermission::OBJECT_ID);
+            break;
 
-      if (0 < count($permissions = QubitAclPermission::get($criteria)))
-      {
-        foreach ($permissions as $p)
-        {
-          if (null != ($repoId = $p->getConstants(array('name' => 
'repositoryId'))))
-          {
-            $this->repositories[$repoId][$p->action] = $p;
-          }
-          else if (null != $p->objectId && QubitInformationObject::ROOT_ID != 
$p->objectId)
-          {
-            $this->informationObjects[$p->objectId][$p->action] = $p;
-          }
-          else
-          {
-            $this->root[$p->action] = $p;
-          }
+          default:
+            continue;
         }
+
+        $this->group->aclPermissions[] = $aclPermission;
       }
     }
 
-    // List of actions without translate
-    $this->basicActions = QubitInformationObjectAcl::$ACTIONS;
-    unset($this->basicActions['translate']);
-
-    if ($request->isMethod('post'))
+    // Otherwise, update an existing permission
+    else if (null !== $aclPermission = 
QubitAclPermission::getById($field->getName()))
     {
-      $this->form->bind($request->getPostParameters());
-
-      if ($this->form->isValid())
+      if ($this->form->getValue($field->getName) == QubitAcl::INHERIT)
       {
-        $this->processForm();
-        $this->redirect(array($this->group, 'module' => 'aclGroup', 'action' 
=> 'indexInformationObjectAcl'));
+        $aclPermission->delete();
+      }
+      else
+      {
+        $aclPermission->grantDeny = (QubitAcl::GRANT == 
$this->form->getValue($field->getName())) ? 1 : 0;
+
+        $this->group->aclPermissions[] = $aclPermission;
       }
     }
   }
 
   protected function processForm()
   {
-    foreach ($this->request->acl as $key => $value)
+    foreach ($this->form as $field)
     {
-      // If key has an underscore, then we are creating a new permission
-      if (1 == preg_match('/([\w]+)_(.*)/', $key, $matches))
+      if (isset($this->request[$field->getName()]))
       {
-        list ($action, $uri) = array_slice($matches, 1, 2);
-        $params = $this->context->routing->parse(Qubit::pathInfo($uri));
-        if (isset($params['_sf_route']->resource))
-        {
-          $resource = $params['_sf_route']->resource;
-        }
-        else
-        {
-          continue;
-        }
-
-        if (QubitAcl::INHERIT != $value && 
isset(QubitInformationObjectAcl::$ACTIONS[$action]))
-        {
-          $aclPermission = new QubitAclPermission;
-          $aclPermission->action = $action;
-          $aclPermission->grantDeny = (QubitAcl::GRANT == $value) ? 1 : 0;
-
-          switch ($resource->className)
-          {
-            case 'QubitInformationObject':
-              $aclPermission->object = $resource;
-
-              break;
-
-            case 'QubitRepository':
-              $aclPermission->objectId = QubitInformationObject::ROOT_ID;
-              $aclPermission->setRepository($resource);
+        $this->processField($field);
+      }
+    }
 
-              break;
+    $this->resource->save();
+  }
 
-            default:
-              continue;
-          }
+  public function execute($request)
+  {
+    $this->form = new sfForm;
+    $this->form->getValidatorSchema()->setOption('allow_extra_fields', true);
 
-          $this->group->aclPermissions[] = $aclPermission;
-        }
-      }
+    if (isset($this->request->id))
+    {
+      $this->group = QubitAclGroup::getById($this->request->id);
 
-      // Otherwise, update an existing permission
-      else if (null !== $aclPermission = QubitAclPermission::getById($key))
+      if (!isset($this->group))
       {
-        if ($value == QubitAcl::INHERIT)
-        {
-          $aclPermission->delete();
-        }
-        else
-        {
-          $aclPermission->grantDeny = (QubitAcl::GRANT == $value) ? 1 : 0;
-
-          $this->group->aclPermissions[] = $aclPermission;
-        }
+        $this->forward404();
       }
     }
 
-    // Save updates
-    $this->group->save();
-
-    return $this;
+    // 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);
+    }
   }
 }

Modified: 
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editInformationObjectAclAction.class.php
==============================================================================
--- 
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editInformationObjectAclAction.class.php
 Fri Oct 29 17:37:08 2010        (r8702)
+++ 
trunk/plugins/qbAclPlugin/modules/aclGroup/actions/editInformationObjectAclAction.class.php
 Fri Oct 29 17:49:47 2010        (r8703)
@@ -17,24 +17,11 @@
  * along with Qubit Toolkit.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-class AclGroupEditInformationObjectAclAction extends sfAction
+class AclGroupEditInformationObjectAclAction extends 
AclGroupEditDefaultAclAction 
 {
   public function execute($request)
   {
-    $this->form = new sfForm;
-    $this->group = new QubitAclGroup;
-
-    if (isset($this->request->id))
-    {
-      $this->group = QubitAclGroup::getById($this->request->id);
-
-      if (!isset($this->group))
-      {
-        $this->forward404();
-      }
-    }
-
-    $this->form->getValidatorSchema()->setOption('allow_extra_fields', true);
+    parent::execute($request);
 
     // Build separate list of permissions by repository and by object
     $this->repositories = array();
@@ -90,71 +77,4 @@
       }
     }
   }
-
-  protected function processForm()
-  {
-    foreach ($this->request->acl as $key => $value)
-    {
-      // If key has an underscore, then we are creating a new permission
-      if (1 == preg_match('/([\w]+)_(.*)/', $key, $matches))
-      {
-        list ($action, $uri) = array_slice($matches, 1, 2);
-        $params = $this->context->routing->parse(Qubit::pathInfo($uri));
-        if (isset($params['_sf_route']->resource))
-        {
-          $resource = $params['_sf_route']->resource;
-        }
-        else
-        {
-          continue;
-        }
-
-        if (QubitAcl::INHERIT != $value && 
isset(QubitInformationObjectAcl::$ACTIONS[$action]))
-        {
-          $aclPermission = new QubitAclPermission;
-          $aclPermission->action = $action;
-          $aclPermission->grantDeny = (QubitAcl::GRANT == $value) ? 1 : 0;
-
-          switch ($resource->className)
-          {
-            case 'QubitInformationObject':
-              $aclPermission->object = $resource;
-
-              break;
-
-            case 'QubitRepository':
-              $aclPermission->objectId = QubitInformationObject::ROOT_ID;
-              $aclPermission->setRepository($resource);
-
-              break;
-
-            default:
-              continue;
-          }
-
-          $this->group->aclPermissions[] = $aclPermission;
-        }
-      }
-
-      // Otherwise, update an existing permission
-      else if (null !== $aclPermission = QubitAclPermission::getById($key))
-      {
-        if ($value == QubitAcl::INHERIT)
-        {
-          $aclPermission->delete();
-        }
-        else
-        {
-          $aclPermission->grantDeny = (QubitAcl::GRANT == $value) ? 1 : 0;
-
-          $this->group->aclPermissions[] = $aclPermission;
-        }
-      }
-    }
-
-    // Save updates
-    $this->group->save();
-
-    return $this;
-  }
 }

-- 
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