Author: peter
Date: Tue Sep 15 22:21:06 2009
New Revision: 3333

Log:
add ability to set publicationStatus on information object templates. Defaults 
to 'draft'. Is accompanied by a div style in form.css but pre-commit hook has 
an invalid 'additional whitespace found at end of file' error, so need to 
commit css later

Modified:
   trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
   trunk/apps/qubit/modules/informationobject/actions/editDcAction.class.php
   trunk/apps/qubit/modules/informationobject/actions/editIsadAction.class.php
   trunk/apps/qubit/modules/informationobject/actions/editModsAction.class.php
   trunk/apps/qubit/modules/informationobject/actions/editRadAction.class.php
   trunk/apps/qubit/modules/informationobject/templates/editDcSuccess.php
   trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php
   trunk/apps/qubit/modules/informationobject/templates/editModsSuccess.php
   trunk/apps/qubit/modules/informationobject/templates/editRadSuccess.php
   trunk/lib/model/QubitObject.php
   trunk/lib/model/QubitStatus.php

Modified: 
trunk/apps/qubit/modules/informationobject/actions/editAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/actions/editAction.class.php     
Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/apps/qubit/modules/informationobject/actions/editAction.class.php     
Tue Sep 15 22:21:06 2009        (r3333)
@@ -62,6 +62,29 @@
 
         break;
 
+      case 'publicationStatus':
+
+        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)));
+        }
+        $this->form->setValidator('publicationStatus', new sfValidatorString);
+
+        $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)));
+
+        break;
+
       case 'language':
       case 'languageOfDescription':
         $this->form->setDefault($name, $this->informationObject[$name]);
@@ -233,6 +256,7 @@
     $this->updateObjectTermRelations();
     $this->updateNotes();
     $this->updateEvents();
+    $this->updateStatus();
 
     // save informationObject after setting all of its attributes...
     $this->informationObject->save();
@@ -493,4 +517,12 @@
       }
     }
   }
+
+  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']));
+  }
+
 }

Modified: 
trunk/apps/qubit/modules/informationobject/actions/editDcAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/actions/editDcAction.class.php   
Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/apps/qubit/modules/informationobject/actions/editDcAction.class.php   
Tue Sep 15 22:21:06 2009        (r3333)
@@ -39,7 +39,8 @@
       'relation',
       'scopeAndContent',
       'title',
-      'types');
+      'types',
+      'publicationStatus');
 
   protected function addField($name)
   {

Modified: 
trunk/apps/qubit/modules/informationobject/actions/editIsadAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/actions/editIsadAction.class.php 
Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/apps/qubit/modules/informationobject/actions/editIsadAction.class.php 
Tue Sep 15 22:21:06 2009        (r3333)
@@ -59,6 +59,7 @@
       'script',
       'sources',
       'descriptionStatus',
+      'publicationStatus',
       'title');
 
   protected function addField($name)

Modified: 
trunk/apps/qubit/modules/informationobject/actions/editModsAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/actions/editModsAction.class.php 
Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/apps/qubit/modules/informationobject/actions/editModsAction.class.php 
Tue Sep 15 22:21:06 2009        (r3333)
@@ -35,7 +35,8 @@
       'identifier',
       'language',
       'title',
-      'types');
+      'types',
+      'publicationStatus');
 
   protected function addField($name)
   {

Modified: 
trunk/apps/qubit/modules/informationobject/actions/editRadAction.class.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/actions/editRadAction.class.php  
Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/apps/qubit/modules/informationobject/actions/editRadAction.class.php  
Tue Sep 15 22:21:06 2009        (r3333)
@@ -75,7 +75,8 @@
       'title',
       'titleStatementOfResponsibility',
       'titleProperOfPublishersSeries',
-      'types');
+      'types',
+      'publicationStatus');
 
   protected function addField($name)
   {

Modified: trunk/apps/qubit/modules/informationobject/templates/editDcSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/templates/editDcSuccess.php      
Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/apps/qubit/modules/informationobject/templates/editDcSuccess.php      
Tue Sep 15 22:21:06 2009        (r3333)
@@ -134,6 +134,10 @@
 
     <?php echo render_field($form->accessConditions->label(__('Rights')), 
$informationObject, array('class' => 'resizable')) ?>
 
+  <div class="admin-info">
+  <?php echo $form->publicationStatus->label(__('Publication 
Status'))->renderRow() ?>
+  </div>
+
   <?php if ($sf_context->getActionName() == 'create'): ?>
   <!--set initial form focus -->
   <?php echo javascript_tag(<<<EOF

Modified: 
trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php    
Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/apps/qubit/modules/informationobject/templates/editIsadSuccess.php    
Tue Sep 15 22:21:06 2009        (r3333)
@@ -360,6 +360,10 @@
 
   </fieldset>
 
+  <div class="admin-info">
+  <?php echo $form->publicationStatus->label(__('Publication 
Status'))->renderRow() ?>
+  </div>
+
   <?php if ($sf_context->getActionName() == 'create'): ?>
   <!--set initial form focus -->
   <?php echo javascript_tag(<<<EOF

Modified: 
trunk/apps/qubit/modules/informationobject/templates/editModsSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/templates/editModsSuccess.php    
Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/apps/qubit/modules/informationobject/templates/editModsSuccess.php    
Tue Sep 15 22:21:06 2009        (r3333)
@@ -100,6 +100,10 @@
 
     <?php echo render_field($form->accessConditions, $informationObject, 
array('class' => 'resizable')) ?>
 
+  <div class="admin-info">
+  <?php echo $form->publicationStatus->label(__('Publication 
Status'))->renderRow() ?>
+  </div>
+
   <?php if ($sf_context->getActionName() == 'create'): ?>
   <!--set initial form focus -->
   <?php echo javascript_tag(<<<EOF

Modified: 
trunk/apps/qubit/modules/informationobject/templates/editRadSuccess.php
==============================================================================
--- trunk/apps/qubit/modules/informationobject/templates/editRadSuccess.php     
Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/apps/qubit/modules/informationobject/templates/editRadSuccess.php     
Tue Sep 15 22:21:06 2009        (r3333)
@@ -358,6 +358,10 @@
   </fieldset>
   <!-- End Control Area -->
 
+  <div class="admin-info">
+  <?php echo $form->publicationStatus->label(__('Publication 
Status'))->renderRow() ?>
+  </div>
+
   <?php if ($sf_context->getActionName() == 'create'): ?>
   <!--set initial form focus -->
   <?php echo javascript_tag(<<<EOF

Modified: trunk/lib/model/QubitObject.php
==============================================================================
--- trunk/lib/model/QubitObject.php     Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/lib/model/QubitObject.php     Tue Sep 15 22:21:06 2009        (r3333)
@@ -66,5 +66,40 @@
         $relation->save();
       }
     }
+
+    // Save updated Status
+    if (0 < count($this->statuss->transient))
+    {
+      foreach ($this->statuss->transient as $status)
+      {
+        $status->setIndexOnSave(false);
+        $status->setObject($this);
+        $status->save();
+      }
+    }
+  }
+
+  public function setStatus($options = array())
+  {
+    $status = $this->getStatus(array('typeId' => $options['typeId']));
+    // only create a new status object if type is not already set
+    if ($status === null)
+    {
+      $status = new QubitStatus;
+      $status->setTypeId($options['typeId']);
+    }
+    $status->setStatusId($options['statusId']);
+    $this->statuss[] = $status;
+
+    return $this;
+  }
+
+  public function getStatus($options = array())
+  {
+    $criteria = new Criteria;
+    $criteria->add(QubitStatus::OBJECT_ID, $this->getId());
+    $criteria->add(QubitStatus::TYPE_ID, $options['typeId']);
+
+    return QubitStatus::getOne($criteria);
   }
 }

Modified: trunk/lib/model/QubitStatus.php
==============================================================================
--- trunk/lib/model/QubitStatus.php     Tue Sep 15 18:45:09 2009        (r3332)
+++ trunk/lib/model/QubitStatus.php     Tue Sep 15 22:21:06 2009        (r3333)
@@ -19,4 +19,69 @@
 
 class QubitStatus extends BaseStatus
 {
+  // Flag for updating search index on save of Status
+  protected $indexOnSave = true;
+
+  public function save($connection = null)
+  {
+    // TODO: $cleanObject = $this->object->clean;
+    $cleanObjectId = $this->__get('objectId', array('clean' => true));
+
+    parent::save($connection);
+
+    if ($this->indexOnSave())
+    {
+      if ($this->objectId != $cleanObjectId && null !== 
QubitInformationObject::getById($cleanObjectId))
+      {
+        
SearchIndex::updateTranslatedLanguages(QubitInformationObject::getById($cleanObjectId));
+      }
+
+      if ($this->object instanceof QubitInformationObject)
+      {
+        SearchIndex::updateTranslatedLanguages($this->object);
+      }
+    }
+
+    return $this;
+  }
+
+  /**
+   * Flag whether to update the search index when saving this object
+   *
+   * @param boolean $bool flag value
+   * @return QubitInformationObject self-reference
+   */
+  public function setIndexOnSave($bool)
+  {
+    if ($bool)
+    {
+      $this->indexOnSave = true;
+    }
+    else
+    {
+      $this->indexOnSave = false;
+    }
+
+    return $this;
+  }
+
+  /**
+   * Update search index on save?
+   *
+   * @return boolean current flag
+   */
+  public function indexOnSave()
+  {
+    return $this->indexOnSave;
+  }
+
+  public function delete($connection = null)
+  {
+    parent::delete($connection);
+
+    if ($this->getObject() instanceof QubitInformationObject)
+    {
+      SearchIndex::updateTranslatedLanguages($this->getObject());
+    }
+  }
 }

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