Example #1
0
 /**
  * Updates the range matching the given identifier id and decreases its
  * next pointer by one. Also free and taken properties are updated 
  * accordingly.
  * @param integer $rangeId id of the range to be updated
  * @return boolean true if and only if the operation succeeds; otherwise
  * false
  */
 public function decreaseByOne($rangeId)
 {
     // Get db access
     $table = $this->getTable();
     // Get ISBN range object
     $range = $table->getRange($rangeId, false);
     // Check that we have a result
     if ($range != null) {
         // Update free
         $range->free += 1;
         // Update taken
         $range->taken -= 1;
         // Check if closed
         if ($range->is_closed) {
             // Update is_closed and is_active
             $range->is_closed = false;
             $range->is_active = true;
             // Range reopened, range end becomes next pointer
             $range->next = $range->range_end;
         } else {
             // Decrease next pointer
             $range->next = substr($range->next, 0, 3) - 1;
             // Next pointer is a string, add left padding
             $range->next = str_pad($range->next, 3, "0", STR_PAD_LEFT);
             // Add ISSN range helper file
             require_once JPATH_COMPONENT . '/helpers/issnrange.php';
             // Get next pointer check digit
             $rangeNextCheckDigit = IssnrangeHelper::countIssnCheckDigit($range->block . $range->next);
             // Set next pointer check digit
             $range->next .= $rangeNextCheckDigit;
             // Validate next pointer
             if (!IssnrangeHelper::validateIssn($range->block . $range->next)) {
                 $this->setError(JText::_('COM_ISSNREGISTRY_ERROR_ISSN_RANGE_UPDATE_INVALID_NEXT_POINTER'));
                 return false;
             }
         }
         // Update to db
         if ($table->updateDecrease($range)) {
             return true;
         }
     }
     return false;
 }