1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 
<?php
defined("ICMS_ROOT_PATH") or die("ImpressCMS root path not defined");
class icms_ipf_category_Handler extends icms_ipf_Handler {
    
    public $allCategoriesObj = false;
    
    private $_allCategoriesId = false;
    
    public function __construct($db, $modulename) {
        parent::__construct($db, 'category', 'categoryid', 'name', 'description', $modulename);
    }
    
    public function getAllCategoriesArray($parentid=0, $perm_name=false, $sort = 'parentid', $order='ASC') {
        if (!$this->allCategoriesObj) {
            $criteria = new icms_db_criteria_Compo();
            $criteria->setSort($sort);
            $criteria->setOrder($order);
            $userIsAdmin = is_object(icms::$user) && icms::$user->isAdmin();
            if ($perm_name && !$userIsAdmin) {
                if (!$this->setGrantedObjectsCriteria($criteria, $perm_name)) {
                    return false;
                }
            }
            $this->allCategoriesObj =& $this->getObjects($criteria, 'parentid');
        }
        $ret = array();
        if (isset($this->allCategoriesObj[$parentid])) {
            foreach ( $this->allCategoriesObj[$parentid] as $categoryid=>$categoryObj) {
                $ret[$categoryid]['self'] =& $categoryObj->toArray();
                if (isset($this->allCategoriesObj[$categoryid])) {
                    $ret[$categoryid]['sub'] =& $this->getAllCategoriesArray($categoryid);
                    $ret[$categoryid]['subcatscount'] = count($ret[$categoryid]['sub']);
                }
            }
        }
        return $ret;
    }
    
    public function getParentIds($parentid, $asString=true) {
        if (!$this->allCategoriesId) {
            $ret = array();
            $sql = 'SELECT categoryid, parentid FROM ' . $this->table
                . " AS " . $this->_itemname . ' ORDER BY parentid';
            $result = $this->db->query($sql);
            if (!$result) {
                return $ret;
            }
            while ($myrow = $this->db->fetchArray($result)) {
                $this->allCategoriesId[$myrow['categoryid']] =  $myrow['parentid'];
            }
        }
        $retArray = array($parentid);
        while ($parentid != 0) {
            $parentid = $this->allCategoriesId[$parentid];
            if ($parentid != 0) {
                $retArray[] = $parentid;
            }
        }
        if ($asString) {
            return implode(', ', $retArray);
        } else {
            return $retArray;
        }
    }
}