/** * 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; } } } } }
/** * 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; }