public function __construct() { parent::__construct('add_category'); $this->loadHttpVars(); if ($this->loginError) { return; } $category = new pdCategory(); if (isset($this->cat_id)) { if (!is_numeric($this->cat_id)) { $this->pageError = true; return; } $result = $category->dbLoad($this->db, $this->cat_id); if (!$result) { $this->pageError = true; return; } } if (isset($this->numNewFields)) { if (!is_numeric($this->numNewFields)) { $this->pageError = true; return; } } else { $this->numNewFields = 0; } if ($category->cat_id != '') { $label = 'Edit Category'; } else { $label = 'Add Category'; } $this->pageTitle = $label; $form = new HTML_QuickForm('catForm'); $form->addElement('header', null, $this->helpTooltip($label, 'addCategoryPageHelp', 'helpHeading')); $form->addElement('text', 'catname', 'Category Name:', array('size' => 50, 'maxlength' => 250)); $form->addRule('catname', 'category name cannot be empty', 'required', null, 'client'); // info list $label = 'Related Fields:'; $info_list = pdInfoList::create($this->db); foreach ($info_list as $info_id => $name) { $form->addElement('advcheckbox', 'info[' . $info_id . ']', $label, $name, null, array('', $name)); $label = ''; } for ($i = 0; $i < $this->numNewFields; $i++) { $form->addElement('text', 'new_fields[' . $i . ']', 'New field ' . ($i + 1) . ':', array('size' => 50, 'maxlength' => 250)); } $form->addElement('hidden', 'numNewFields', $this->numNewFields); $form->addGroup(array(HTML_QuickForm::createElement('reset', 'reset', 'Reset'), HTML_QuickForm::createElement('button', 'add_field', 'Add Related Field', array('onClick' => 'dataKeep(' . ($this->numNewFields + 1) . ');')), HTML_QuickForm::createElement('submit', 'submit', 'Submit New Category')), 'submit_group', null, ' '); if ($form->validate()) { $values = $form->exportValues(); $category->category = $values['catname']; if (isset($values['new_fields'])) { $values['info'] = array_merge($values['info'], $values['new_fields']); } foreach ($values['info'] as $infoname) { if ($infoname == '') { continue; } $obj = new stdClass(); $obj->name = $infoname; $category->info[] = $obj; } $category->dbSave($this->db); echo 'Category "', $category->category, '" succesfully added to the database.', '<p/>', '<a href="' . $_SERVER['PHP_SELF'] . '">', 'Add another new category</a>'; } else { foreach (array_keys(get_class_vars(get_class($this))) as $member) { $defaults[$member] = $this->{$member}; } $defaults['catname'] = $category->category; if (isset($category->info) && count($category->info) > 0) { foreach ($category->info as $info_id => $name) { $defaults['info[' . $info_id . ']'] = $name; } } $form->setDefaults($defaults); $renderer =& $form->defaultRenderer(); $form->accept($renderer); $this->form =& $form; $this->renderer =& $renderer; $this->javascript(); } }
public function dbSaveInfo($db) { if (!isset($this->info)) { return; } $info_list = pdInfoList::create($db); $arr = array(); foreach ($this->info as $info) { if (!in_array($info->name, $info_list)) { $db->insert('info', array('name' => $info->name), 'pdCategory::dbSaveInfo'); } $r = $db->selectRow('info', 'info_id', array('name' => $info->name), 'pdPublication::dbSaveInfo'); assert('($r !== false)'); array_push($arr, array('cat_id' => $this->cat_id, 'info_id' => $r->info_id)); $info->info_id = $r->info_id; } if (isset($this->cat_id)) { $db->delete('cat_info', array('cat_id' => $this->cat_id), 'pdUser::dbSave'); } if (count($arr) > 0) { $db->insert('cat_info', $arr, 'pdCategory::dbSaveInfo'); } }