Author: david
Date: Tue Sep 29 10:24:30 2009
New Revision: 3586
Log:
Check publish status permissions on current object. Remove inaccessible
choices from publication status drop-down. Fixes issue #1032.
Modified:
trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
Modified:
trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
Tue Sep 29 00:02:43 2009 (r3585)
+++ trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
Tue Sep 29 10:24:30 2009 (r3586)
@@ -86,24 +86,30 @@
break;
case 'publicationStatus':
- $this->form->setDefault('publicationStatus',
$this->context->routing->generate(null, array('module' => 'term', 'action' =>
'show', 'id' => $this->informationObject->getStatus($options = array('typeId'
=> QubitTerm::STATUS_TYPE_PUBLICATION_ID))->statusId)));
+ $this->form->setDefault('publicationStatus',
$this->informationObject->getStatus($options = array('typeId' =>
QubitTerm::STATUS_TYPE_PUBLICATION_ID))->statusId);
$this->form->setValidator('publicationStatus', new sfValidatorString);
- $choices = array();
- $choices[null] = null;
- foreach
(QubitTaxonomy::getTermsById(QubitTaxonomy::PUBLICATION_STATUS_ID) as $term)
+ if (QubitAcl::check($this->informationObject,
QubitAclAction::PUBLISH_ID))
{
- $choices[$this->context->routing->generate(null, array('module' =>
'term', 'action' => 'show', 'id' => $term->id))] = $term;
- }
+ $choices = array();
+ $choices[null] = null;
+ foreach
(QubitTaxonomy::getTermsById(QubitTaxonomy::PUBLICATION_STATUS_ID) as $term)
+ {
+ $choices[$term->id] = $term->getName(array('cultureFallback' =>
true));
+ }
- if (QubitAcl::check(QubitInformationObject::getRoot(),
QubitAclAction::PUBLISH_ID))
- {
$this->form->setWidget('publicationStatus', new
sfWidgetFormSelect(array('choices' => $choices)));
}
else
{
+ $curStatusId = $this->informationObject->getStatus($options =
array('typeId' => QubitTerm::STATUS_TYPE_PUBLICATION_ID))->statusId;
+ if (null != ($curStatus = QubitTerm::getById($curStatusId)))
+ {
+ $curStatus = $curStatus->name;
+ }
+
// disable widget if user does not have 'publish' permission
- $this->form->setWidget('publicationStatus', new
sfWidgetFormSelect(array('choices' => $choices), array('disabled' => true)));
+ $this->form->setWidget('publicationStatus', new
sfWidgetFormSelect(array('choices' => array($curStatusId => $curStatus)),
array('disabled' => true)));
}
break;
@@ -535,18 +541,20 @@
public function updateStatus()
{
- if (!QubitAcl::check(QubitInformationObject::getRoot(),
QubitAclAction::PUBLISH_ID))
+ if (!QubitAcl::check($this->informationObject, QubitAclAction::PUBLISH_ID))
{
// if the user does not have 'publish' permission, automatically set
publication status to 'draft'
$this->informationObject->setStatus($options = array('typeId' =>
QubitTerm::STATUS_TYPE_PUBLICATION_ID, 'statusId' =>
QubitTerm::PUBLICATION_STATUS_DRAFT_ID));
}
else
{
- $params =
$this->context->routing->parse(preg_replace('/.*'.preg_quote($this->request->getPathInfoPrefix(),
'/').'/', null, $this->getRequestParameter('publicationStatus')));
+ $pubStatusId = $this->form->getValue('publicationStatus');
+
// only update publicationStatus if its value has changed because it
triggers a resource-intensive update of all its descendants
- if ($params['id'] !== $this->informationObject->getStatus($options =
array('typeId' => QubitTerm::STATUS_TYPE_PUBLICATION_ID))->statusId)
+ if ($pubStatusId !== $this->informationObject->getStatus($options =
array('typeId' => QubitTerm::STATUS_TYPE_PUBLICATION_ID))->statusId)
{
- $this->informationObject->setStatus($options = array('typeId' =>
QubitTerm::STATUS_TYPE_PUBLICATION_ID, 'statusId' => $params['id']));
+ $this->informationObject->setStatus($options = array('typeId' =>
QubitTerm::STATUS_TYPE_PUBLICATION_ID, 'statusId' => $pubStatusId));
+
// if publication status has changed, set the status of all its
descendants to null
// so that they inherit the newly changed status, and update their
search index
// document so that the changed status is reflected in search and list
browse results
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---