Dragonfly CMS logo Server sponsored and hosted by
DedicatedNOW
CVS logo  
.:: Home :: Dev. Resources :: Forums ::.
Dragonfly CMS CVS Repository
 Location: / cvs / html / includes / classes / installer_module.php
This is a web interface to the Dragonfly CMS CVS tree. You can browse the file hierarchy by picking directories. If you pick a file, you will see the revision history for that file.
Selecting a revision number will show that revision of the file. There are links at each revision to display diffs, annotate and download.
Note: Info about CVS and our commits can be found at our CVS Info Forum
File name: html/includes/classes/installer_module.php
Revision : 10.7 (2 years 1 weeks 3 days 4 hours 36 minutes 58 seconds ago) by nanocaiordo
Changed : +6 -13 lines
Comment: Modules upgrades used to fail because of duplicate code.


# Author Rev Line
1 nanocaio 1.1 <?php
2 nanocaio 1.1 /*********************************************
3 nanocaio 1.1 Dragonfly CMS, Copyright (c) 2004 by DragonflyCMS Dev. Team.
4 nanocaio 1.1 http://dragonflycms.org
5 nanocaio 1.1  
6 nanocaio 1.1 Dragonfly is released under the terms and conditions
7 nanocaio 1.1 of the GNU GPL version 2 or any later version
8 nanocaio 1.1  
9 nanocaio 1.2 $Source: /cvs/html/includes/classes/installer_module.php,v $
10 nanocaio 10.7 $Revision: 10.6 $
11 nanocaio 10.7 $Author: nanocaiordo $
12 nanocaio 10.7 $Date: 2012/03/26 01:32:50 $
13 nanocaio 1.1 **********************************************/
14 nanocaio 1.1  
15 nanocaio 10.2 class Installer_Module extends Installer
16 nanocaio 1.1 {
17 nanocaio 1.1  
18 nanocaio 10.2 public $error;
19 nanocaio 10.2  
20 nanocaio 10.2 protected $module;
21 nanocaio 10.2 protected $id;
22 nanocaio 10.2 protected $name;
23 nanocaio 10.2 protected $path;
24 nanocaio 10.2  
25 nanocaio 10.2 public function __construct($name, $bypass=false)
26 nanocaio 1.2 {
27 nanocaio 10.2 if (!preg_match('#^[a-z0-9_\-]+$#i', $name)) {
28 nanocaio 10.2 return trigger_error('Module install error', E_USER_);
29 nanocaio 1.1 }
30 nanocaio 10.2 $this->path = MODULE_PATH.$name.DS.'install'.DS;
31 nanocaio 10.2 if (is_file($this->path .'cpg_inst.php')) {
32 nanocaio 10.2 require($this->path .'cpg_inst.php');
33 nanocaio 10.2 if (!class_exists($name)) {
34 nanocaio 10.2 $this->error = 'Cannot continue, mismatch between module name and installer class name.';
35 nanocaio 10.2 return;
36 nanocaio 10.2 }
37 nanocaio 10.2 } else {
38 nanocaio 10.2 $this->error = 'Cannot continue, module installer is missing.';
39 nanocaio 10.2 return;
40 nanocaio 10.2 }
41 nanocaio 10.2 parent::__construct($bypass);
42 nanocaio 10.2 $this->name = $name;
43 nanocaio 10.2 $this->module = new $name();
44 nanocaio 10.2 if (!$this->bypass && isset($this->module->bypass)) { $this->bypass = $this->module->bypass; }
45 nanocaio 10.2 if (!$this->test && isset($this->module->test)) { $this->test = $this->module->test; }
46 nanocaio 10.2 return true;
47 nanocaio 10.2 }
48 nanocaio 10.2  
49 nanocaio 10.2 public function add_module()
50 nanocaio 10.2 {
51 nanocaio 10.2 global $db, $prefix;
52 nanocaio 10.2 try {
53 nanocaio 10.2 $db->begin();
54 nanocaio 10.4 $this->module->pre_install() && $this->module->exec();
55 nanocaio 10.2 if (false === $this->sync_from_file('schema')) {
56 nanocaio 10.2 return;
57 nanocaio 1.1 }
58 nanocaio 10.2 $db->commit();
59 nanocaio 10.2 $db->begin();
60 nanocaio 10.2 if (false === $this->sync_from_file('data')) {
61 nanocaio 10.2 return;
62 nanocaio 10.2 }
63 nanocaio 10.2 $this->id = $db->insert('modules', array('title'=>$this->name, 'uninstall'=>1, 'version'=>$this->module->version), 'mid');
64 nanocaio 10.2 $this->sync_config() || $this->sync_radmin() || $this->sync_blocks() || $this->sync_userconfig();
65 nanocaio 10.4 $this->exec() && $this->module->post_install() && $this->module->exec();
66 nanocaio 10.2 $db->commit();
67 nanocaio 10.2 } catch (Poodle_SQL_Exception $e) {
68 nanocaio 10.7 $this->error = $e->__tostring();
69 nanocaio 10.2 $this->rollback();
70 nanocaio 10.4 $this->module->rollback();
71 nanocaio 10.2 $db->query("DELETE FROM {$prefix}_modules WHERE title='{$this->name}'");
72 nanocaio 10.2 return;
73 nanocaio 1.1 }
74 nanocaio 10.2 return true;
75 nanocaio 10.2 }
76 nanocaio 10.2  
77 nanocaio 10.2 public function upgrade_module($prev_version)
78 nanocaio 10.2 {
79 nanocaio 10.2 global $db, $prefix;
80 nanocaio 10.2 try {
81 nanocaio 10.2 $db->begin();
82 nanocaio 10.4 $this->module->pre_upgrade($prev_version) && $this->module->exec();
83 nanocaio 10.6 if (false === $this->sync_from_file('data')) {
84 nanocaio 10.6 return;
85 nanocaio 10.6 }
86 nanocaio 10.6 $db->commit();
87 nanocaio 10.6  
88 nanocaio 10.2 $db->begin();
89 nanocaio 10.2 $this->sync_config() || $this->sync_radmin() || $this->sync_userconfig();
90 nanocaio 10.4 $this->exec() && $this->module->post_upgrade($prev_version) && $this->module->exec();
91 nanocaio 10.2 $db->query('UPDATE '.$prefix."_modules SET version='".$this->module->version."' WHERE title='{$this->name}'");
92 nanocaio 10.2 $db->commit();
93 nanocaio 10.2 } catch (Poodle_SQL_Exception $e) {
94 nanocaio 10.7 $this->error = $e->__tostring();
95 nanocaio 10.2 $this->rollback();
96 nanocaio 10.4 $this->module->rollback();
97 nanocaio 10.2 $db->query('UPDATE '.$prefix."_modules SET version='".$prev_version."' WHERE title='{$this->name}'");
98 nanocaio 10.2 return;
99 nanocaio 10.2 }
100 nanocaio 10.2 return true;
101 nanocaio 10.2 }
102 nanocaio 10.2  
103 nanocaio 10.2 public function remove_module()
104 nanocaio 10.2 {
105 nanocaio 10.2 global $db, $prefix, $CPG_SESS;
106 nanocaio 10.2 $CPG_SESS['admin']['uninstall'] = '';
107 nanocaio 10.2 unset($CPG_SESS['admin']['uninstall']);
108 nanocaio 10.2 try {
109 nanocaio 10.2 $db->begin();
110 nanocaio 10.4 $this->module->pre_uninstall() && $this->module->exec();
111 nanocaio 10.3 foreach ($this->module->dbtables as $table) {
112 nanocaio 10.2 $this->add_query('DROP', $table);
113 nanocaio 1.2 }
114 nanocaio 10.2 if ($this->module->config) {
115 nanocaio 10.2 $this->add_query('DELETE', 'config_custom', "cfg_name='".strtolower($this->name)."'");
116 nanocaio 10.2 }
117 nanocaio 10.2 if ($this->module->radmin) {
118 nanocaio 10.2 $this->drop_radmin('radmin'.strtolower($this->name));
119 nanocaio 10.2 }
120 nanocaio 10.2 $this->exec();
121 nanocaio 10.2 if ($this->id = $db->sql_fetchrow($db->sql_query('SELECT mid FROM '.$prefix."_modules WHERE title='{$this->name}'"))) {
122 nanocaio 10.2 $this->id = $this->id[0];
123 nanocaio 10.2 $db->query('DELETE FROM '.$prefix.'_blocks_custom WHERE mid='.$this->id);
124 nanocaio 10.2 }
125 nanocaio 10.2 $db->query('DELETE FROM '.$prefix."_modules WHERE title='{$this->name}'");
126 nanocaio 10.2 $db->commit();
127 nanocaio 10.4 $this->module->post_uninstall() && $this->module->exec();
128 nanocaio 10.2 $db->optimize('modules');
129 nanocaio 10.2 if ($this->module->config) { $db->optimize('config_custom'); }
130 nanocaio 10.2 if ($this->module->blocks) { $db->optimize('blocks_custom'); }
131 nanocaio 10.2 } catch (Poodle_SQL_Exception $e) {
132 nanocaio 10.7 $this->error = $e->__tostring();
133 nanocaio 10.2 $this->rollback();
134 nanocaio 10.4 $this->module->rollback();
135 nanocaio 10.4 $this->rollback();
136 nanocaio 10.2 return;
137 nanocaio 1.2 }
138 nanocaio 10.2 return true;
139 nanocaio 1.1 }
140 nanocaio 1.1  
141 nanocaio 10.2 public function sync_from_file($file)
142 nanocaio 1.2 {
143 nanocaio 10.2 global $db;
144 nanocaio 10.2 if ('schema' !== $file && 'data' !== $file) return;
145 nanocaio 10.2 if (!is_file($this->path .$file .'.xml')) return;
146 djmaze 10.5 if ($db->XML->syncSchemaFromFile($this->path .$file .'.xml')) {
147 nanocaio 10.2 foreach ($db->XML->queries as $query) {
148 nanocaio 10.2 $db->query($query);
149 nanocaio 10.2 }
150 nanocaio 10.2 } else {
151 nanocaio 10.2 $this->error = print_r('<pre>'.$db->XML->errors.'</pre>', true);
152 nanocaio 10.2 return false;
153 nanocaio 1.1 }
154 nanocaio 10.2 return true;
155 nanocaio 10.2 }
156 nanocaio 10.2  
157 nanocaio 10.2 public function sync_config() {
158 nanocaio 10.2 global $db, $prefix;
159 nanocaio 10.4 if (!empty($this->module->config) && is_array($this->module->config)) {
160 nanocaio 10.2 $sql = array();
161 nanocaio 10.2 foreach ($this->module->config as $field => $value) {
162 nanocaio 10.2 if (preg_match('#^[a-z0-9_\-]+$#i', $field)) {
163 nanocaio 10.2 $sql[] = "('{$this->name}', '{$field}', ".$db->quote($value).")";
164 nanocaio 10.2 }
165 nanocaio 1.1 }
166 nanocaio 10.2 $this->add_query(
167 nanocaio 10.2 'INSERT_MULTIPLE',
168 nanocaio 10.2 'config_custom',
169 nanocaio 10.2 array (
170 nanocaio 10.2 'cfg_name, cfg_field, cfg_value',
171 nanocaio 10.2 implode(',', $sql)
172 nanocaio 10.2 ),
173 nanocaio 10.2 "cfg_name='{$this->name}'"
174 nanocaio 10.2 );
175 nanocaio 1.1 }
176 nanocaio 1.1 }
177 nanocaio 1.2  
178 nanocaio 10.2 public function sync_radmin() {
179 nanocaio 10.2 $radmin = 'radmin' .strtolower($this->name);
180 nanocaio 10.3 if (isset($this->module->radmin) && $this->module->radmin && !isset($_SESSION['CPG_ADMIN'][$radmin])) {
181 nanocaio 10.2 $this->add_radmin($radmin);
182 nanocaio 10.3 } elseif ((!isset($this->module->radmin) || !$this->module->radmin) && isset($_SESSION['CPG_ADMIN'][$radmin])) {
183 nanocaio 10.2 $this->drop_radmin($radmin);
184 nanocaio 10.2 }
185 nanocaio 10.2 }
186 djmaze 10.5  
187 nanocaio 10.3 private function add_radmin($radmin)
188 nanocaio 1.3 {
189 nanocaio 10.2 $this->add_query('ADD', 'admins', array($radmin, 'INT1(1)', false, 0));
190 nanocaio 10.2 unset($_SESSION['CPG_ADMIN']);
191 nanocaio 10.2 }
192 djmaze 10.5  
193 nanocaio 10.3 private function drop_radmin($radmin)
194 nanocaio 10.2 {
195 nanocaio 10.2 $this->add_query('DEL', 'admins', $radmin, array($radmin, 'INT1(1)', false, 0));
196 nanocaio 10.2 unset($_SESSION['CPG_ADMIN']);
197 nanocaio 10.2 }
198 nanocaio 10.2  
199 nanocaio 10.2 public function sync_blocks() {
200 nanocaio 10.2 global $db, $prefix;
201 nanocaio 10.3 if (isset($this->module->blocks) && $this->module->blocks) {
202 nanocaio 10.2 $result = $db->query('SELECT bid, bposition FROM '.$prefix.'_blocks WHERE active=1');
203 nanocaio 10.2 if ($result->num_rows) {
204 nanocaio 10.2 $in_modules = array();
205 nanocaio 10.2 $l = $c = $r = $d = 1;
206 nanocaio 10.2 while ($row = $result->fetch_row()) {
207 nanocaio 10.2 $in_modules[] = "({$row[0]}, {$this->id}, '{$row[1]}', ".$$row[1].")";
208 nanocaio 10.2 ++$$row[1];
209 nanocaio 10.2 }
210 nanocaio 10.2 $this->add_query(
211 nanocaio 10.2 'INSERT_MULTIPLE',
212 nanocaio 10.2 'blocks_custom',
213 nanocaio 10.2 array (
214 nanocaio 10.2 'bid, mid, side, weight',
215 nanocaio 10.2 implode(',', $in_modules)
216 nanocaio 10.2 ),
217 nanocaio 10.2 'mid='.$this->id
218 nanocaio 10.2 );
219 nanocaio 10.2 }
220 nanocaio 10.2 $result->free();
221 nanocaio 1.3 }
222 nanocaio 10.2 }
223 nanocaio 10.2  
224 nanocaio 10.2 public function sync_userconfig() {
225 nanocaio 10.4 if (!empty($this->module->userconfig) && is_array($this->module->userconfig)) {}
226 nanocaio 1.3 }
227 nanocaio 1.3  
228 nanocaio 1.2 public function __get($key)
229 nanocaio 1.2 {
230 nanocaio 10.2 $allowed = array('radmin', 'version', 'name', 'description', 'author', 'website');
231 nanocaio 1.1 if (in_array($key, $allowed)) { return $this->$key; }
232 nanocaio 1.1  
233 nanocaio 1.1 }
234 djmaze 10.5 }


Code Credits - Privacy Policy