OSDN Git Service

MERGE: リビジョン1991。Adminクラスにおける<%skinfile%>の引数を修正
[nucleus-jp/nucleus-next.git] / nucleus / libs / TEMPLATE.php
1 <?php
2
3 /*
4  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
5  * Copyright (C) 2002-2009 The Nucleus Group
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  * (see nucleus/documentation/index.html#license for more info)
12  */
13 /**
14  * A class representing a template
15  *
16  * @license http://nucleuscms.org/license.txt GNU General Public License
17  * @copyright Copyright (C) 2002-2009 The Nucleus Group
18  * @version $Id: TEMPLATE.php 1880 2012-06-17 07:48:14Z sakamocchi $
19  */
20 class Template
21 {
22         /**
23          * Template::$id
24          */
25         private $id;
26         
27         /**
28          * Template::__construct()
29          * 
30          * @param       integer $templateid     id for template
31          * @return      void
32          */
33         public function __construct($templateid)
34         {
35                 $this->id = intval($templateid);
36                 return;
37         }
38         
39         /**
40          * Template::getID()
41          * 
42          * @param       void
43          * @return      integer id for this instance of Template class
44          */
45         public function getID()
46         {
47                 return (integer) $this->id;
48         }
49         
50         /**
51          * Template::createFromName()
52          * 
53          * @statc
54          * @param       string  $name   template name
55          * @return      object  instance of Template class generated by the name
56          */
57         static public function createFromName($name)
58         {
59                 return new Template(Template::getIdFromName($name));
60         }
61         
62         /**
63          * Template::getIdFromName()
64          * 
65          * @static
66          * @param       string  $name   template name
67          * @return      integer id for the template
68          */
69         static public function getIdFromName($name)
70         {
71                 $name = DB::quoteValue($name);
72                 $query = "SELECT tdnumber FROM %s WHERE tdname=%s";
73                 $query = sprintf($query, sql_table('template_desc'), $name);
74                 return DB::getValue($query);
75         }
76         
77         /**
78          * Template::updateGeneralInfo()
79          * Updates the general information about the template
80          * 
81          * @param       string  $name   template name
82          * @param       string  $desc   description for this template
83          * @return      void
84          */
85         public function updateGeneralInfo($name, $desc)
86         {
87                 $query =  "UPDATE %s SET tdname=%s, tddesc=%s WHERE tdnumber=%d";
88                 $query = sprintf($query, sql_table('template_desc'), DB::quoteValue($name), DB::quoteValue($desc), (integer) $this->getID());
89                 DB::execute($query);
90                 return;
91         }
92         
93         /**
94          * Template::update()
95          * Updates the contents of one part of the template
96          * 
97          * @param       String  $type   value for nucleus_template.tpartname
98          * @param       String  $content        value for nucleus_template.tcontent
99          * @return      Void
100          */
101         public function update($type, $content)
102         {
103                 // delete old thingie
104                 $query = "DELETE FROM %s WHERE tpartname=%s and tdesc=%d";
105                 $query = sprintf($query, sql_table('template'), DB::quoteValue($type), (integer) $this->getID());
106                 DB::execute($query);
107                 
108                 // write new thingie
109                 if ( $content )
110                 {
111                         $query = "INSERT INTO %s (tcontent, tpartname, tdesc) VALUES (%s, %s, %d)";
112                         $query = sprintf($query, sql_table('template'), DB::quoteValue($content), DB::quoteValue($type), (integer) $this->getID());
113                         DB::execute($query);
114                 }
115                 return;
116         }
117         
118         /**
119          * Template::deleteAllParts()
120          * Deletes all template parts from the database
121          * 
122          * @param       void
123          * @return      void
124          */
125         public function deleteAllParts()
126         {
127                 $query = "DELETE FROM %s WHERE tdesc=%d";
128                 $query = sprintf($query, sql_table('template'), (integer) $this->getID());
129                 DB::execute($query);
130                 return;
131         }
132         
133         /**
134          * Template::createNew()
135          * Creates a new template
136          *
137          * @static
138          * @param       string  $name   name for new template
139          * @param       string  $desc   description for new template
140          * @return      integer id for new template
141          */
142         static public function createNew($name, $desc)
143         {
144                 global $manager;
145
146                 $data = array(
147                         'name'                  => &$name,
148                         'description'   => &$desc
149                 );
150                 $manager->notify('PreAddTemplate', $data);
151                 
152                 DB::execute('INSERT INTO '.sql_table('template_desc').' (tdname, tddesc) VALUES (' . DB::quoteValue($name) . ',' . DB::quoteValue($desc) . ')');
153                 $newId = DB::getInsertId();
154
155                 $data = array(
156                         'templateid'    => $newId,
157                         'name'                  => $name,
158                         'description'   => $desc
159                 );
160                 $manager->notify('PostAddTemplate', $data);
161                 
162                 return $newId;
163         }
164         
165         /**
166          * Reads a template and returns an array with the parts.
167          *
168          * @static
169          * @param       string  $name name of the template file
170          * @return      array   template array
171          */
172         static public function read($name)
173         {
174                 global $manager;
175                 $data = array('template' => &$name);
176                 $manager->notify('PreTemplateRead', $data);
177                 
178                 $query = "SELECT tpartname, tcontent FROM %s, %s WHERE tdesc=tdnumber and tdname=%s";
179                 $query = sprintf($query, sql_table('template_desc'), sql_table('template'), DB::quoteValue($name));
180                 $res = DB::getResult($query);
181                 
182                 $template = array();
183                 foreach ( $res as $row )
184                 {
185                         $template[$row['tpartname']] = $row['tcontent'];
186                 }
187                 
188                 return $template;
189         }
190         
191         /**
192          * fills a template with values
193          * 
194          * @static
195          * @param       string  $template       Template to be used
196          * @param       array   $values         Array of all the values
197          * @return      string  string filled with tag contents
198          */
199         static public function fill($template, $values)
200         {
201                 
202                 if ( sizeof($values) != 0 )
203                 {
204                         foreach ( $values as $key => $value )
205                         {
206                                 $template = preg_replace('#<%' . preg_quote($key, '#') . '%>#', $value, $template);
207                         }
208                 }
209                 
210                 // remove non matched template-tags
211                 return preg_replace('#<%([a-zA-Z]+)?%>#', '', $template);
212         }
213         
214         /**
215          * Template::exists()
216          * returns true if there is a template with the given shortname
217          * 
218          * @static
219          * @param       string  $name   template name
220          * @return      boolean exists or not
221          */
222         static public function exists($name)
223         {
224                 $query = "SELECT * FROM %s WHERE tdname=%s";
225                 $query = sprintf($query, sql_table('template_desc'), DB::quoteValue($name));
226                 $r = DB::getResult($query);
227                 return ($r->rowCount() != 0);
228         }
229         
230         /**
231          * Template::existsID()
232          * returns true if there is a template with the given ID
233          * 
234          * @static
235          * @param       integer $id     id for template
236          * @return      bookean exists or not
237          */
238         static public function existsID($id)
239         {
240                 $query = "SELECT * FROM %s WHERE tdnumber=%d";
241                 $query = sprintf($query, sql_table('template_desc'), (integer) $id);
242                 $r = DB::getResult($query);
243                 return ($r->rowCount() != 0);
244         }
245         
246         /**
247          * Template::getNameFromId()
248          * 
249          * @static
250          * @param       integer $id     id for template
251          * @return      object  sql object
252          */
253         static public function getNameFromId($id)
254         {
255                 $query = "SELECT tdname as result FROM %s WHERE tdnumber=%d";
256                 $query = sprintf($query, sql_table('template_desc'), (integer) $id);
257                 return DB::getValue($query);
258         }
259         
260         /**
261          * Template::getDesc()
262          * 
263          * @static
264          * @param       integer $id     id for template
265          * @return      string  description for the template
266          */
267         static public function getDesc($id)
268         {
269                 $query = "SELECT tddesc FROM %s WHERE tdnumber=%d";
270                 $query = sprintf($query, sql_table('template_desc'), (integer) $id);
271                 return DB::getValue($query);
272         }
273 }