コード例 #1
0
ファイル: item.php プロジェクト: bizanto/Hooked
 public function save($object)
 {
     if (!is_string($object->type) || empty($object->type)) {
         throw new ItemTableException('Invalid type id');
     }
     if ($object->name == '') {
         throw new ItemTableException('Invalid name');
     }
     if ($object->alias == '' || $object->alias != YString::sluggify($object->alias)) {
         throw new ItemTableException('Invalid slug');
     }
     if (ItemHelper::checkAliasExists($object->alias, $object->id)) {
         throw new ItemTableException('Alias already exists, please choose a unique alias');
     }
     // first save to get id
     if (empty($object->id)) {
         parent::save($object);
     }
     // init vars
     $db = $this->getDBO();
     $search_data = array();
     $element_data = array();
     foreach ($object->getElements() as $id => $element) {
         // get element data
         $element_data[] = $element->toXML();
         // get search data
         if ($data = $element->getSearchData()) {
             $search_data[] = "(" . $object->id . ", " . $db->quote($id) . ", " . $db->quote($data) . ")";
         }
     }
     // set element data
     $object->elements = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<elements>\n" . implode("\n", $element_data) . "\n</elements>";
     // delete old search data
     $query = "DELETE FROM " . ZOO_TABLE_SEARCH . " WHERE item_id = " . (int) $object->id;
     $db->query($query);
     // insert new search data
     if (count($search_data)) {
         $query = "INSERT INTO " . ZOO_TABLE_SEARCH . " VALUES " . implode(", ", $search_data);
         $db->query($query);
     }
     // save tags
     YTable::getInstance('tag')->save($object->id, $object->getTags());
     return parent::save($object);
 }
コード例 #2
0
ファイル: import.php プロジェクト: bizanto/Hooked
 public static function importCSV($file, $type = '', $contains_headers = false, $field_separator = ',', $field_enclosure = '"', $element_assignment = array())
 {
     // get application
     if ($application = Zoo::getApplication()) {
         if ($type_obj = $application->getType($type)) {
             $c = 0;
             $assignments = array();
             foreach ($element_assignment as $column => $value) {
                 if (!empty($value[$type])) {
                     $name = $value[$type];
                     $assignments[$name][] = $column;
                 }
             }
             if (!isset($assignments['_name'])) {
                 throw new ImportHelperException('No item name was assigned.');
             }
             if (($handle = fopen($file, "r")) !== FALSE) {
                 $item_table = YTable::getInstance('item');
                 $category_table = YTable::getInstance('category');
                 $user_id = JFactory::getUser()->get('id');
                 $now = JFactory::getDate();
                 $row = 0;
                 $app_categories = $application->getCategories();
                 $app_categories = array_map(create_function('$cat', 'return $cat->name;'), $app_categories);
                 $elements = $type_obj->getElements();
                 while (($data = fgetcsv($handle, 0, $field_separator, $field_enclosure)) !== FALSE) {
                     if (!($contains_headers && $row == 0)) {
                         $item = new Item();
                         $item->application_id = $application->id;
                         $item->type = $type;
                         // store created by
                         $item->created_by = $user_id;
                         // set created
                         $item->created = $now->toMySQL();
                         // store modified_by
                         $item->modified_by = $user_id;
                         // set modified
                         $item->modified = $now->toMySQL();
                         // store element_data and item name
                         $item_categories = array();
                         foreach ($assignments as $assignment => $columns) {
                             $column = current($columns);
                             switch ($assignment) {
                                 case '_name':
                                     $item->name = $data[$column];
                                     break;
                                 case '_created_by_alias':
                                     $item->created_by_alias = $data[$column];
                                     break;
                                 case '_created':
                                     if (!empty($data[$column])) {
                                         $item->created = $data[$column];
                                     }
                                     break;
                                 default:
                                     if (substr($assignment, 0, 9) == '_category') {
                                         foreach ($columns as $column) {
                                             $item_categories[] = $data[$column];
                                         }
                                     } else {
                                         if (isset($elements[$assignment])) {
                                             $elements[$assignment]->unsetData();
                                             switch ($elements[$assignment]->getElementType()) {
                                                 case 'text':
                                                 case 'textarea':
                                                 case 'link':
                                                 case 'email':
                                                 case 'date':
                                                     $element_data = array();
                                                     foreach ($columns as $column) {
                                                         if (!empty($data[$column])) {
                                                             $element_data[$column] = array('value' => $data[$column]);
                                                         }
                                                     }
                                                     $elements[$assignment]->bindData($element_data);
                                                     break;
                                                 case 'gallery':
                                                     $data[$column] = trim($data[$column], '/\\');
                                                     $elements[$assignment]->bindData(array('value' => $data[$column]));
                                                     break;
                                                 case 'image':
                                                 case 'download':
                                                     $elements[$assignment]->bindData(array('file' => $data[$column]));
                                                     break;
                                                 case 'googlemaps':
                                                     $elements[$assignment]->bindData(array('location' => $data[$column]));
                                                     break;
                                             }
                                         }
                                     }
                                     break;
                             }
                         }
                         $elements_string = '<?xml version="1.0" encoding="UTF-8"?><elements>';
                         foreach ($elements as $element) {
                             $elements_string .= $element->toXML();
                         }
                         $elements_string .= '</elements>';
                         $item->elements = $elements_string;
                         $item->alias = YString::sluggify($item->name);
                         if (empty($item->alias)) {
                             $item->alias = '42';
                         }
                         // set a valid category alias
                         while (ItemHelper::checkAliasExists($item->alias)) {
                             $item->alias .= '-2';
                         }
                         if (!empty($item->name)) {
                             try {
                                 $item_table->save($item);
                                 $item_id = $item->id;
                                 $item->unsetElementData();
                                 // store categories
                                 foreach ($item_categories as $category_name) {
                                     if (!in_array($category_name, $app_categories)) {
                                         $category = new Category();
                                         $category->application_id = $application->id;
                                         $category->name = $category_name;
                                         $category->parent = 0;
                                         $category->alias = YString::sluggify($category_name);
                                         // set a valid category alias
                                         while (CategoryHelper::checkAliasExists($category->alias)) {
                                             $category->alias .= '-2';
                                         }
                                         try {
                                             $category_table->save($category);
                                             $related_categories[$category->id] = $category->name;
                                             $app_categories[$category->id] = $category->name;
                                         } catch (CategoryTableException $e) {
                                         }
                                     } else {
                                         $related_categories = array_filter($app_categories, create_function('$cat', 'return $cat=="' . $category_name . '";'));
                                     }
                                     // add category to item relations
                                     if (!empty($related_categories)) {
                                         CategoryHelper::saveCategoryItemRelations($item_id, array_keys($related_categories));
                                     }
                                 }
                             } catch (ItemTableException $e) {
                             }
                         }
                     }
                     $row++;
                 }
                 fclose($handle);
                 return true;
             } else {
                 throw new ImportHelperException('Could not open csv file.');
             }
         } else {
             throw new ImportHelperException('Could not find type.');
         }
     }
     throw new ImportHelperException('No application to import too.');
 }