/**
  * Checks whether the given field is saving data into a textual column, and saves it accordingly.
  *
  * @param FieldModel $field
  * @param string     $fieldColumnPrefix
  *
  * @return bool
  */
 private function _checkField(FieldModel $field, $fieldColumnPrefix)
 {
     if ($field->type == 'Matrix') {
         $this->_matrixFieldIds[] = $field->id;
     } else {
         $fieldType = $field->getFieldType();
         if ($fieldType) {
             $attributeConfig = $fieldType->defineContentAttribute();
             if ($attributeConfig && $attributeConfig != AttributeType::Number) {
                 $attributeConfig = ModelHelper::normalizeAttributeConfig($attributeConfig);
                 if ($attributeConfig['type'] == AttributeType::String) {
                     $this->_textColumns[] = $fieldColumnPrefix . $field->handle;
                 }
             }
         }
     }
 }
示例#2
0
 /**
  * Populates a fieldtype.
  *
  * @param FieldModel            $field
  * @param BaseElementModel|null $element
  *
  * @return BaseFieldType|null
  */
 public function populateFieldType(FieldModel $field, $element = null)
 {
     $fieldType = $field->getFieldType();
     if ($fieldType) {
         $fieldType->element = $element;
         return new FieldTypeVariable($fieldType);
     }
 }
 /**
  * Upload files for an Asset field.
  *
  * @param FieldModel              $field
  * @param AmForms_SubmissionModel &$submission
  * @param array                   $fieldsContent
  */
 private function _uploadFilesForField($field, &$submission, $fieldsContent)
 {
     $uploadedFiles = array();
     // Get folder
     $folderId = $field->getFieldType()->resolveSourcePath();
     // Single file upload
     if (!empty($_FILES[$field->handle]['name'])) {
         // Upload file
         $file = $_FILES[$field->handle];
         $fileId = $this->_uploadFile($file, $folderId);
         if (is_numeric($fileId)) {
             $uploadedFiles[] = $fileId;
         }
     }
     // Multi file upload
     if (isset($fieldsContent['filesNames']) && isset($fieldsContent['filesNames'][$field->handle])) {
         foreach ($fieldsContent['filesNames'][$field->handle] as $fileName) {
             foreach ($_FILES as $key => $possibleFile) {
                 if (isset($possibleFile['name']) && $possibleFile['name'] == $fileName) {
                     // Upload file
                     $fileId = $this->_uploadFile($possibleFile, $folderId);
                     if (is_numeric($fileId)) {
                         $uploadedFiles[] = $fileId;
                         // Remove from $_FILES so we can't find again if we have more than one multiple file upload field
                         unset($_FILES[$key]);
                     }
                 }
             }
         }
     }
     // Add files to submission
     $submission->getContent()->setAttribute($field->handle, $uploadedFiles);
 }
 /**
  * @param array $fieldDefinition
  * @param FieldModel $field
  * @param string $fieldHandle
  * @param FieldGroupModel $group
  */
 private function populateField(array $fieldDefinition, FieldModel $field, $fieldHandle, FieldGroupModel $group = null)
 {
     $field->name = $fieldDefinition['name'];
     $field->handle = $fieldHandle;
     $field->required = $fieldDefinition['required'];
     $field->translatable = $fieldDefinition['translatable'];
     $field->instructions = $fieldDefinition['instructions'];
     $field->type = $fieldDefinition['type'];
     $field->settings = $fieldDefinition['settings'];
     if ($group) {
         $field->groupId = $group->id;
     }
     if ($field->type == 'Entries') {
         $settings = $fieldDefinition['settings'];
         $settings['sources'] = $this->getSourceIds($settings['sources']);
         $field->settings = $settings;
     }
     if ($field->type == 'Matrix') {
         $field->settings = $field->getFieldType()->getSettings();
         $field->settings->setAttributes($fieldDefinition['settings']);
         $field->settings->setBlockTypes($this->getBlockTypes($fieldDefinition, $field));
     }
 }
 /**
  * Deletes a field.
  *
  * @param FieldModel $field
  *
  * @throws \Exception
  * @return bool
  */
 public function deleteField(FieldModel $field)
 {
     $transaction = craft()->db->getCurrentTransaction() === null ? craft()->db->beginTransaction() : null;
     try {
         $fieldType = $field->getFieldType();
         if ($fieldType) {
             $field->getFieldType()->onBeforeDelete();
         }
         // De we need to delete the content column?
         $contentTable = craft()->content->contentTable;
         $fieldColumnPrefix = craft()->content->fieldColumnPrefix;
         if (craft()->db->columnExists($contentTable, $fieldColumnPrefix . $field->handle)) {
             craft()->db->createCommand()->dropColumn($contentTable, $fieldColumnPrefix . $field->handle);
         }
         // Delete the row in fields
         $affectedRows = craft()->db->createCommand()->delete('fields', array('id' => $field->id));
         if ($affectedRows) {
             if ($fieldType) {
                 $field->getFieldType()->onAfterDelete();
             }
         }
         if ($transaction !== null) {
             $transaction->commit();
         }
         return (bool) $affectedRows;
     } catch (\Exception $e) {
         if ($transaction !== null) {
             $transaction->rollback();
         }
         throw $e;
     }
 }
 /**
  * @param string     $data
  * @param FieldModel $field
  *
  * @return array
  */
 private function prepEntriesFieldType($data, FieldModel $field)
 {
     // Get field settings
     $settings = $field->getFieldType()->getSettings();
     // Get source id's for connecting
     $sectionIds = array();
     $sources = $settings->getAttribute('sources');
     if (is_array($sources)) {
         foreach ($sources as $source) {
             list($type, $id) = explode(':', $source);
             $sectionIds[] = $id;
         }
     }
     // Find matching element in sections
     $criteria = craft()->elements->getCriteria(ElementType::Entry);
     $criteria->sectionId = $sectionIds;
     $criteria->limit = $settings->limit;
     // Get search strings
     $search = ArrayHelper::stringToArray($data);
     // Ability to import multiple Assets at once
     $data = array();
     // Loop through keywords
     foreach ($search as $query) {
         // Search
         $criteria->search = $query;
         // Add to data
         $data = array_merge($data, $criteria->ids());
     }
     return $data;
 }