Esempio n. 1
0
 /**
  * Prepares an element's content for being saved to the database.
  *
  * @param BaseElementModel $element
  * @param FieldLayoutModel $fieldLayout
  * @param bool             $validate
  * @return ContentModel
  */
 public function prepElementContentForSave(BaseElementModel $element, FieldLayoutModel $fieldLayout, $validate = true)
 {
     $elementTypeClass = $element->getElementType();
     $elementType = craft()->elements->getElementType($elementTypeClass);
     $content = $element->getContent();
     if ($validate) {
         // Set the required fields from the layout
         $requiredFields = array();
         if ($elementType->hasTitles()) {
             $requiredFields[] = 'title';
         }
         foreach ($fieldLayout->getFields() as $field) {
             if ($field->required) {
                 $requiredFields[] = $field->fieldId;
             }
         }
         if ($requiredFields) {
             $content->setRequiredFields($requiredFields);
         }
     }
     // Give the fieldtypes a chance to clean up the post data
     foreach (craft()->fields->getAllFields() as $field) {
         $fieldType = craft()->fields->populateFieldType($field);
         if ($fieldType) {
             $fieldType->element = $element;
             $handle = $field->handle;
             $content->{$handle} = $fieldType->prepValueFromPost($content->{$handle});
         }
     }
     return $content;
 }
 private function _exportFieldLayout(FieldLayoutModel $fieldLayout)
 {
     if ($fieldLayout->getTabs()) {
         $tabDefs = array();
         foreach ($fieldLayout->getTabs() as $tab) {
             $tabDefs[$tab->name] = array();
             foreach ($tab->getFields() as $field) {
                 $tabDefs[$tab->name][$field->getField()->handle] = $field->required;
             }
         }
         return array('tabs' => $tabDefs);
     } else {
         $fieldDefs = array();
         foreach ($fieldLayout->getFields() as $field) {
             $fieldDefs[$field->getField()->handle] = $field->required;
         }
         return array('fields' => $fieldDefs);
     }
 }
 /**
  * @param FieldLayoutModel $fieldLayout
  * @return array
  */
 public function getFieldLayoutDefinition(FieldLayoutModel $fieldLayout)
 {
     if ($fieldLayout->getTabs()) {
         $tabDefinitions = array();
         foreach ($fieldLayout->getTabs() as $tab) {
             $tabDefinitions[$tab->name] = $this->getFieldLayoutFieldsDefinition($tab->getFields());
         }
         return array('tabs' => $tabDefinitions);
     }
     return array('fields' => $this->getFieldLayoutFieldsDefinition($fieldLayout->getFields()));
 }
Esempio n. 4
0
 /**
  * Saves a field layout.
  *
  * @param FieldLayoutModel $layout
  * @param bool $saveTabs Whether to save tab records.
  * @return bool
  */
 public function saveLayout(FieldLayoutModel $layout, $saveTabs = true)
 {
     // First save the layout
     $layoutRecord = new FieldLayoutRecord();
     $layoutRecord->type = $layout->type;
     $layoutRecord->save(false);
     $layout->id = $layoutRecord->id;
     if ($saveTabs) {
         foreach ($layout->getTabs() as $tab) {
             $tabRecord = new FieldLayoutTabRecord();
             $tabRecord->layoutId = $layout->id;
             $tabRecord->name = $tab->name;
             $tabRecord->sortOrder = $tab->sortOrder;
             $tabRecord->save(false);
             $tab->id = $tabRecord->id;
             foreach ($tab->getFields() as $field) {
                 $fieldRecord = new FieldLayoutFieldRecord();
                 $fieldRecord->layoutId = $layout->id;
                 $fieldRecord->tabId = $tab->id;
                 $fieldRecord->fieldId = $field->fieldId;
                 $fieldRecord->required = $field->required;
                 $fieldRecord->sortOrder = $field->sortOrder;
                 $fieldRecord->save(false);
                 $field->id = $fieldRecord->id;
             }
         }
     } else {
         foreach ($layout->getFields() as $field) {
             $fieldRecord = new FieldLayoutFieldRecord();
             $fieldRecord->layoutId = $layout->id;
             $fieldRecord->fieldId = $field->fieldId;
             $fieldRecord->required = $field->required;
             $fieldRecord->sortOrder = $field->sortOrder;
             $fieldRecord->save(false);
             $field->id = $fieldRecord->id;
         }
     }
     return true;
 }
Esempio n. 5
0
 /**
  * Updates the search indexes based on the new content values.
  *
  * @param BaseElementModel $element
  * @param ContentModel     $content
  * @param FieldLayoutModel $fieldLayout
  * @param array|null       &$nonTranslatableFields
  * @param array|null       &$otherContentModels
  *
  * @return null
  */
 private function _updateSearchIndexes(BaseElementModel $element, ContentModel $content, FieldLayoutModel $fieldLayout, &$nonTranslatableFields = null, &$otherContentModels = null)
 {
     $searchKeywordsByLocale = array();
     foreach ($fieldLayout->getFields() as $fieldLayoutField) {
         $field = $fieldLayoutField->getField();
         if ($field) {
             $fieldType = $field->getFieldType();
             if ($fieldType) {
                 $fieldType->element = $element;
                 $handle = $field->handle;
                 // Set the keywords for the content's locale
                 $fieldSearchKeywords = $fieldType->getSearchKeywords($element->getFieldValue($handle));
                 $searchKeywordsByLocale[$content->locale][$field->id] = $fieldSearchKeywords;
                 // Should we queue up the other locales' new keywords too?
                 if (isset($nonTranslatableFields[$field->id])) {
                     foreach ($otherContentModels as $otherContentModel) {
                         $searchKeywordsByLocale[$otherContentModel->locale][$field->id] = $fieldSearchKeywords;
                     }
                 }
             }
         }
     }
     foreach ($searchKeywordsByLocale as $localeId => $keywords) {
         craft()->search->indexElementFields($element->id, $localeId, $keywords);
     }
 }
 public function getCustomFieldsFromFieldLayout(FieldLayoutModel $fieldLayout)
 {
     $fields = array();
     $fieldLayoutFieldModels = $fieldLayout->getFields();
     foreach ($fieldLayoutFieldModels as $fieldLayoutFieldModel) {
         if (!in_array($fieldLayoutFieldModel->field->getFieldType()->name, $this->getUnsupportedFieldTypes())) {
             $fields[$fieldLayoutFieldModel->field->handle] = $fieldLayoutFieldModel->field;
         }
     }
     return $fields;
 }