/** * Parse category fields. * * @param CategoryModel $category * @param bool $empty * * @return array */ public function fields(CategoryModel $category, $empty = false) { // Always save id $fields = array('id' => array('label' => Craft::t('ID'), 'value' => $category->id), 'title' => array('label' => Craft::t('Title'), 'value' => (string) $category->getTitle()), 'group' => array('label' => Craft::t('Group'), 'value' => (string) $category->getGroup())); // Get element type $elementType = craft()->elements->getElementType(ElementType::Category); // Get nice attributes $availableAttributes = $elementType->defineAvailableTableAttributes(); // Make 'em fit $attributes = array(); foreach ($availableAttributes as $key => $result) { $attributes[$key] = $result['label']; } // Get static "fields" foreach ($category->getAttributes() as $handle => $value) { // Only show nice attributes if (array_key_exists($handle, $attributes)) { $fields[$handle] = array('label' => $attributes[$handle], 'value' => StringHelper::arrayToString(is_array($value) ? array_filter(ArrayHelper::flattenArray($value), 'strlen') : $value, ', ')); } } // Get fieldlayout foreach (craft()->fields->getLayoutByType(ElementType::Category)->getFields() as $field) { // Get field values $field = $field->getField(); $handle = $field->handle; $label = $field->name; $value = $empty ? '' : craft()->auditLog->parseFieldData($handle, $category->{$handle}); // Set on fields $fields[$handle] = array('label' => $label, 'value' => $value); } // Return return $fields; }
/** * Parse field values. * * @param string $handle * @param mixed $data * * @return string */ protected function parseFieldData($handle, $data) { // Do we have any data at all if (!is_null($data)) { // Get field info $field = craft()->fields->getFieldByHandle($handle); // If it's a field ofcourse if (!is_null($field)) { // For some fieldtypes the're special rules switch ($field->type) { case ExportModel::FieldTypeEntries: case ExportModel::FieldTypeCategories: case ExportModel::FieldTypeAssets: case ExportModel::FieldTypeUsers: // Show names $data = $data instanceof ElementCriteriaModel ? implode(', ', $data->find()) : $data; break; case ExportModel::FieldTypeLightswitch: // Make data human readable switch ($data) { case '0': $data = Craft::t('No'); break; case '1': $data = Craft::t('Yes'); break; } break; case ExportModel::FieldTypeTable: // Parse table checkboxes $table = array(); foreach ($data as $row) { // Keep track of column # $i = 1; // Loop through columns foreach ($row as $column => $value) { // Get column $column = isset($field->settings['columns'][$column]) ? $field->settings['columns'][$column] : (isset($field->settings['columns']['col' . $i]) ? $field->settings['columns']['col' . $i] : array('type' => 'dummy')); // Keep track of column # $i++; // Parse $table[] = $column['type'] == 'checkbox' ? $value == 1 ? Craft::t('Yes') : Craft::t('No') : $value; } } // Return parsed data as array $data = $table; break; case ExportModel::FieldTypeRichText: case ExportModel::FieldTypeDate: case ExportModel::FieldTypeRadioButtons: case ExportModel::FieldTypeDropdown: // Resolve to string $data = (string) $data; break; case ExportModel::FieldTypeCheckboxes: case ExportModel::FieldTypeMultiSelect: // Parse multi select values $multi = array(); foreach ($data as $row) { $multi[] = $row->value; } // Return parsed data as array $data = $multi; break; } } // Get other operations craft()->plugins->call('registerExportOperation', array(&$data, $handle)); } else { // Don't return null, return empty $data = ''; } // If it's an object or an array, make it a string if (is_array($data)) { $data = StringHelper::arrayToString(ArrayHelper::filterEmptyStringsFromArray(ArrayHelper::flattenArray($data)), ', '); } // If it's an object, make it a string if (is_object($data)) { $data = StringHelper::arrayToString(ArrayHelper::filterEmptyStringsFromArray(ArrayHelper::flattenArray(get_object_vars($data))), ', '); } return $data; }
protected function parseFieldData($field, $data) { if (!is_null($data)) { if (!is_null($field)) { switch ($field->type) { case ExportModel::FieldTypeEntries: case ExportModel::FieldTypeCategories: case ExportModel::FieldTypeAssets: case ExportModel::FieldTypeUsers: $data = $data instanceof ElementCriteriaModel ? implode(', ', $data->find()) : $data; break; case ExportModel::FieldTypeLightswitch: switch ($data) { case '0': $data = Craft::t('No'); break; case '1': $data = Craft::t('Yes'); break; } break; case ExportModel::FieldTypeTable: $table = array(); foreach ($data as $row) { $i = 1; foreach ($row as $column => $value) { $column = isset($field->settings['columns'][$column]) ? $field->settings['columns'][$column] : (isset($field->settings['columns']['col' . $i]) ? $field->settings['columns']['col' . $i] : array('type' => 'dummy')); $i++; $table[] = $column['type'] == 'checkbox' ? $value == 1 ? Craft::t('Yes') : Craft::t('No') : $value; } } $data = $table; break; case ExportModel::FieldTypeRichText: case ExportModel::FieldTypeDate: case ExportModel::FieldTypeRadioButtons: case ExportModel::FieldTypeDropdown: $data = (string) $data; break; case ExportModel::FieldTypeCheckboxes: case ExportModel::FieldTypeMultiSelect: $multi = array(); foreach ($data as $row) { $multi[] = $row->value; } $data = $multi; break; } } } else { $data = ''; } if (is_array($data)) { $data = StringHelper::arrayToString(ArrayHelper::filterEmptyStringsFromArray(ArrayHelper::flattenArray($data)), ', '); } if (is_object($data)) { $data = StringHelper::arrayToString(ArrayHelper::filterEmptyStringsFromArray(ArrayHelper::flattenArray(get_object_vars($data))), ', '); } return $data; }
/** * Check if an element has changed while saving. * * @param string $elementType * @param int $id * @param array $before * @param array $after * * @return array */ public function elementHasChanged($elementType, $id, $before, $after) { // Flatten arrays $flatBefore = ArrayHelper::flattenArray($before); $flatAfter = ArrayHelper::flattenArray($after); // Calculate the diffence $flatDiff = array_diff_assoc($flatAfter, $flatBefore); // Expand diff again $expanded = ArrayHelper::expandArray($flatDiff); // Add labels once again $diff = array(); foreach ($expanded as $key => $value) { $diff[$key]['label'] = isset($before[$key]) ? $before[$key]['label'] : ''; $diff[$key]['value'] = $value['value']; } // If there IS a difference if (count($diff)) { // Fire an "onElementChanged" event $event = new Event($this, array('elementType' => $elementType, 'id' => $id, 'diff' => $diff)); $this->onElementChanged($event); } return $diff; }
/** * Parse user fields. * * @param UserModel $user * @param bool $empty * * @return array */ public function fields(UserModel $user, $empty = false) { // Check if we are saving new groups $groupIds = craft()->request->getPost('groups', false); // If this is before saving, or no groups have changed if (!count($this->before) || !$groupIds) { // Get user's groups $groups = craft()->userGroups->getGroupsByUserId($user->id); } else { // This is after saving // Get posted groups $groups = array(); foreach ($groupIds as $id) { $groups[] = craft()->userGroups->getGroupById($id); } } // Always save id $fields = array('id' => array('label' => Craft::t('ID'), 'value' => $user->id), 'groups' => array('label' => Craft::t('Groups'), 'value' => implode(', ', $groups))); // Get element type $elementType = craft()->elements->getElementType(ElementType::User); // Get nice attributes $availableAttributes = $elementType->defineAvailableTableAttributes(); // Make 'em fit $attributes = array(); foreach ($availableAttributes as $key => $result) { $attributes[$key] = $result['label']; } // Get static "fields" foreach ($user->getAttributes() as $handle => $value) { // Only show nice attributes if (array_key_exists($handle, $attributes)) { $fields[$handle] = array('label' => $attributes[$handle], 'value' => StringHelper::arrayToString(is_array($value) ? array_filter(ArrayHelper::flattenArray($value), 'strlen') : $value, ', ')); } } // Get fieldlayout foreach (craft()->fields->getLayoutByType(ElementType::User)->getFields() as $field) { // Get field values $field = $field->getField(); $handle = $field->handle; $label = $field->name; $value = $empty ? '' : craft()->auditLog->parseFieldData($handle, $user->{$handle}); // Set on fields $fields[$handle] = array('label' => $label, 'value' => $value); } // Return return $fields; }
/** * Parse entry fields. * * @param EntryModel $entry * @param bool $empty * * @return array */ public function fields(EntryModel $entry, $empty = false) { // Always save id and title $fields = array('id' => array('label' => Craft::t('ID'), 'value' => $entry->id), 'title' => array('label' => Craft::t('Title'), 'value' => $entry->title), 'section' => array('label' => Craft::t('Section'), 'value' => $entry->section->name)); // Get element type $elementType = craft()->elements->getElementType(ElementType::Entry); // Get nice attributes $attributes = $elementType->defineTableAttributes(); // Get static "fields" foreach ($entry->getAttributes() as $handle => $value) { // Only show nice attributes if (array_key_exists($handle, $attributes)) { $fields[$handle] = array('label' => $attributes[$handle], 'value' => StringHelper::arrayToString(is_array($value) ? array_filter(ArrayHelper::flattenArray($value), 'strlen') : $value, ', ')); } } // Get fieldlayout $entrytype = $entry->getType(); $tabs = craft()->fields->getLayoutById($entrytype->fieldLayoutId)->getTabs(); foreach ($tabs as $tab) { foreach ($tab->getFields() as $field) { // Get field values $field = $field->getField(); $handle = $field->handle; $label = $field->name; $value = $empty ? '' : craft()->auditLog->parseFieldData($handle, $entry->{$handle}); // Set on fields $fields[$handle] = array('label' => $label, 'value' => $value); } } // Return return $fields; }