3 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
4 * Copyright (C) 2002-2012 The Nucleus Group
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 * (see nucleus/documentation/index.html#license for more info)
13 * Class representing a skin
15 * @license http://nucleuscms.org/license.txt GNU General Public License
16 * @copyright Copyright (C) 2002-2012 The Nucleus Group
18 * @version $NucleusJP: SKIN.php,v 1.8.2.1 2007/09/05 07:45:01 kimitake Exp $
21 if ( !function_exists('requestVar') ) exit;
22 require_once dirname(__FILE__) . '/ACTIONS.php';
26 // after creating a SKIN object, evaluates to true when the skin exists
29 // skin characteristics. Use the getXXX methods rather than accessing directly
33 var $includeMode; // either 'normal' or 'skindir'
38 $this->id = intval($id);
40 // read skin name/description/content type
41 $res = sql_query('SELECT * FROM '.sql_table('skin_desc').' WHERE sdnumber=' . $this->id);
42 $obj = sql_fetch_object($res);
43 $this->isValid = (sql_num_rows($res) > 0);
47 $this->name = $obj->sdname;
48 $this->description = $obj->sddesc;
49 $this->contentType = $obj->sdtype;
50 $this->includeMode = $obj->sdincmode;
51 $this->includePrefix = $obj->sdincpref;
55 function getID() { return $this->id; }
56 function getName() { return $this->name; }
57 function getDescription() { return $this->description; }
58 function getContentType() { return $this->contentType; }
59 function getIncludeMode() { return $this->includeMode; }
60 function getIncludePrefix() { return $this->includePrefix; }
63 * Checks if a skin with a given shortname exists
64 * @param string $name Skin short name
65 * @return int number of skins with the given ID
68 function exists($name) {
69 return quickQuery('select count(*) as result FROM '.sql_table('skin_desc').' WHERE sdname="'.sql_real_escape_string($name).'"') > 0;
73 * Checks if a skin with a given ID exists
74 * @param string $id Skin ID
75 * @return int number of skins with the given ID
78 function existsID($id) {
79 return quickQuery('select COUNT(*) as result FROM '.sql_table('skin_desc').' WHERE sdnumber='.intval($id)) > 0;
83 * Returns a skin given its shortname
84 * @param string $name Skin shortname
88 function createFromName($name) {
89 return new SKIN(SKIN::getIdFromName($name));
93 * Returns a skin ID given its shortname
94 * @param string $name Skin shortname
98 function getIdFromName($name) {
99 $query = 'SELECT sdnumber'
100 . ' FROM '.sql_table('skin_desc')
101 . ' WHERE sdname="'.sql_real_escape_string($name).'"';
102 $res = sql_query($query);
103 $obj = sql_fetch_object($res);
104 return $obj->sdnumber;
108 * Returns a skin shortname given its ID
109 * @param string $name
110 * @return string Skin short name
113 function getNameFromId($id) {
114 return quickQuery('SELECT sdname as result FROM '.sql_table('skin_desc').' WHERE sdnumber=' . intval($id));
118 * Creates a new skin, with the given characteristics.
122 function createNew($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '') {
127 'description' => &$desc,
129 'includeMode' => &$includeMode,
130 'includePrefix' => &$includePrefix
132 $manager->notify('PreAddSkin', $param);
134 sql_query('INSERT INTO '.sql_table('skin_desc')." (sdname, sddesc, sdtype, sdincmode, sdincpref) VALUES ('" . sql_real_escape_string($name) . "','" . sql_real_escape_string($desc) . "','".sql_real_escape_string($type)."','".sql_real_escape_string($includeMode)."','".sql_real_escape_string($includePrefix)."')");
135 $newid = sql_insert_id();
140 'description' => $desc,
142 'includeMode' => $includeMode,
143 'includePrefix' => $includePrefix
145 $manager->notify('PostAddSkin', $param);
150 function parse($type) {
151 global $manager, $CONF, $skinid;
157 $manager->notify('InitSkinParse', $param);
161 sendContentType($this->getContentType(), 'skin', _CHARSET);
163 // set skin name as global var (so plugins can access it)
164 global $currentSkinName;
165 $currentSkinName = $this->getName();
167 $contents = $this->getContent($type);
170 // use base skin if this skin does not have contents
171 $defskin = new SKIN($CONF['BaseSkin']);
172 $contents = $defskin->getContent($type);
179 $actions = $this->getAllowedActionsForType($type);
184 'contents' => &$contents
186 $manager->notify('PreSkinParse', $param);
189 // set IncludeMode properties of parser
190 PARSER::setProperty('IncludeMode',$this->getIncludeMode());
191 PARSER::setProperty('IncludePrefix',$this->getIncludePrefix());
193 $handler = new ACTIONS($type, $this);
194 $parser = new PARSER($actions, $handler);
195 $handler->setParser($parser);
196 $handler->setSkin($this);
197 $parser->parse($contents);
203 $manager->notify('PostSkinParse', $param);
209 function getContent($type) {
210 $query = 'SELECT scontent FROM '.sql_table('skin')." WHERE sdesc=$this->id and stype='". sql_real_escape_string($type) ."'";
211 $res = sql_query($query);
213 if (sql_num_rows($res) == 0)
216 return sql_result($res, 0, 0);
220 * Updates the contents of one part of the skin
222 function update($type, $content) {
225 // delete old thingie
226 sql_query('DELETE FROM '.sql_table('skin')." WHERE stype='".sql_real_escape_string($type)."' and sdesc=" . intval($skinid));
230 sql_query('INSERT INTO '.sql_table('skin')." SET scontent='" . sql_real_escape_string($content) . "', stype='" . sql_real_escape_string($type) . "', sdesc=" . intval($skinid));
235 * Deletes all skin parts from the database
237 function deleteAllParts() {
238 sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc='.$this->getID());
242 * Updates the general information about the skin
244 function updateGeneralInfo($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '') {
245 $query = 'UPDATE '.sql_table('skin_desc').' SET'
246 . " sdname='" . sql_real_escape_string($name) . "',"
247 . " sddesc='" . sql_real_escape_string($desc) . "',"
248 . " sdtype='" . sql_real_escape_string($type) . "',"
249 . " sdincmode='" . sql_real_escape_string($includeMode) . "',"
250 . " sdincpref='" . sql_real_escape_string($includePrefix) . "'"
251 . " WHERE sdnumber=" . $this->getID();
256 * static: returns an array of friendly names
258 function getFriendlyNames() {
260 'index' => _SKIN_PART_MAIN,
261 'item' => _SKIN_PART_ITEM,
262 'archivelist' => _SKIN_PART_ALIST,
263 'archive' => _SKIN_PART_ARCHIVE,
264 'search' => _SKIN_PART_SEARCH,
265 'error' => _SKIN_PART_ERROR,
266 'member' => _SKIN_PART_MEMBER,
267 'imagepopup' => _SKIN_PART_POPUP
270 $query = "SELECT stype FROM " . sql_table('skin') . " WHERE stype NOT IN ('index', 'item', 'error', 'search', 'archive', 'archivelist', 'imagepopup', 'member')";
271 $res = sql_query($query);
272 while ($row = sql_fetch_array($res)) {
273 $skintypes[strtolower($row['stype'])] = ucfirst($row['stype']);
279 function getAllowedActionsForType($type) {
282 // some actions that can be performed at any time, from anywhere
283 $defaultActions = array('otherblog',
293 'otherarchivedaylist',
294 'otherarchiveyearlist',
300 'ifcat', // deprecated (Nucleus v2.0)
320 // extra actions specific for a certain skin type
321 $extraActions = array();
325 $extraActions = array('blog',
338 $extraActions = array('blog',
355 $extraActions = array('blog',
364 $extraActions = array('blog',
370 'othersearchresults',
378 $extraActions = array('image',
379 'imagetext', // deprecated (Nucleus v2.0)
383 $extraActions = array(
391 $extraActions = array('blog',
413 $extraActions = array(
419 if ($blogid && $blogid > 0) {
420 $extraActions = array(
439 return array_merge($defaultActions, $extraActions);