OSDN Git Service

3c07861dfdf9ae58d08f99f083b37c75983037a4
[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                 /*
189                  * TODO: this is appropriate or not?
190                  */
191                 if ( array_key_exists('LOCALE', $template) && !empty($template['LOCALE']) )
192                 {
193                         setlocale(LC_TIME, $template['LOCALE']);
194                 }
195                 else
196                 {
197                         setlocale(LC_TIME,'');
198                 }
199                 
200                 return $template;
201         }
202         
203         /**
204          * fills a template with values
205          * 
206          * @static
207          * @param       string  $template       Template to be used
208          * @param       array   $values         Array of all the values
209          * @return      string  string filled with tag contents
210          */
211         static public function fill($template, $values)
212         {
213                 
214                 if ( sizeof($values) != 0 )
215                 {
216                         foreach ( $values as $key => $value )
217                         {
218                                 $template = preg_replace('#<%' . preg_quote($key, '#') . '%>#', $value, $template);
219                         }
220                 }
221                 
222                 // remove non matched template-tags
223                 return preg_replace('#<%([a-zA-Z]+)?%>#', '', $template);
224         }
225         
226         /**
227          * Template::exists()
228          * returns true if there is a template with the given shortname
229          * 
230          * @static
231          * @param       string  $name   template name
232          * @return      boolean exists or not
233          */
234         static public function exists($name)
235         {
236                 $query = "SELECT * FROM %s WHERE tdname=%s";
237                 $query = sprintf($query, sql_table('template_desc'), DB::quoteValue($name));
238                 $r = DB::getResult($query);
239                 return ($r->rowCount() != 0);
240         }
241         
242         /**
243          * Template::existsID()
244          * returns true if there is a template with the given ID
245          * 
246          * @static
247          * @param       integer $id     id for template
248          * @return      bookean exists or not
249          */
250         static public function existsID($id)
251         {
252                 $query = "SELECT * FROM %s WHERE tdnumber=%d";
253                 $query = sprintf($query, sql_table('template_desc'), (integer) $id);
254                 $r = DB::getResult($query);
255                 return ($r->rowCount() != 0);
256         }
257         
258         /**
259          * Template::getNameFromId()
260          * 
261          * @static
262          * @param       integer $id     id for template
263          * @return      object  sql object
264          */
265         static public function getNameFromId($id)
266         {
267                 $query = "SELECT tdname as result FROM %s WHERE tdnumber=%d";
268                 $query = sprintf($query, sql_table('template_desc'), (integer) $id);
269                 return DB::getValue($query);
270         }
271         
272         /**
273          * Template::getDesc()
274          * 
275          * @static
276          * @param       integer $id     id for template
277          * @return      string  description for the template
278          */
279         static public function getDesc($id)
280         {
281                 $query = "SELECT tddesc FROM %s WHERE tdnumber=%d";
282                 $query = sprintf($query, sql_table('template_desc'), (integer) $id);
283                 return DB::getValue($query);
284         }
285 }