1<?php 2/** 3 * XOOPS Kernel Class 4 * 5 * You may not change or alter any portion of this comment or credits 6 * of supporting developers from this source code or any supporting source code 7 * which is considered copyrighted (c) material of the original comment or credit authors. 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 * 12 * @copyright (c) 2000-2016 XOOPS Project (www.xoops.org) 13 * @license GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html) 14 * @package kernel 15 * @since 2.0.0 16 * @author Kazumi Ono (AKA onokazu) http://www.myweb.ne.jp/, http://jp.xoops.org/ 17 */ 18defined('XOOPS_ROOT_PATH') || exit('Restricted access'); 19 20/** 21 * @author Kazumi Ono <onokazu@xoops.org> 22 * @copyright (c) 2000-2016 XOOPS Project (www.xoops.org) 23 **/ 24 25/** 26 * XOOPS Image Category 27 * 28 * @package kernel 29 * 30 * @author Kazumi Ono <onokazu@xoops.org> 31 * @copyright (c) 2000-2016 XOOPS Project (www.xoops.org) 32 */ 33class XoopsImagecategory extends XoopsObject 34{ 35 public $_imageCount; 36 37 /** 38 * Constructor 39 **/ 40 public function __construct() 41 { 42 parent::__construct(); 43 $this->initVar('imgcat_id', XOBJ_DTYPE_INT, null, false); 44 $this->initVar('imgcat_name', XOBJ_DTYPE_TXTBOX, null, true, 100); 45 $this->initVar('imgcat_display', XOBJ_DTYPE_INT, 1, false); 46 $this->initVar('imgcat_weight', XOBJ_DTYPE_INT, 0, false); 47 $this->initVar('imgcat_maxsize', XOBJ_DTYPE_INT, 0, false); 48 $this->initVar('imgcat_maxwidth', XOBJ_DTYPE_INT, 0, false); 49 $this->initVar('imgcat_maxheight', XOBJ_DTYPE_INT, 0, false); 50 $this->initVar('imgcat_type', XOBJ_DTYPE_OTHER, null, false); 51 $this->initVar('imgcat_storetype', XOBJ_DTYPE_OTHER, null, false); 52 } 53 54 /** 55 * Returns Class Base Variable imgcat_id 56 * @param string $format 57 * @return mixed 58 */ 59 public function id($format = 'N') 60 { 61 return $this->getVar('imgcat_id', $format); 62 } 63 64 /** 65 * Returns Class Base Variable imgcat_id 66 * @param string $format 67 * @return mixed 68 */ 69 public function imgcat_id($format = '') 70 { 71 return $this->getVar('imgcat_id', $format); 72 } 73 74 /** 75 * Returns Class Base Variable imgcat_name 76 * @param string $format 77 * @return mixed 78 */ 79 public function imgcat_name($format = '') 80 { 81 return $this->getVar('imgcat_name', $format); 82 } 83 84 /** 85 * Returns Class Base Variable imgcat_display 86 * @param string $format 87 * @return mixed 88 */ 89 public function imgcat_display($format = '') 90 { 91 return $this->getVar('imgcat_display', $format); 92 } 93 94 /** 95 * Returns Class Base Variable imgcat_weight 96 * @param string $format 97 * @return mixed 98 */ 99 public function imgcat_weight($format = '') 100 { 101 return $this->getVar('imgcat_weight', $format); 102 } 103 104 /** 105 * Returns Class Base Variable imgcat_maxsize 106 * @param string $format 107 * @return mixed 108 */ 109 public function imgcat_maxsize($format = '') 110 { 111 return $this->getVar('imgcat_maxsize', $format); 112 } 113 114 /** 115 * Returns Class Base Variable imgcat_maxwidth 116 * @param string $format 117 * @return mixed 118 */ 119 public function imgcat_maxwidth($format = '') 120 { 121 return $this->getVar('imgcat_maxwidth', $format); 122 } 123 124 /** 125 * Returns Class Base Variable imgcat_maxheight 126 * @param string $format 127 * @return mixed 128 */ 129 public function imgcat_maxheight($format = '') 130 { 131 return $this->getVar('imgcat_maxheight', $format); 132 } 133 134 /** 135 * Returns Class Base Variable imgcat_type 136 * @param string $format 137 * @return mixed 138 */ 139 public function imgcat_type($format = '') 140 { 141 return $this->getVar('imgcat_type', $format); 142 } 143 144 /** 145 * Returns Class Base Variable imgcat_storetype 146 * @param string $format 147 * @return mixed 148 */ 149 public function imgcat_storetype($format = '') 150 { 151 return $this->getVar('imgcat_storetype', $format); 152 } 153 154 /** 155 * Enter description here... 156 * 157 * @param int $value 158 */ 159 public function setImageCount($value) 160 { 161 $this->_imageCount = (int)$value; 162 } 163 164 /** 165 * Enter description here... 166 * 167 * @return int 168 */ 169 public function getImageCount() 170 { 171 return $this->_imageCount; 172 } 173} 174 175/** 176 * XOOPS image caetgory handler class. 177 * This class is responsible for providing data access mechanisms to the data source 178 * of XOOPS image category class objects. 179 * 180 * 181 * @author Kazumi Ono <onokazu@xoops.org> 182 */ 183class XoopsImagecategoryHandler extends XoopsObjectHandler 184{ 185 /** 186 * Create a new {@link XoopsImageCategory} 187 * 188 * @param boolean $isNew Flag the object as "new" 189 * @return XoopsImagecategory 190 **/ 191 public function create($isNew = true) 192 { 193 $imgcat = new XoopsImagecategory(); 194 if ($isNew) { 195 $imgcat->setNew(); 196 } 197 198 return $imgcat; 199 } 200 201 /** 202 * Load a {@link XoopsImageCategory} object from the database 203 * 204 * @param int $id ID 205 * 206 * @internal param bool $getbinary 207 * @return XoopsImageCategory {@link XoopsImageCategory}, FALSE on fail 208 */ 209 public function get($id) 210 { 211 $id = (int)$id; 212 $imgcat = false; 213 if ($id > 0) { 214 $sql = 'SELECT * FROM ' . $this->db->prefix('imagecategory') . ' WHERE imgcat_id=' . $id; 215 if (!$result = $this->db->query($sql)) { 216 return $imgcat; 217 } 218 $numrows = $this->db->getRowsNum($result); 219 if ($numrows == 1) { 220 $imgcat = new XoopsImagecategory(); 221 $imgcat->assignVars($this->db->fetchArray($result)); 222 } 223 } 224 225 return $imgcat; 226 } 227 228 /** 229 * Write a {@link XoopsImageCategory} object to the database 230 * 231 * @param XoopsObject|XoopsImageCategory $imgcat a XoopsImageCategory object 232 * 233 * @return bool true on success, otherwise false 234 **/ 235 public function insert(XoopsObject $imgcat) 236 { 237 $className = 'XoopsImageCategory'; 238 if (!($imgcat instanceof $className)) { 239 return false; 240 } 241 242 if (!$imgcat->isDirty()) { 243 return true; 244 } 245 if (!$imgcat->cleanVars()) { 246 return false; 247 } 248 foreach ($imgcat->cleanVars as $k => $v) { 249 ${$k} = $v; 250 } 251 if ($imgcat->isNew()) { 252 $imgcat_id = $this->db->genId('imgcat_imgcat_id_seq'); 253 $sql = sprintf('INSERT INTO %s (imgcat_id, imgcat_name, imgcat_display, imgcat_weight, imgcat_maxsize, imgcat_maxwidth, imgcat_maxheight, imgcat_type, imgcat_storetype) VALUES (%u, %s, %u, %u, %u, %u, %u, %s, %s)', $this->db->prefix('imagecategory'), $imgcat_id, $this->db->quoteString($imgcat_name), $imgcat_display, $imgcat_weight, $imgcat_maxsize, $imgcat_maxwidth, $imgcat_maxheight, $this->db->quoteString($imgcat_type), $this->db->quoteString($imgcat_storetype)); 254 } else { 255 $sql = sprintf('UPDATE %s SET imgcat_name = %s, imgcat_display = %u, imgcat_weight = %u, imgcat_maxsize = %u, imgcat_maxwidth = %u, imgcat_maxheight = %u, imgcat_type = %s WHERE imgcat_id = %u', $this->db->prefix('imagecategory'), $this->db->quoteString($imgcat_name), $imgcat_display, $imgcat_weight, $imgcat_maxsize, $imgcat_maxwidth, $imgcat_maxheight, $this->db->quoteString($imgcat_type), $imgcat_id); 256 } 257 if (!$result = $this->db->query($sql)) { 258 return false; 259 } 260 if (empty($imgcat_id)) { 261 $imgcat_id = $this->db->getInsertId(); 262 } 263 $imgcat->assignVar('imgcat_id', $imgcat_id); 264 265 return true; 266 } 267 268 /** 269 * Delete an image from the database 270 * 271 * @param XoopsObject|XoopsImageCategory $imgcat a XoopsImageCategory object 272 * 273 * @return bool true on success, otherwise false 274 **/ 275 public function delete(XoopsObject $imgcat) 276 { 277 $className = 'XoopsImageCategory'; 278 if (!($imgcat instanceof $className)) { 279 return false; 280 } 281 282 $sql = sprintf('DELETE FROM %s WHERE imgcat_id = %u', $this->db->prefix('imagecategory'), $imgcat->getVar('imgcat_id')); 283 if (!$result = $this->db->query($sql)) { 284 return false; 285 } 286 287 return true; 288 } 289 290 /** 291 * Enter description here... 292 * 293 * @param CriteriaElement $criteria 294 * @param bool $id_as_key if true, use id as array key 295 * @return array of XoopsImagecategory objects 296 */ 297 public function getObjects(CriteriaElement $criteria = null, $id_as_key = false) 298 { 299 $ret = array(); 300 $limit = $start = 0; 301 $sql = 'SELECT DISTINCT c.* FROM ' . $this->db->prefix('imagecategory') . ' c LEFT JOIN ' . $this->db->prefix('group_permission') . " l ON l.gperm_itemid=c.imgcat_id WHERE (l.gperm_name = 'imgcat_read' OR l.gperm_name = 'imgcat_write')"; 302 if (isset($criteria) && is_subclass_of($criteria, 'CriteriaElement')) { 303 $where = $criteria->render(); 304 $sql .= ($where != '') ? ' AND ' . $where : ''; 305 $limit = $criteria->getLimit(); 306 $start = $criteria->getStart(); 307 } 308 $sql .= ' ORDER BY imgcat_weight, imgcat_id ASC'; 309 $result = $this->db->query($sql, $limit, $start); 310 if (!$result) { 311 return $ret; 312 } 313 while (false !== ($myrow = $this->db->fetchArray($result))) { 314 $imgcat = new XoopsImagecategory(); 315 $imgcat->assignVars($myrow); 316 if (!$id_as_key) { 317 $ret[] = $imgcat; 318 } else { 319 $ret[$myrow['imgcat_id']] = $imgcat; 320 } 321 unset($imgcat); 322 } 323 324 return $ret; 325 } 326 327 /** 328 * Count some images 329 * 330 * @param CriteriaElement $criteria {@link CriteriaElement} 331 * @return int 332 **/ 333 public function getCount(CriteriaElement $criteria = null) 334 { 335 $sql = 'SELECT COUNT(*) FROM ' . $this->db->prefix('imagecategory') . ' i LEFT JOIN ' . $this->db->prefix('group_permission') . " l ON l.gperm_itemid=i.imgcat_id WHERE (l.gperm_name = 'imgcat_read' OR l.gperm_name = 'imgcat_write')"; 336 if (isset($criteria) && is_subclass_of($criteria, 'CriteriaElement')) { 337 $where = $criteria->render(); 338 $sql .= ($where != '') ? ' AND ' . $where : ''; 339 } 340 if (!$result = $this->db->query($sql)) { 341 return 0; 342 } 343 list($count) = $this->db->fetchRow($result); 344 345 return $count; 346 } 347 348 /** 349 * Get a list of image categories 350 * 351 * @param array $groups 352 * @param string $perm 353 * @param null $display 354 * @param null $storetype 355 * @internal param int $imgcat_id 356 * @internal param bool $image_display 357 * @return array Array of {@link XoopsImage} objects 358 */ 359 public function getList($groups = array(), $perm = 'imgcat_read', $display = null, $storetype = null) 360 { 361 $criteria = new CriteriaCompo(); 362 if (is_array($groups) && !empty($groups)) { 363 $criteriaTray = new CriteriaCompo(); 364 foreach ($groups as $gid) { 365 $criteriaTray->add(new Criteria('gperm_groupid', $gid), 'OR'); 366 } 367 $criteria->add($criteriaTray); 368 if ($perm === 'imgcat_read' || $perm === 'imgcat_write') { 369 $criteria->add(new Criteria('gperm_name', $perm)); 370 $criteria->add(new Criteria('gperm_modid', 1)); 371 } 372 } 373 if (isset($display)) { 374 $criteria->add(new Criteria('imgcat_display', (int)$display)); 375 } 376 if (isset($storetype)) { 377 $criteria->add(new Criteria('imgcat_storetype', $storetype)); 378 } 379 $categories = $this->getObjects($criteria, true); 380 $ret = array(); 381 foreach (array_keys($categories) as $i) { 382 $ret[$i] = $categories[$i]->getVar('imgcat_name'); 383 } 384 385 return $ret; 386 } 387} 388