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

Reply via email to