Author: peter
Date: Fri Sep 18 22:47:10 2009
New Revision: 3424

Log:
inherit publicationStatus from ancestors. todo: if publicationStatus changes, 
iterate over descendants, set their publicationStatus to null and re-index each 
descendant to inherit the changed publicationStatus (needs to be reflected in 
each descendant's search index document as this is used to filter searches and 
browse list according to publicationStatus

Modified:
   trunk/apps/qubit/lib/SearchIndex.class.php
   trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
   trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php
   trunk/data/fixtures/taxonomyTerms.yml
   trunk/lib/QubitDc.class.php
   trunk/lib/QubitIsad.class.php
   trunk/lib/QubitMods.class.php
   trunk/lib/QubitRad.class.php
   trunk/lib/model/QubitInformationObject.php

Modified: trunk/apps/qubit/lib/SearchIndex.class.php
==============================================================================
--- trunk/apps/qubit/lib/SearchIndex.class.php  Fri Sep 18 18:40:13 2009        
(r3423)
+++ trunk/apps/qubit/lib/SearchIndex.class.php  Fri Sep 18 22:47:10 2009        
(r3424)
@@ -221,7 +221,7 @@
 
     $doc->addField(Zend_Search_Lucene_Field::Keyword('culture', $language));
 
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('publicationStatusId', 
$informationObject->getStatus(array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID))->statusId));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('publicationStatusId', 
$informationObject->getPublicationStatus()->statusId));
 
     // Note: text fields have to be converted to lower-case for use with utf-8 
analyzer
 

Modified: 
trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/actions/editAction.class.php     
Fri Sep 18 18:40:13 2009        (r3423)
+++ trunk/apps/qubit/modules/informationobject/actions/editAction.class.php     
Fri Sep 18 22:47:10 2009        (r3424)
@@ -63,38 +63,23 @@
         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->setValidator('publicationStatus', new sfValidatorString);
+        $choices = array();
+        $choices[null] = null;
+        foreach 
(QubitTaxonomy::getTermsById(QubitTaxonomy::PUBLICATION_STATUS_ID) as $term)
+        {
+          $choices[$this->context->routing->generate(null, array('module' => 
'term', 'action' => 'show', 'id' => $term->id))] = $term;
+        }
         if (QubitAcl::check($this->informationObject, 
QubitAclAction::PUBLISH_ID))
         {
-          if ($publicationStatusId = 
$this->informationObject->getStatus($options = array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID))->statusId)
-          {
-            $this->form->setDefault('publicationStatus', 
$this->context->routing->generate(null, array('module' => 'term', 'action' => 
'show', 'id' => $publicationStatusId)));
-          }
-          else
-          {
-            // set default publication status to 'draft'
-            $this->form->setDefault('publicationStatus', 
$this->context->routing->generate(null, array('module' => 'term', 'action' => 
'show', 'id' => QubitTerm::PUBLICATION_STATUS_DRAFT_ID)));
-          }
-          $choices = array(); // no null option for publicationStatus
-          foreach 
(QubitTaxonomy::getTermsById(QubitTaxonomy::PUBLICATION_STATUS_ID) as $term)
-          {
-            $choices[$this->context->routing->generate(null, array('module' => 
'term', 'action' => 'show', 'id' => $term->id))] = $term;
-          }
+          $this->form->setWidget('publicationStatus', new 
sfWidgetFormSelect(array('choices' => $choices)));
         }
         else
         {
-          // if user does not have publish permission always limit the widget 
values to 'draft'
-          $this->form->setDefault('publicationStatus', 
$this->context->routing->generate(null, array('module' => 'term', 'action' => 
'show', 'id' => QubitTerm::PUBLICATION_STATUS_DRAFT_ID)));
-
-          $choices = array(); // no null option for publicationStatus
-          $term = QubitTerm::getById(QubitTerm::PUBLICATION_STATUS_DRAFT_ID);
-            {
-              $choices[$this->context->routing->generate(null, array('module' 
=> 'term', 'action' => 'show', 'id' => $term->id))] = $term;
-            }
+          // disable widget if user does not have 'publish' permission
+          $this->form->setWidget('publicationStatus', new 
sfWidgetFormSelect($options = array('choices' => $choices), $attributes = 
array('disabled' => true)));
         }
-        $this->form->setValidator('publicationStatus', new sfValidatorString);
-        $this->form->setWidget('publicationStatus', new 
sfWidgetFormSelect(array('choices' => $choices)));
-
         break;
 
       case 'language':
@@ -537,9 +522,15 @@
 
   public function updateStatus()
   {
-    $params = 
$this->context->routing->parse(preg_replace('/.*'.preg_quote($this->request->getPathInfoPrefix(),
 '/').'/', null, $this->getRequestParameter('publicationStatus')));
-
-    $this->informationObject->setStatus($options = array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID, 'statusId' => $params['id']));
+    if (!QubitAcl::check(QubitInformationObject::getRoot(), 
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')));
+      $this->informationObject->setStatus($options = array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID, 'statusId' => $params['id']));
+    }
   }
-
 }

Modified: 
trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php    
Fri Sep 18 18:40:13 2009        (r3423)
+++ trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php    
Fri Sep 18 22:47:10 2009        (r3424)
@@ -364,7 +364,20 @@
   </fieldset>
 
   <div class="admin-info">
-  <?php echo $form->publicationStatus->label(__('Publication 
Status'))->renderRow() ?>
+    <table><tr><td><?php echo $form->publicationStatus->label(__('Publication 
Status'))->renderRow() ?></td>
+    <td><div class="form-item"><label for="source language"><?php echo 
__('source language') ?></label>
+    <?php if ($sourceLanguage = $informationObject->getSourceCulture()): ?>
+      <?php if ($sourceLanguage == $sf_user->getCulture()): ?>
+        <?php echo format_language($sourceLanguage) ?>
+      <?php else: ?>
+        <div class="default-translation">
+        <?php echo link_to(format_language($sourceLanguage), 
$sf_data->getRaw('sf_context')->getRouting()->getCurrentInternalUri(), 
array('query_string' => 'sf_culture='.$sourceLanguage)) ?>
+        </div>
+      <?php endif; ?>
+    <?php else: ?>
+      <?php echo format_language($sf_user->getCulture()) ?>
+    <?php endif;?>
+    </div></td></tr></table>
   </div>
 
   <?php if ($sf_context->getActionName() == 'create'): ?>

Modified: trunk/data/fixtures/taxonomyTerms.yml
==============================================================================
--- trunk/data/fixtures/taxonomyTerms.yml       Fri Sep 18 18:40:13 2009        
(r3423)
+++ trunk/data/fixtures/taxonomyTerms.yml       Fri Sep 18 22:47:10 2009        
(r3424)
@@ -2176,3 +2176,8 @@
     source_culture: en
     content:
       en: 'Rules for Archival Description 1.4G'
+QubitStatus:
+  QubitStatus_information_object_root:
+    object_id: <?php echo QubitInformationObject::ROOT_ID."\n" ?>
+    type_id: <?php echo QubitTerm::STATUS_TYPE_PUBLICATION_ID."\n" ?>
+    status_id: <?php echo QubitTerm::PUBLICATION_STATUS_DRAFT_ID."\n" ?>

Modified: trunk/lib/QubitDc.class.php
==============================================================================
--- trunk/lib/QubitDc.class.php Fri Sep 18 18:40:13 2009        (r3423)
+++ trunk/lib/QubitDc.class.php Fri Sep 18 22:47:10 2009        (r3424)
@@ -58,7 +58,7 @@
       $label = truncate_text($label, $options['truncate']);
     }
 
-    $publicationStatus = $informationObject->getStatus(array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID));
+    $publicationStatus = $informationObject->getPublicationStatus();
     if ($publicationStatus->statusId == QubitTerm::PUBLICATION_STATUS_DRAFT_ID)
     {
       $label .= ' ('.$publicationStatus->status.')';

Modified: trunk/lib/QubitIsad.class.php
==============================================================================
--- trunk/lib/QubitIsad.class.php       Fri Sep 18 18:40:13 2009        (r3423)
+++ trunk/lib/QubitIsad.class.php       Fri Sep 18 22:47:10 2009        (r3424)
@@ -57,7 +57,7 @@
       $label = truncate_text($label, $options['truncate']);
     }
 
-    $publicationStatus = $informationObject->getStatus(array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID));
+    $publicationStatus = $informationObject->getPublicationStatus();
     if ($publicationStatus->statusId == QubitTerm::PUBLICATION_STATUS_DRAFT_ID)
     {
       $label .= ' ('.$publicationStatus->status.')';

Modified: trunk/lib/QubitMods.class.php
==============================================================================
--- trunk/lib/QubitMods.class.php       Fri Sep 18 18:40:13 2009        (r3423)
+++ trunk/lib/QubitMods.class.php       Fri Sep 18 22:47:10 2009        (r3424)
@@ -56,7 +56,7 @@
       $label = truncate_text($label, $options['truncate']);
     }
 
-    $publicationStatus = $informationObject->getStatus(array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID));
+    $publicationStatus = $informationObject->getPublicationStatus();
     if ($publicationStatus->statusId == QubitTerm::PUBLICATION_STATUS_DRAFT_ID)
     {
       $label .= ' ('.$publicationStatus->status.')';

Modified: trunk/lib/QubitRad.class.php
==============================================================================
--- trunk/lib/QubitRad.class.php        Fri Sep 18 18:40:13 2009        (r3423)
+++ trunk/lib/QubitRad.class.php        Fri Sep 18 22:47:10 2009        (r3424)
@@ -57,7 +57,7 @@
       $label = truncate_text($label, $options['truncate']);
     }
 
-    $publicationStatus = $informationObject->getStatus(array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID));
+    $publicationStatus = $informationObject->getPublicationStatus();
     if ($publicationStatus->statusId == QubitTerm::PUBLICATION_STATUS_DRAFT_ID)
     {
       $label .= ' ('.$publicationStatus->status.')';

Modified: trunk/lib/model/QubitInformationObject.php
==============================================================================
--- trunk/lib/model/QubitInformationObject.php  Fri Sep 18 18:40:13 2009        
(r3423)
+++ trunk/lib/model/QubitInformationObject.php  Fri Sep 18 22:47:10 2009        
(r3424)
@@ -223,7 +223,7 @@
       $label = truncate_text($label, $options['truncate']);
     }
 
-    $publicationStatus = $this->getStatus(array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID));
+    $publicationStatus = $this->getPublicationStatus();
     if ($publicationStatus->statusId == QubitTerm::PUBLICATION_STATUS_DRAFT_ID)
     {
       $label .= ' ('.$publicationStatus->status.')';
@@ -1691,4 +1691,21 @@
 
     return QubitInformationObject::get($criteria, $options);
   }
+
+  /*****************************************************
+   Publication Status
+  *****************************************************/
+  public function getPublicationStatus()
+  {
+    // Ascend up object hierarchy until a publication status is found
+    // right up to the root object if necessary (which is set to 'draft' by 
default)
+    foreach ($this->ancestors->andSelf()->orderBy('rgt') as $ancestor)
+    {
+      $status = $ancestor->getStatus($options = array('typeId' => 
QubitTerm::STATUS_TYPE_PUBLICATION_ID));
+      if (null !== $status->statusId)
+      {
+        return $status;
+      }
+    }
+  }
 }

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