Author: david
Date: Tue Sep 22 18:03:13 2009
New Revision: 3472

Log:
Limit informationobject/editIsad repository autocomplete list based on which 
repositories to which the user can assign information objects. Fixes issue #977.

Modified:
   trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
   trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php
   trunk/apps/qubit/modules/repository/actions/listAction.class.php
   trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php

Modified: 
trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/actions/editAction.class.php     
Tue Sep 22 17:25:07 2009        (r3471)
+++ trunk/apps/qubit/modules/informationobject/actions/editAction.class.php     
Tue Sep 22 18:03:13 2009        (r3472)
@@ -147,6 +147,7 @@
     $this->form->getValidatorSchema()->setOption('allow_extra_fields', true);
 
     $this->informationObject = new QubitInformationObject;
+    $this->aclActionId = QubitAclAction::CREATE_ID;
 
     if (isset($request->id))
     {
@@ -158,6 +159,8 @@
         $this->forward404();
       }
 
+      $this->aclActionId = QubitAclAction::UPDATE_ID;
+
       // Add optimistic lock
       $this->form->setDefault('serialNumber', 
$this->informationObject->serialNumber);
       $this->form->setValidator('serialNumber', new sfValidatorInteger);

Modified: 
trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php    
Tue Sep 22 17:25:07 2009        (r3471)
+++ trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php    
Tue Sep 22 18:03:13 2009        (r3472)
@@ -117,7 +117,7 @@
     <div class="form-item">
       <?php echo $form->repository->renderLabel() ?>
       <?php echo $form->repository->render(array('class' => 
'form-autocomplete')) ?>
-      <input class="list" type="hidden" value="<?php echo 
url_for(array('module' => 'repository', 'action' => 'list')) ?>"/>
+      <input class="list" type="hidden" value="<?php echo 
url_for(array('module' => 'repository', 'action' => 'list', 'informationObject' 
=> $informationObject->id, 'aclAction' => $aclActionId)) ?>"/>
     </div>
 
     <?php echo render_field($form->archivalHistory->help(__('Record the 
successive transfers of ownership, responsibility and/or custody of the unit of 
description and indicate those actions, such as history of the arrangement, 
production of contemporary finding aids, re-use of the records for other 
purposes or software migrations, that have contributed to its present structure 
and arrangement. Give the dates of these actions, insofar as they can be 
ascertained. If the archival history is unknown, record that information.')), 
$informationObject, array('class' => 'resizable')) ?>

Modified: trunk/apps/qubit/modules/repository/actions/listAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/repository/actions/listAction.class.php    Tue Sep 
22 17:25:07 2009        (r3471)
+++ trunk/apps/qubit/modules/repository/actions/listAction.class.php    Tue Sep 
22 18:03:13 2009        (r3472)
@@ -30,6 +30,30 @@
     $search = new QubitSearch;
     $query = new Zend_Search_Lucene_Search_Query_Term(new 
Zend_Search_Lucene_Index_Term('QubitRepository', 'className'));
 
+    // Filter 'denied' repositories if list for repository auto-complete on 
info
+    // object form
+    if (isset($request->informationObject) && isset($request->aclAction))
+    {
+      $informationObject = 
QubitInformationObject::getById($request->informationObject);
+      $deniedRepositories = QubitAcl::deniedRepositories($informationObject, 
$request->aclAction);
+
+      // If all repositories are denied, no response
+      if (array('*') == $deniedRepositories)
+      {
+
+        return sfView::NONE;
+      }
+
+      $subquery1 = new Zend_Search_Lucene_Search_Query_MultiTerm();
+      foreach ($deniedRepositories as $repositoryId)
+      {
+        $subquery1->addTerm(new Zend_Search_Lucene_Index_Term($repositoryId, 
'id'));
+      }
+
+      $query = new Zend_Search_Lucene_Search_Query_Boolean(array($query));
+      $query->addSubquery($subquery1, false /* prohibited */);
+    }
+
     if (isset($request->query))
     {
       $query = new Zend_Search_Lucene_Search_Query_Boolean(array($query, 
Zend_Search_Lucene_Search_QueryParser::parse($request->query)));

Modified: trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php
==============================================================================
--- trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php    Tue Sep 22 17:25:07 
2009        (r3471)
+++ trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php    Tue Sep 22 18:03:13 
2009        (r3472)
@@ -310,4 +310,34 @@
 
     return self::evalGrantDeny($grantDeny);
   }
+
+  public static function deniedRepositories($informationObject, $actionId, 
$options = array())
+  {
+    $deniedRepositories = array();
+
+    if (!$informationObject instanceof QubitInformationObject)
+    {
+
+      return;
+    }
+
+    // get repository list
+    $repositories = QubitRepository::getAll();
+
+    foreach ($repositories as $repository)
+    {
+      $options['parameters'] = array('repositoryId' => $repository->id);
+      if (self::DENY == self::check($informationObject, $actionId, $options))
+      {
+        $deniedRepositories[] = $repository->id;
+      }
+    }
+
+    if (count($repositories) == count($deniedRepositories))
+    {
+      $deniedRepositories = array('*');
+    }
+
+    return $deniedRepositories;
+  }
 }

--~--~---------~--~----~------------~-------~--~----~
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.ca/group/qubit-commits?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to