コード例 #1
0
 /**
  * Update all field values for a given $fieldId to match $fieldValues[]
  *
  * @param  int    $fieldId      Id of field
  * @param  array  $fieldValues  New or existing values: ordered array( array( 'fieldtitle' => 'Title of field', 'fieldlabel' => 'Label of field' ) )
  * @return boolean              Result
  */
 public function updateFieldValues($fieldId, array $fieldValues)
 {
     $existingFieldValues = $this->getFieldValuesOfField($fieldId);
     if ($fieldValues) {
         // Remove deleted field values:
         foreach ($existingFieldValues as $i => $existingFieldValue) {
             $i = (int) $i;
             $exists = false;
             foreach ($fieldValues as $fieldValue) {
                 $fieldValue = (array) $fieldValue;
                 $id = (int) cbGetParam($fieldValue, 'fieldvalueid');
                 //TODO: Use new Input class
                 $title = trim(stripslashes(cbGetParam($fieldValue, 'fieldtitle')));
                 if ($id && $i == $id && $title != '') {
                     $exists = true;
                     break;
                 }
             }
             if (!$exists) {
                 if (!$this->delete($i)) {
                     return false;
                 }
                 unset($existingFieldValues[$i]);
             }
         }
         // Insert new field values or update existing:
         foreach ($fieldValues as $i => $fieldValue) {
             $fieldValue = (array) $fieldValue;
             $id = (int) cbGetParam($fieldValue, 'fieldvalueid');
             //TODO: Use new Input class
             $title = trim(stripslashes(cbGetParam($fieldValue, 'fieldtitle')));
             $label = trim(stripslashes(cbGetParam($fieldValue, 'fieldlabel')));
             if ($title != '') {
                 if (isset($existingFieldValues[$id])) {
                     $newFieldValue = $existingFieldValues[$id];
                     if ((int) $newFieldValue->get('fieldid') == (int) $fieldId && $newFieldValue->get('fieldtitle') == $title && $newFieldValue->get('fieldlabel') == $label && (int) $newFieldValue->get('ordering') == (int) ($i + 1)) {
                         continue;
                     }
                 } else {
                     $newFieldValue = new FieldValueTable($this->_db);
                 }
                 $newFieldValue->set('fieldid', (int) $fieldId);
                 $newFieldValue->set('fieldtitle', $title);
                 $newFieldValue->set('fieldlabel', $label);
                 $newFieldValue->set('ordering', (int) ($i + 1));
                 if (!$newFieldValue->store()) {
                     return false;
                 }
             }
         }
         $this->updateOrder($this->_db->NameQuote('fieldid') . " = " . (int) $fieldId);
     } else {
         // Delete all current field values:
         $query = 'DELETE' . "\n FROM " . $this->_db->NameQuote($this->_tbl) . "\n WHERE " . $this->_db->NameQuote('fieldid') . " = " . (int) $fieldId;
         $this->_db->setQuery($query);
         if (!$this->_db->query()) {
             return false;
         }
     }
     return true;
 }