OSDN Git Service

git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/plugin@882 1ca29b6e-896d...
[nucleus-jp/nucleus-plugins.git] / NP_UpdatePingServer / trunk / updatepingserver / modules / moduleAdmin.php
1 <?php
2
3 class moduleAdmin// extends NP_UpdatePingServer
4 {
5
6 var $myPlugin;
7 var $modules;
8 var $moduleList;
9 var $plugin_name;
10
11         function moduleAdmin ($plugin_name)
12         {
13                 global $manager;
14                 
15                 $this->myPlugin    =& $manager->getPlugin('NP_' . $plugin_name);
16                 $this->plugin_name =  $plugin_name;
17                 $this->getModuleList();
18         }
19
20         function &getPlugin()
21         {
22                 return $this->myPlugin;
23         }
24
25         function getModuleDir()
26         {
27                 return $this->myPlugin->getDirectory() . 'modules/';
28         }
29
30         function getModulePrefix()
31         {
32                 return $this->plugin_name . 'Module_';
33         }
34
35         function getModuleTable()
36         {
37                 return sql_table('plug_' . $this->getModuleTablePrefix() . '_modules');
38         }
39
40         function getModuleTablePrefix()
41         {
42                 return $this->myPlugin->getShortName();
43         }
44
45         function _loadModule($name) {
46                 $moduleClass = $this->getModulePrefix() . $name;
47                 if (!class_exists($moduleClass)) {
48                         $moduleFile  = $this->getModuleDir() .$moduleClass . '.php';
49                         if (!file_exists($moduleFile)) {
50                                 $errmsg = 'Module ' . $name . ' was not loaded (File not found)';
51                                 ACTIONLOG::add(WARNING, $errmsg);
52                                 return 0;
53                         }
54                         include($moduleFile);
55                         if (!class_exists($moduleClass)) {
56                                 $errmsg = 'Module ' . $name . ' was not loaded (Class not found in file, possible parse error)';
57                                 ACTIONLOG::add(WARNING, $errmsg);
58                                 return 0;
59                         }
60                         eval('$this->modules[$name] =& new ' . $moduleClass . '();');
61                         $this->modules[$name]->initModule($this->myPlugin);
62                         return;
63                 }
64                 $this->modules[$name] = false;
65         }
66
67         function &getModule($name) {
68                 $module =& $this->modules[$name];
69
70                 if (!$module) {
71                         // load class if needed
72                         $this->_loadModule($name);
73                         $module =& $this->modules[$name];
74                 }
75                 return $module;
76         }
77
78         function getModuleOrder($name)
79         {
80                 $sharedFunctions = new sharedFunctions();
81                 $query  = 'SELECT '
82                                 . '      moduleorder as result '
83                                 . 'FROM '
84                                 .        $this->getModuleTable()
85                                 . ' WHERE '
86                                 . '      modulename = ' . $sharedFunctions->quoteSmart($name);
87                 return quickQuery($query);
88         }
89
90         function getModuleList()
91         {
92                 $this->moduleList = array();
93
94                 $query  = 'SELECT '
95                                 . '      modulename '
96                                 . 'FROM '
97                                 .        $this->getModuleTable()
98                                 . ' ORDER BY '
99                                 . '      moduleorder ASC';
100                 $result = sql_query($query);
101                 while ($o = mysql_fetch_object($result)) {
102                         $moduleName  = $o->modulename;
103                         $moduleClass = $this->getModulePrefix() . $moduleName;
104                         $moduleFile  = $this->getModuleDir() . $moduleClass . '.php';
105                         if (file_exists($moduleFile)) {
106                                 $this->moduleList[] = $moduleName;
107                         }
108                 }
109 //      return $this->moduleList;
110         }
111
112         function checkModule($moduleName)
113         {
114                 $moduleClass = $this->getModulePrefix() . $moduleName;
115                 $moduleFile  = $this->getModuleDir() . $moduleClass . '.php';
116                 return file_exists($moduleFile);
117         }
118
119         function _moduleInstall($moduleName)
120         {
121                 $sharedFunctions = new sharedFunctions();
122
123                 $query = 'SELECT '
124                            . '      COUNT(moduleid) as result '
125                            . 'FROM '
126                            .        $this->getModuleTable();
127                 $mods  = quickQuery($query);
128                 $order = $mods + 1;
129                 $query = 'INSERT INTO '
130                            .        $this->getModuleTable()
131                            . '     ('
132                            . '      moduleorder, '
133                            . '      modulename'
134                            . '     ) '
135                            . 'VALUES '
136                            . '     ('
137                            .        $order . ', '
138                            .        $sharedFunctions->quoteSmart($moduleName)
139                            . '     )';
140                 sql_query($query);
141                 $modId = mysql_insert_id();
142
143                 $module =& $this->getModule($moduleName);
144                 if (!$module) {
145                         $query = 'DELETE FROM '
146                                    .        $this->getModuleTable()
147                                    . ' WHERE '
148                                    . '      moduleid = ' . intval($modId);
149                         sql_query($query);
150                         $this->error(_NP_PINGSERVER_ERROR_MODNOTLOADED);
151                 }
152                 $module->initModule($this->myPlugin);
153                 if (method_exists($module, 'installModule')) {
154                         $module->installModule();
155                 }
156         }
157
158         function _moduleUnInstall($moduleName)
159         {
160                 $sharedFunctions = new sharedFunctions();
161
162                 if (!$this->checkModule($moduleName)) {
163                         $this->error(_NP_PINGSERVER_ERROR_MODFILEERROR . ' (' . $moduleName . ')');
164                 }
165                 $module =& $this->getModule($moduleName);
166                 $module->initModule($this->myPlugin);
167                 if (method_exists($module, 'uninstall')) {
168                         $module->uninstall();
169                 }
170                 $query = 'DELETE FROM '
171                            .        $this->getModuleTable()
172                            . ' WHERE '
173                            . '      modulename = ' . $sharedFunctions->quoteSmart($moduleName);
174                 sql_query($query);
175         }
176
177         function error($msg)
178         {
179                 $this->p_admin->start();
180
181                 $dir=$this->plugin->getAdminURL();
182                 ?>
183                 <h2>Error!</h2>
184                 <?php           echo htmlspecialchars($msg);
185                 echo "<br />";
186                 echo "<a href='".$dir."index.php' onclick='history.back()'>"._BACK."</a>";
187                 
188                 $this->p_admin->end();
189                 exit;
190         }
191
192
193
194
195 }
196
197