Current File : /home/escuelai/public_html/dopp/include/class.category.php |
<?php
/*********************************************************************
class.category.php
Backend support for article categories.
Copyright (c) 2006-2013 osTicket
http://www.osticket.com
Released under the GNU General Public License WITHOUT ANY WARRANTY.
See LICENSE.TXT for details.
vim: expandtab sw=4 ts=4 sts=4:
**********************************************************************/
class Category {
var $id;
var $ht;
function Category($id) {
$this->id=0;
$this->load($id);
}
function load($id) {
$sql=' SELECT cat.*,count(faq.faq_id) as faqs '
.' FROM '.FAQ_CATEGORY_TABLE.' cat '
.' LEFT JOIN '.FAQ_TABLE.' faq ON(faq.category_id=cat.category_id) '
.' WHERE cat.category_id='.db_input($id)
.' GROUP BY cat.category_id';
if (!($res=db_query($sql)) || !db_num_rows($res))
return false;
$this->ht = db_fetch_array($res);
$this->id = $this->ht['category_id'];
return true;
}
function reload() {
return $this->load($this->getId());
}
/* ------------------> Getter methods <--------------------- */
function getId() { return $this->id; }
function getName() { return $this->ht['name']; }
function getNumFAQs() { return $this->ht['faqs']; }
function getDescription() { return $this->ht['description']; }
function getNotes() { return $this->ht['notes']; }
function getCreateDate() { return $this->ht['created']; }
function getUpdateDate() { return $this->ht['updated']; }
function isPublic() { return ($this->ht['ispublic']); }
function getHashtable() { return $this->ht; }
/* ------------------> Setter methods <--------------------- */
function setName($name) { $this->ht['name']=$name; }
function setNotes($notes) { $this->ht['notes']=$notes; }
function setDescription($desc) { $this->ht['description']=$desc; }
/* --------------> Database access methods <---------------- */
function update($vars, &$errors) {
if(!$this->save($this->getId(), $vars, $errors))
return false;
//TODO: move FAQs if requested.
$this->reload();
return true;
}
function delete() {
$sql='DELETE FROM '.FAQ_CATEGORY_TABLE
.' WHERE category_id='.db_input($this->getId())
.' LIMIT 1';
if(db_query($sql) && ($num=db_affected_rows())) {
db_query('DELETE FROM '.FAQ_TABLE
.' WHERE category_id='.db_input($this->getId()));
}
return $num;
}
/* ------------------> Static methods <--------------------- */
function lookup($id) {
return ($id && is_numeric($id) && ($c = new Category($id)))?$c:null;
}
function findIdByName($name) {
$sql='SELECT category_id FROM '.FAQ_CATEGORY_TABLE.' WHERE name='.db_input($name);
list($id) = db_fetch_row(db_query($sql));
return $id;
}
function findByName($name) {
if(($id=self::findIdByName($name)))
return new Category($id);
return false;
}
function validate($vars, &$errors) {
return self::save(0, $vars, $errors,true);
}
function create($vars, &$errors) {
return self::save(0, $vars, $errors);
}
function save($id, $vars, &$errors, $validation=false) {
//Cleanup.
$vars['name']=Format::striptags(trim($vars['name']));
//validate
if($id && $id!=$vars['id'])
$errors['err']=__('Internal error occurred');
if(!$vars['name'])
$errors['name']=__('Category name is required');
elseif(strlen($vars['name'])<3)
$errors['name']=__('Name is too short. 3 chars minimum');
elseif(($cid=self::findIdByName($vars['name'])) && $cid!=$id)
$errors['name']=__('Category already exists');
if(!$vars['description'])
$errors['description']=__('Category description is required');
if($errors) return false;
/* validation only */
if($validation) return true;
//save
$sql=' updated=NOW() '.
',ispublic='.db_input(isset($vars['ispublic'])?$vars['ispublic']:0).
',name='.db_input($vars['name']).
',description='.db_input(Format::sanitize($vars['description'])).
',notes='.db_input(Format::sanitize($vars['notes']));
if($id) {
$sql='UPDATE '.FAQ_CATEGORY_TABLE.' SET '.$sql.' WHERE category_id='.db_input($id);
if(db_query($sql))
return true;
$errors['err']=sprintf(__('Unable to update %s.'), __('this FAQ category'));
} else {
$sql='INSERT INTO '.FAQ_CATEGORY_TABLE.' SET '.$sql.',created=NOW()';
if(db_query($sql) && ($id=db_insert_id()))
return $id;
$errors['err']=sprintf(__('Unable to create %s.'), __('this FAQ category'))
.' '.__('Internal error occurred');
}
return false;
}
}
?>