3 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
4 * Copyright (C) 2002-2009 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-2009 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="'.addslashes($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="'.addslashes($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 = '') {
129 'description' => &$desc,
131 'includeMode' => &$includeMode,
132 'includePrefix' => &$includePrefix
136 sql_query('INSERT INTO '.sql_table('skin_desc')." (sdname, sddesc, sdtype, sdincmode, sdincpref) VALUES ('" . addslashes($name) . "','" . addslashes($desc) . "','".addslashes($type)."','".addslashes($includeMode)."','".addslashes($includePrefix)."')");
137 $newid = sql_insert_id();
144 'description' => $desc,
146 'includeMode' => $includeMode,
147 'includePrefix' => $includePrefix
154 function parse($type) {
155 global $manager, $CONF, $skinid;
157 $manager->notify('InitSkinParse',array('skin' => &$this, 'type' => $type));
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);
181 $manager->notify('PreSkinParse',array('skin' => &$this, 'type' => $type, 'contents' => &$contents));
184 // set IncludeMode properties of parser
185 PARSER::setProperty('IncludeMode',$this->getIncludeMode());
186 PARSER::setProperty('IncludePrefix',$this->getIncludePrefix());
188 $handler =& new ACTIONS($type, $this);
189 $parser =& new PARSER($actions, $handler);
190 $handler->setParser($parser);
191 $handler->setSkin($this);
192 $parser->parse($contents);
194 $manager->notify('PostSkinParse',array('skin' => &$this, 'type' => $type));
200 function getContent($type) {
201 $query = 'SELECT scontent FROM '.sql_table('skin')." WHERE sdesc=$this->id and stype='". addslashes($type) ."'";
202 $res = sql_query($query);
204 if (sql_num_rows($res) == 0)
207 return sql_result($res, 0, 0);
211 * Updates the contents of one part of the skin
213 function update($type, $content) {
216 // delete old thingie
217 sql_query('DELETE FROM '.sql_table('skin')." WHERE stype='".addslashes($type)."' and sdesc=" . intval($skinid));
221 sql_query('INSERT INTO '.sql_table('skin')." SET scontent='" . addslashes($content) . "', stype='" . addslashes($type) . "', sdesc=" . intval($skinid));
226 * Deletes all skin parts from the database
228 function deleteAllParts() {
229 sql_query('DELETE FROM '.sql_table('skin').' WHERE sdesc='.$this->getID());
233 * Updates the general information about the skin
235 function updateGeneralInfo($name, $desc, $type = 'text/html', $includeMode = 'normal', $includePrefix = '') {
236 $query = 'UPDATE '.sql_table('skin_desc').' SET'
237 . " sdname='" . addslashes($name) . "',"
238 . " sddesc='" . addslashes($desc) . "',"
239 . " sdtype='" . addslashes($type) . "',"
240 . " sdincmode='" . addslashes($includeMode) . "',"
241 . " sdincpref='" . addslashes($includePrefix) . "'"
242 . " WHERE sdnumber=" . $this->getID();
247 * static: returns an array of friendly names
249 function getFriendlyNames() {
251 'index' => _SKIN_PART_MAIN,
252 'item' => _SKIN_PART_ITEM,
253 'archivelist' => _SKIN_PART_ALIST,
254 'archive' => _SKIN_PART_ARCHIVE,
255 'search' => _SKIN_PART_SEARCH,
256 'error' => _SKIN_PART_ERROR,
257 'member' => _SKIN_PART_MEMBER,
258 'imagepopup' => _SKIN_PART_POPUP
261 $query = "SELECT stype FROM " . sql_table('skin') . " WHERE stype NOT IN ('index', 'item', 'error', 'search', 'archive', 'archivelist', 'imagepopup', 'member')";
262 $res = sql_query($query);
263 while ($row = sql_fetch_array($res)) {
264 $skintypes[strtolower($row['stype'])] = ucfirst($row['stype']);
270 function getAllowedActionsForType($type) {
273 // some actions that can be performed at any time, from anywhere
274 $defaultActions = array('otherblog',
284 'otherarchivedaylist',
285 'otherarchiveyearlist',
291 'ifcat', // deprecated (Nucleus v2.0)
311 // extra actions specific for a certain skin type
312 $extraActions = array();
316 $extraActions = array('blog',
329 $extraActions = array('blog',
346 $extraActions = array('blog',
355 $extraActions = array('blog',
361 'othersearchresults',
369 $extraActions = array('image',
370 'imagetext', // deprecated (Nucleus v2.0)
374 $extraActions = array(
381 $extraActions = array('blog',
403 $extraActions = array(
408 if ($blogid && $blogid > 0) {
409 $extraActions = array(
427 return array_merge($defaultActions, $extraActions);