/** * Exports items of a type to a csv file * * @param Type $type The type object * * @return string File path, false if no items were found * * @since 2.0 */ public function toCSV($type) { $item_table = $this->app->table->item; $type->getApplication()->getCategoryTree(); $data = array(); $i = 1; $maxima = array(); foreach ($item_table->getByType($type->id, $type->getApplication()->id) as $item) { // item properties $data[$i]['Id'] = $item->id; $data[$i]['Name'] = $item->name; $data[$i]['Alias'] = $item->alias; $data[$i]['Author Alias'] = $item->getAuthor(); $data[$i]['Created Date'] = $item->created; // categories $data[$i]['Category'] = array(); foreach ($item->getRelatedCategories() as $category) { $name = $category->name . '|||' . $category->alias; while (($category = $category->getParent()) && $category->id) { $name = $category->name . '|||' . $category->alias . "///{$name}"; } $data[$i]['Category'][] = $name; } // tags $data[$i]['Tag'] = $item->getTags(); // elements foreach ($type->getElements() as $identifier => $element) { if (!isset($item->elements[$identifier])) { continue; } $name = $element->config->get('name') ? $element->config->get('name') : $element->getElementType(); switch ($element->getElementType()) { case 'text': case 'textarea': case 'link': case 'email': case 'date': $data[$i][$name] = array(); foreach ($item->elements[$identifier] as $self) { $data[$i][$name][] = @$self['value']; } break; case 'select': case 'radio': case 'checkbox': $data[$i][$name] = isset($item->elements[$identifier]['option']) ? $item->elements[$identifier]['option'] : array(); break; case 'country': $data[$i][$name] = isset($item->elements[$identifier]['country']) ? $item->elements[$identifier]['country'] : array(); break; case 'gallery': $data[$i][$name] = @$item->elements[$identifier]['value']; break; case 'image': case 'download': $data[$i][$name] = @$item->elements[$identifier]['file']; break; case 'googlemaps': $data[$i][$name] = @$item->elements[$identifier]['location']; break; } } foreach ($data[$i] as $key => $value) { if (is_array($value)) { $maxima[$key] = max(1, @$maxima[$key], count($value)); } } $item_table->unsetObject($item->id); $i++; } if (empty($data)) { return false; } // use maxima to pad arrays foreach ($maxima as $key => $num) { foreach (array_keys($data) as $i) { $data[$i][$key] = array_pad($data[$i][$key], $num, ''); } } // set header array_unshift($data, array()); foreach ($data[1] as $key => $value) { $num = is_array($value) ? count($value) : 1; $data[0] = array_merge($data[0], array_fill(0, max(1, $num), $key)); } $file = rtrim($this->app->system->config->get('tmp_path'), '\\/') . "/{$type->id}.csv"; if (($handle = fopen($file, "w")) !== false) { foreach ($data as $row) { fputcsv($handle, $this->app->data->create($row)->flattenRecursive()); } fclose($handle); } else { throw new AppExporterException(sprintf('Unable to write to file %s.', $file)); } return $file; }
/** * Get price elements from type * @param Type $type * @return array */ public function getTypePrices(Type $type) { return array_filter($type->getElements(), create_function('$element', 'return $element instanceof ElementJBPrice;')); }
public static function saveElements($post, Type $type) { // init vars $elements = array(); // update old elements foreach ($type->getElements() as $identifier => $element) { if (isset($post['elements'][$identifier])) { $data = $post['elements'][$identifier]; // bind data $element->bindConfig($data); // add to element array $elements[$data['ordering']] = $element; } } // add new elements if (isset($post['new_elements'])) { foreach ($post['new_elements'] as $data) { $element = ElementHelper::loadElement($data['type'], $type->getApplication()->getPath() . '/elements'); $element->setType($type); // set identifier (UUID) $data['identifier'] = YUtility::generateUUID(); // bind data $element->bindConfig($data); // add to element array $elements[$data['ordering']] = $element; } } // sort elements ksort($elements); $type->setXML(self::toXML($elements)); $type->clearElements(); return true; }