| 1 |
nanocaio |
1.1 |
<?php |
| 2 |
nanocaio |
1.1 |
/********************************************* |
| 3 |
nanocaio |
1.10 |
CPG Dragonfly™ CMS |
| 4 |
nanocaio |
1.1 |
******************************************** |
| 5 |
nanocaio |
1.10 |
Copyright © 2004 - 2007 by CPG-Nuke Dev Team |
| 6 |
nanocaio |
1.1 |
http://dragonflycms.org |
| 7 |
nanocaio |
1.1 |
  |
| 8 |
nanocaio |
1.1 |
Dragonfly is released under the terms and conditions |
| 9 |
nanocaio |
1.1 |
of the GNU GPL version 2 or any later version |
| 10 |
nanocaio |
1.1 |
  |
| 11 |
nanocaio |
1.2 |
$Source: /cvs/html/includes/classes/blocks.php,v $ |
| 12 |
nanocaio |
10.4 |
$Revision: 10.3 $ |
| 13 |
nanocaio |
10.2 |
$Author: nanocaiordo $ |
| 14 |
nanocaio |
10.4 |
$Date: 2011/10/15 23:33:45 $ |
| 15 |
nanocaio |
1.1 |
**********************************************/ |
| 16 |
nanocaio |
1.1 |
class Blocks |
| 17 |
nanocaio |
1.1 |
{ |
| 18 |
nanocaio |
1.1 |
  |
| 19 |
nanocaio |
10.1 |
/* settings */ |
| 20 |
nanocaio |
10.1 |
// const ALL_MODULES; /* all modules otherwsie active only */ |
| 21 |
nanocaio |
10.1 |
// const ALL_BLOCKS; /* all blocks otherwise active only */ |
| 22 |
nanocaio |
10.1 |
// const PREVIEW; |
| 23 |
nanocaio |
10.1 |
// const HIDEALL; |
| 24 |
nanocaio |
10.1 |
  |
| 25 |
nanocaio |
10.1 |
public static $preview = false; |
| 26 |
nanocaio |
10.1 |
public static $showblocks = null; |
| 27 |
nanocaio |
10.1 |
/* end settings */ |
| 28 |
nanocaio |
10.1 |
  |
| 29 |
nanocaio |
10.2 |
const NONE = 0; |
| 30 |
nanocaio |
10.1 |
const LEFT = 1; |
| 31 |
nanocaio |
10.1 |
const RIGHT = 2; |
| 32 |
nanocaio |
10.1 |
const CENTER = 4; |
| 33 |
nanocaio |
10.1 |
const DOWN = 8; |
| 34 |
nanocaio |
10.2 |
const ALL = 15; |
| 35 |
nanocaio |
10.1 |
  |
| 36 |
nanocaio |
10.1 |
public $list = array(); |
| 37 |
nanocaio |
10.1 |
  |
| 38 |
nanocaio |
10.1 |
private $data = array(); |
| 39 |
nanocaio |
10.1 |
private static $custom = array(); |
| 40 |
nanocaio |
10.1 |
private $active = false; |
| 41 |
nanocaio |
10.1 |
  |
| 42 |
nanocaio |
10.1 |
public function __construct($mid=0) |
| 43 |
nanocaio |
10.1 |
{ |
| 44 |
nanocaio |
10.1 |
if (isset($_GET['hideallblocks']) || self::$preview || self::$showblocks === 0 || $mid === 0) { |
| 45 |
nanocaio |
10.1 |
self::$showblocks = 0; |
| 46 |
nanocaio |
1.1 |
return; |
| 47 |
nanocaio |
1.1 |
} |
| 48 |
nanocaio |
10.1 |
  |
| 49 |
nanocaio |
10.1 |
$mid = intval($mid); |
| 50 |
nanocaio |
10.1 |
global $db, $prefix, $MAIN_CFG, $Module, $currentlang; |
| 51 |
nanocaio |
10.1 |
//$db->sql_query("DELETE FROM {$prefix}_blocks_custom WHERE mid NOT IN (SELECT mid FROM {$prefix}_modules) AND mid < 0"); |
| 52 |
nanocaio |
10.1 |
$querylang = ($MAIN_CFG['global']['multilingual']) ? " AND (blanguage='$currentlang' OR blanguage='')" : ''; |
| 53 |
nanocaio |
10.1 |
$result = $db->query("SELECT b.bid, b.bkey, b.title, b.content, b.url, b.blockfile, b.view, b.refresh, b.time, bc.mid, bc.side |
| 54 |
nanocaio |
10.1 |
FROM {$prefix}_blocks_custom as bc LEFT JOIN {$prefix}_blocks as b USING(bid) WHERE b.active=1 AND bc.mid={$mid}{$querylang}"); |
| 55 |
nanocaio |
10.1 |
while($row = $result->fetch_assoc()) { |
| 56 |
nanocaio |
10.1 |
// temporary table data needs upgrade |
| 57 |
nanocaio |
10.1 |
if ($row['side'] === 'l') $row['side'] = self::LEFT; |
| 58 |
nanocaio |
10.1 |
else if ($row['side'] === 'c') $row['side'] = self::CENTER; |
| 59 |
nanocaio |
10.1 |
else if ($row['side'] === 'r') $row['side'] = self::RIGHT; |
| 60 |
nanocaio |
10.1 |
else if ($row['side'] === 'd') $row['side'] = self::DOWN; |
| 61 |
nanocaio |
10.1 |
if (self::$showblocks & $row['side'] && self::allowed($row['view'])) { |
| 62 |
nanocaio |
10.1 |
$row['bid'] = intval($row['bid']); |
| 63 |
nanocaio |
10.1 |
$row['time'] = intval($row['time']); |
| 64 |
nanocaio |
10.1 |
$row['refresh'] = intval($row['refresh']); |
| 65 |
nanocaio |
10.1 |
$this->data[$row['side']][] = $row; |
| 66 |
nanocaio |
10.1 |
} |
| 67 |
nanocaio |
10.1 |
} |
| 68 |
nanocaio |
10.1 |
$db->sql_freeresult($result); |
| 69 |
nanocaio |
10.1 |
} |
| 70 |
nanocaio |
10.1 |
  |
| 71 |
nanocaio |
10.1 |
public function list_all($module=null) |
| 72 |
nanocaio |
10.1 |
{ |
| 73 |
nanocaio |
10.1 |
global $prefix, $db, $blocks_save; |
| 74 |
nanocaio |
10.1 |
static $blocks_save; |
| 75 |
nanocaio |
10.1 |
if (is_array($blocks_save)) { |
| 76 |
nanocaio |
10.1 |
if ($module && isset($blocks_save[$module])) return $blocks_save[$module]; |
| 77 |
nanocaio |
10.1 |
else return $blocks_save; |
| 78 |
nanocaio |
10.1 |
} |
| 79 |
nanocaio |
10.1 |
// we want to get even NULL values in case of modules with no blocks |
| 80 |
nanocaio |
10.1 |
$blocks_list = array(); |
| 81 |
nanocaio |
10.1 |
$blocks_list['Admin']['mid'] = -1; |
| 82 |
nanocaio |
10.1 |
$blocks_list['Admin']['title'] = _ADMINISTRATION; |
| 83 |
nanocaio |
10.1 |
$blocks_list['Admin']['blocks'] = 15; |
| 84 |
nanocaio |
10.1 |
$module[-1] = 'Admin'; |
| 85 |
nanocaio |
10.1 |
  |
| 86 |
nanocaio |
10.1 |
$result = $db->sql_uquery('SELECT mid, title, blocks FROM '.$prefix.'_modules'); |
| 87 |
nanocaio |
10.1 |
while ($row = $db->sql_fetchrow($result, SQL_ASSOC)) { |
| 88 |
nanocaio |
10.1 |
$title = defined('_'.$row['title'].'LANG') ? '_'.$row['title'].'LANG' : (defined('_'.strtoupper($row['title'])) ? '_'.strtoupper($row['title']) : $row['title']); |
| 89 |
nanocaio |
10.1 |
$blocks_list[$row['title']]['mid'] = (int)$row['mid']; |
| 90 |
nanocaio |
10.1 |
$blocks_list[$row['title']]['title'] = $title; |
| 91 |
nanocaio |
10.1 |
$blocks_list[$row['title']]['blocks'] = (int)$row['blocks']; |
| 92 |
nanocaio |
10.1 |
$module[$row['mid']] = $row['title']; |
| 93 |
nanocaio |
10.1 |
} |
| 94 |
nanocaio |
10.1 |
$db->sql_freeresult($result); |
| 95 |
nanocaio |
10.1 |
$result = $db->sql_query('SELECT bid, mid, side FROM '.$prefix.'_blocks_custom ORDER BY mid, weight'); |
| 96 |
nanocaio |
10.1 |
while ($row = $db->sql_fetchrow($result, SQL_ASSOC)) { |
| 97 |
nanocaio |
10.1 |
if (!isset($module[$row['mid']])) { |
| 98 |
nanocaio |
10.1 |
$db->sql_query('DELETE FROM '.$prefix."_blocks_custom WHERE bid='$row[bid]' AND mid='$row[mid]'"); |
| 99 |
nanocaio |
10.1 |
continue; |
| 100 |
nanocaio |
10.1 |
} |
| 101 |
nanocaio |
10.1 |
$blocks_list[$module[$row['mid']]][$row['bid']] = $row['side']; |
| 102 |
nanocaio |
10.1 |
} |
| 103 |
nanocaio |
10.1 |
ksort($blocks_list); |
| 104 |
nanocaio |
10.1 |
$db->sql_freeresult($result); |
| 105 |
nanocaio |
10.1 |
$blocks_save = $blocks_list; |
| 106 |
nanocaio |
10.1 |
if (is_array($blocks_save)) return $blocks_save; |
| 107 |
nanocaio |
10.1 |
return; |
| 108 |
nanocaio |
10.1 |
} |
| 109 |
nanocaio |
10.1 |
  |
| 110 |
nanocaio |
10.1 |
public static function custom(&$data) |
| 111 |
nanocaio |
10.1 |
{ |
| 112 |
nanocaio |
10.1 |
if (is_array($data) && self::allowed($data['view'])) { |
| 113 |
nanocaio |
10.1 |
if ('l' === $data['side']) $data['side'] = self::LEFT; |
| 114 |
nanocaio |
10.1 |
else if ('c' === $data['side']) $data['side'] = self::CENTER; |
| 115 |
nanocaio |
10.1 |
else if ('r' === $data['side']) $data['side'] = self::RIGHT; |
| 116 |
nanocaio |
10.1 |
else if ('d' === $data['side']) $data['side'] = self::DOWN; |
| 117 |
nanocaio |
1.1 |
$data['bkey'] = 'custom'; |
| 118 |
nanocaio |
10.1 |
self::$custom[$data['side']][] = $data; |
| 119 |
nanocaio |
1.1 |
} |
| 120 |
nanocaio |
1.9 |
$data = null; |
| 121 |
nanocaio |
1.1 |
} |
| 122 |
nanocaio |
1.1 |
  |
| 123 |
nanocaio |
1.13 |
public function preview(&$block) |
| 124 |
nanocaio |
1.1 |
{ |
| 125 |
nanocaio |
10.1 |
if (!self::$preview) { return trigger_error('Use "Blocks::$preview=TRUE;" before including header.php', E_USER_WARNING); } |
| 126 |
nanocaio |
10.1 |
self::$showblocks = 0; |
| 127 |
nanocaio |
10.1 |
$this->data = array(); |
| 128 |
nanocaio |
10.1 |
$this->data[self::CENTER][] = $block; |
| 129 |
nanocaio |
10.1 |
$this->display(self::CENTER); |
| 130 |
nanocaio |
1.1 |
} |
| 131 |
nanocaio |
1.1 |
  |
| 132 |
nanocaio |
1.13 |
public function display($side) |
| 133 |
nanocaio |
1.1 |
{ |
| 134 |
nanocaio |
10.1 |
if ('l' === $side) $side = self::LEFT; |
| 135 |
nanocaio |
10.1 |
else if ('c' === $side) $side = self::CENTER; |
| 136 |
nanocaio |
10.1 |
else if ('r' === $side) $side = self::RIGHT; |
| 137 |
nanocaio |
10.1 |
else if ('d' === $side) $side = self::DOWN; |
| 138 |
nanocaio |
10.1 |
  |
| 139 |
nanocaio |
10.1 |
if (!empty(self::$custom[$side])) { |
| 140 |
nanocaio |
10.1 |
if (!isset($this->data[$side])) $this->data[$side] = array(); |
| 141 |
nanocaio |
10.1 |
while ($c = array_pop(self::$custom[$side])) { |
| 142 |
nanocaio |
10.1 |
array_unshift($this->data[$side], $c); |
| 143 |
nanocaio |
10.1 |
} |
| 144 |
nanocaio |
10.1 |
self::$custom[$side] = null; |
| 145 |
nanocaio |
1.7 |
} |
| 146 |
nanocaio |
10.1 |
if (!isset($this->data[$side])) return; |
| 147 |
nanocaio |
10.1 |
  |
| 148 |
nanocaio |
1.1 |
require_once(CORE_PATH.'nbbcode.php'); |
| 149 |
nanocaio |
10.1 |
while ($block = array_shift($this->data[$side])) { |
| 150 |
nanocaio |
1.1 |
$block['title'] = (defined($block['title']) ? constant($block['title']) : $block['title']); |
| 151 |
nanocaio |
1.1 |
switch ($block['bkey']) { |
| 152 |
nanocaio |
1.1 |
case 'admin': |
| 153 |
nanocaio |
10.1 |
if (is_admin()) { |
| 154 |
nanocaio |
1.5 |
if ($content = adminblock($block['bid'], $block['title'], $block['content'])) { |
| 155 |
nanocaio |
1.5 |
$this->assign($side, $content); |
| 156 |
nanocaio |
1.5 |
} |
| 157 |
nanocaio |
1.5 |
} |
| 158 |
nanocaio |
1.1 |
break; |
| 159 |
nanocaio |
1.1 |
case 'userbox': |
| 160 |
nanocaio |
1.1 |
global $userinfo; |
| 161 |
nanocaio |
1.1 |
if (is_user() && $userinfo['ublockon']) { |
| 162 |
nanocaio |
1.1 |
$block['title'] = _MENUFOR." $userinfo[username]"; |
| 163 |
nanocaio |
10.4 |
$block['content'] = BBCode::decodeAll($userinfo['ublock'], 1, true); |
| 164 |
nanocaio |
1.5 |
$this->assign($side, $block); |
| 165 |
nanocaio |
1.1 |
} |
| 166 |
nanocaio |
1.1 |
break; |
| 167 |
nanocaio |
1.1 |
case 'rss': |
| 168 |
nanocaio |
1.5 |
$this->rss($side, $block); |
| 169 |
nanocaio |
1.1 |
break; |
| 170 |
nanocaio |
1.1 |
case 'custom': |
| 171 |
nanocaio |
10.3 |
$block['content'] = BBCode::decodeAll($block['content'], 1, true); |
| 172 |
nanocaio |
1.5 |
$this->assign($side, $block); |
| 173 |
nanocaio |
1.1 |
break; |
| 174 |
nanocaio |
1.1 |
case 'file': |
| 175 |
nanocaio |
1.5 |
$this->blockfile($side, $block); |
| 176 |
nanocaio |
10.1 |
break; |
| 177 |
nanocaio |
1.1 |
default: |
| 178 |
nanocaio |
1.1 |
trigger_error('Undefined bkey for '.$block['title'], E_USER_WARNING); |
| 179 |
nanocaio |
10.1 |
} |
| 180 |
nanocaio |
1.1 |
} |
| 181 |
nanocaio |
1.1 |
} |
| 182 |
nanocaio |
1.1 |
  |
| 183 |
nanocaio |
1.13 |
public function hideblock($id) { |
| 184 |
nanocaio |
1.1 |
static $hiddenblocks; |
| 185 |
nanocaio |
1.1 |
if (!isset($hiddenblocks)) { |
| 186 |
nanocaio |
1.1 |
$hiddenblocks = array(); |
| 187 |
nanocaio |
1.1 |
if (isset($_COOKIE['hiddenblocks'])) { |
| 188 |
nanocaio |
1.1 |
$tmphidden = explode(':', $_COOKIE['hiddenblocks']); |
| 189 |
nanocaio |
10.1 |
for($i=0; $i<count($tmphidden); ++$i) { $hiddenblocks[$tmphidden[$i]] = true; } |
| 190 |
nanocaio |
1.1 |
} |
| 191 |
nanocaio |
1.1 |
} |
| 192 |
nanocaio |
1.1 |
return (isset($hiddenblocks[$id]) ? true : false); |
| 193 |
nanocaio |
1.1 |
} |
| 194 |
nanocaio |
10.1 |
  |
| 195 |
nanocaio |
10.1 |
# __get' slows down each call made to the class, performance wide? set property as public, strict coding? likes it this way |
| 196 |
nanocaio |
10.1 |
public function __get($p) |
| 197 |
nanocaio |
10.1 |
{ |
| 198 |
nanocaio |
10.1 |
switch ($p) { |
| 199 |
nanocaio |
10.1 |
case 'data': return $this->data; |
| 200 |
nanocaio |
10.1 |
} |
| 201 |
nanocaio |
10.1 |
} |
| 202 |
nanocaio |
1.1 |
  |
| 203 |
nanocaio |
1.13 |
private function blockfile($side, &$block) |
| 204 |
nanocaio |
1.1 |
{ |
| 205 |
nanocaio |
1.1 |
if (is_file('blocks/'.$block['blockfile'])) { |
| 206 |
nanocaio |
1.1 |
include('blocks/'.$block['blockfile']); |
| 207 |
nanocaio |
1.4 |
if ($content == 'ERROR') return; |
| 208 |
nanocaio |
1.4 |
if (!empty($content)) { |
| 209 |
nanocaio |
1.1 |
$block['content'] =& $content; |
| 210 |
nanocaio |
1.5 |
$this->assign($side, $block); |
| 211 |
nanocaio |
1.1 |
return; |
| 212 |
nanocaio |
1.1 |
} |
| 213 |
nanocaio |
1.1 |
} |
| 214 |
nanocaio |
1.1 |
trigger_error($block['blockfile']._BLOCKPROBLEM, E_USER_WARNING); |
| 215 |
nanocaio |
1.1 |
} |
| 216 |
nanocaio |
1.1 |
  |
| 217 |
nanocaio |
1.13 |
private function rss($side, &$block) |
| 218 |
nanocaio |
1.1 |
{ |
| 219 |
nanocaio |
1.1 |
global $db, $prefix; |
| 220 |
nanocaio |
1.15 |
if ($block['time'] < (time()-$block['refresh'])) { |
| 221 |
nanocaio |
1.1 |
require_once(CORE_PATH.'classes/rss.php'); |
| 222 |
nanocaio |
1.1 |
if (!($block['content'] = CPG_RSS::format(CPG_RSS::read($block['url'])))) { |
| 223 |
nanocaio |
1.1 |
return trigger_error(_RSSPROBLEM.' ('.$block['title'].')', E_USER_WARNING); |
| 224 |
nanocaio |
1.1 |
} |
| 225 |
nanocaio |
1.15 |
$db->sql_query('UPDATE '.$prefix.'_blocks SET content=\''.Fix_Quotes($block['content']).'\', time=\''.time().'\' WHERE bid=\''.$block['bid'].'\''); |
| 226 |
nanocaio |
1.1 |
} |
| 227 |
nanocaio |
1.5 |
$this->assign($side, $block); |
| 228 |
nanocaio |
1.1 |
} |
| 229 |
nanocaio |
1.1 |
  |
| 230 |
nanocaio |
1.13 |
private function assign($side, &$block) |
| 231 |
nanocaio |
1.1 |
{ |
| 232 |
nanocaio |
1.1 |
global $cpgtpl, $CPG_SESS; |
| 233 |
nanocaio |
10.1 |
if (self::LEFT === $side) $side = 'l'; |
| 234 |
nanocaio |
10.1 |
else if (self::CENTER === $side) $side = 'c'; |
| 235 |
nanocaio |
10.1 |
else if (self::RIGHT === $side) $side = 'r'; |
| 236 |
nanocaio |
10.1 |
else if (self::DOWN === $side) $side = 'd'; |
| 237 |
nanocaio |
10.1 |
if (!self::$preview) { |
| 238 |
nanocaio |
1.2 |
$sides = array('l' => 'left', 'c' => 'center', 'r' => 'right', 'd' => 'bottom'); |
| 239 |
nanocaio |
1.1 |
$side = $sides[$side]; |
| 240 |
nanocaio |
1.1 |
} else { |
| 241 |
nanocaio |
1.1 |
$side = ''; |
| 242 |
nanocaio |
1.1 |
} |
| 243 |
nanocaio |
1.1 |
$cpgtpl->assign_block_vars($side.'block', array( |
| 244 |
nanocaio |
1.1 |
'S_TITLE' => $block['title'], |
| 245 |
nanocaio |
1.1 |
'S_CONTENT' => $block['content'], |
| 246 |
nanocaio |
1.1 |
'S_BID' => $block['bid'], |
| 247 |
nanocaio |
1.5 |
'S_VISIBLE' => $this->hideblock($block['bid']) ? 'style="display:none"' : '', |
| 248 |
nanocaio |
1.5 |
'S_HIDDEN' => $this->hideblock($block['bid']) ? '' : 'style="display:none"', |
| 249 |
nanocaio |
1.5 |
'S_IMAGE' => 'themes/'.$CPG_SESS['theme'].'/images/'.($this->hideblock($block['bid']) ? 'plus' : 'minus') |
| 250 |
nanocaio |
1.1 |
)); |
| 251 |
nanocaio |
10.1 |
if (self::$preview) { |
| 252 |
nanocaio |
1.1 |
$cpgtpl->set_filenames(array('block' => 'block.html')); |
| 253 |
nanocaio |
1.1 |
$cpgtpl->display('block'); |
| 254 |
nanocaio |
1.1 |
} |
| 255 |
nanocaio |
1.1 |
} |
| 256 |
nanocaio |
1.1 |
  |
| 257 |
nanocaio |
10.1 |
private static function allowed($view) |
| 258 |
nanocaio |
1.1 |
{ |
| 259 |
nanocaio |
1.12 |
$view = intval($view); |
| 260 |
nanocaio |
1.1 |
if (is_admin() || ($view === 0) |
| 261 |
nanocaio |
1.1 |
|| ($view === 1 && is_user()) |
| 262 |
nanocaio |
1.1 |
|| ($view === 3 && !is_user()) |
| 263 |
nanocaio |
1.1 |
|| ($view > 3 && in_group($view-3))) |
| 264 |
nanocaio |
1.1 |
{ |
| 265 |
nanocaio |
1.1 |
return true; |
| 266 |
nanocaio |
1.1 |
} |
| 267 |
nanocaio |
1.1 |
return; |
| 268 |
nanocaio |
1.1 |
} |
| 269 |
nanocaio |
1.1 |
} |