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