
Public Member Functions | |
| __construct ($xmlfile) | |
| install () | |
| removeComponent ($handler, $extension) | |
Protected Member Functions | |
| extensionExists ($extension) | |
| doPackageCode ($extension, $file, $class, $retro) | |
| createExtension () | |
| getXML ($properties) | |
| handleClasses ($extension) | |
| handleClassFiles ($classfiles, $extension, $side, $classRequired=false) | |
| putFilesInPlace ($extension) | |
| moveFiles ($files, $path, $subdir='') | |
| doQueries ($queries) | |
| doJQueries ($jqueries) | |
| createComponentMenu ($item, $name, $parent, $toplevel=false) | |
| install_component ($isUpgrade, $extension) | |
| install_module ($isUpgrade, $extension) | |
| install_mambot ($isUpgrade, $extension) | |
Protected Attributes | |
| $xmlfile = '' | |
| $xmlobject = null | |
| $here = '' | |
| $purifier = null | |
| $handler = null | |
Definition at line 96 of file aliroExtensionInstaller.php.
| aliroExtensionInstaller::__construct | ( | $ | xmlfile | ) |
Definition at line 108 of file aliroExtensionInstaller.php.
References $xmlfile, and aliroRequest::getInstance().
00108 { 00109 $this->xmlfile = $xmlfile; 00110 $this->xmlobject = new aliroXML; 00111 try { 00112 $this->xmlobject->loadFile($xmlfile); 00113 } catch (aliroXMLException $exception) { 00114 aliroRequest::getInstance()->setErrorMessage ($exception->getMessage(), _ALIRO_ERROR_FATAL); 00115 $this->xmlobject = null; 00116 } 00117 if ($this->xmlobject) { 00118 $this->here = dirname($xmlfile).'/'; 00119 $this->purifier = new HTMLPurifier; 00120 } 00121 }
| aliroExtensionInstaller::install | ( | ) |
Definition at line 123 of file aliroExtensionInstaller.php.
References createExtension(), doJQueries(), doPackageCode(), doQueries(), extensionExists(), aliroExtensionHandler::getExtensionTypeHandler(), aliroErrorRecorder::getInstance(), aliroRequest::getInstance(), aliroExtensionHandler::getInstance(), aliroFriendlyBase::getParam(), getXML(), handleClasses(), putFilesInPlace(), and T_().
00123 { 00124 if (!$this->xmlobject) return; 00125 try { 00126 $extension = $this->createExtension(); 00127 $isUpgrade = $this->getParam($_POST, 'upgrade') ? true : false; 00128 if ($this->extensionExists($extension)) { 00129 if (!$isUpgrade) throw new installerException (T_('cannot be installed - already present'), $extension); 00130 // Must be an upgrade, and $isUpgrade must be true 00131 aliroExtensionHandler::getInstance()->removeExtensions($extension->formalname, $isUpgrade); 00132 } 00133 elseif ($isUpgrade) throw new installerException (T_('cannot be upgraded - not presently installed'), $extension); 00134 $this->handler = aliroExtensionHandler::getExtensionTypeHandler($extension->type); 00135 if (!$this->handler) throw new installerException (sprintf(T_('cannot be installed - no handler for type %s'), $extension->type), $extension); 00136 if ('component' == $extension->type) $this->admin = 1; 00137 else $this->admin = $extension->admin; 00138 $extension->store(); 00139 $method = 'install_'.$extension->type; 00140 $this->putFilesInPlace($extension); 00141 $this->handleClasses($extension); 00142 if (!$isUpgrade) { 00143 $queries = $this->getXML('install->queries->query'); 00144 if ($queries) $this->doQueries($queries); 00145 $jqueries = $this->getXML('install->sql->file'); 00146 if ($jqueries) $this->doJQueries($jqueries); 00147 } 00148 if (method_exists($this, $method)) $this->$method($isUpgrade, $extension); 00149 if ($isUpgrade) { 00150 if ($upgradefile = $this->getXML('upgradefile')) { 00151 $this->doPackageCode ($extension, (string) $upgradefile, (string) $upgradefile['class'], 'com_upgrade'); 00152 } 00153 } 00154 else { 00155 if ($installfile = $this->getXML('installfile')) { 00156 $this->doPackageCode ($extension, (string) $installfile, (string) $installfile['class'], 'com_install'); 00157 } 00158 } 00159 $this->handler->clearCache(('component' != $extension->type)); 00160 aliroRequest::getInstance()->setErrorMessage (T_('Installation completed: ').$extension->description, _ALIRO_ERROR_INFORM); 00161 return true; 00162 } 00163 catch (installerException $exception) { 00164 aliroRequest::getInstance()->setErrorMessage (sprintf($exception->getMessage(), basename($this->xmlfile), $exception->extension->formalname), _ALIRO_ERROR_FATAL); 00165 } 00166 catch (databaseException $exception) { 00167 $message = sprintf(T_('Extension XML %s database error on %s at %s'), $this->xmlfile, date('Y-M-d'), date('H:i:s')); 00168 $errorkey = "SQL/{$exception->getCode()}/installer/$exception->dbname/{$exception->getMessage()}/$exception->sql"; 00169 aliroErrorRecorder::getInstance()->recordError($message, $errorkey, $message, $exception); 00170 aliroRequest::getInstance()->setErrorMessage ($message, _ALIRO_ERROR_SEVERE); 00171 } 00172 catch (xmlException $exception) { 00173 $message = $exception->getMessage(); 00174 aliroErrorRecorder::getInstance()->recordError($message, $message, $message, $exception); 00175 aliroRequest::getInstance()->setErrorMessage ($message, _ALIRO_ERROR_FATAL); 00176 } 00177 return false; 00178 }
| aliroExtensionInstaller::extensionExists | ( | $ | extension | ) | [protected] |
Definition at line 180 of file aliroExtensionInstaller.php.
References aliroExtensionHandler::getInstance().
Referenced by install().
00180 { 00181 return (aliroExtensionHandler::getInstance()->getExtensionByName($extension->formalname)) ? true : false; 00182 }
| aliroExtensionInstaller::doPackageCode | ( | $ | extension, | |
| $ | file, | |||
| $ | class, | |||
| $ | retro | |||
| ) | [protected] |
Definition at line 184 of file aliroExtensionInstaller.php.
References aliroErrorRecorder::getInstance(), aliroRequest::getInstance(), and T_().
Referenced by install(), and removeComponent().
00184 { 00185 if (false !== strpos($file, '..')) throw new installerException (sprintf(T_('file %s contains illegal ".."'), $file), $extension); 00186 $dofile = $this->handler->getClassPath($extension->formalname, 2).'/'.$file; 00187 if (is_file($dofile)) { 00188 try { 00189 if ($class) { 00190 require_once($dofile); 00191 new $class(); 00192 } 00193 else aliroRequest::getInstance()->invokeRetroCode($dofile, $retro); 00194 } 00195 catch (databaseException $exception) { 00196 $message = sprintf(T_('Extension XML %s database error on %s at %s'), $this->xmlfile, date('Y-M-d'), date('H:i:s')); 00197 $errorkey = "SQL/{$exception->getCode()}/installer/$exception->dbname/{$exception->getMessage()}/$exception->sql"; 00198 aliroErrorRecorder::getInstance()->recordError($message, $errorkey, $message, $exception); 00199 } 00200 } 00201 }
| aliroExtensionInstaller::createExtension | ( | ) | [protected] |
Definition at line 203 of file aliroExtensionInstaller.php.
Referenced by install().
00203 { 00204 $extension = new aliroExtension; 00205 $message = $extension->populateFromXML($this->xmlobject); 00206 if ($message) throw new installerException ($message, $extension); 00207 /* 00208 $extension->name = $this->purifier->purify((string) $this->getXML('name')); 00209 $extension->type = $this->xmlobject->baseAttribute('type'); 00210 if (!in_array($extension->type, $this->legalTypes)) throw new installerException (T_('has no valid type'), $extension); 00211 if ('plugin' == $extension->type) $extension->type = 'mambot'; 00212 $extension->formalname = $this->purifier->purify((string) $this->getXML('formalname'));; 00213 if (!$extension->formalname AND 'component' == strtolower($extension->type)) $extension->formalname = 'com_'.str_replace(' ', '', strtolower($extension->name)); 00214 if (!$extension->formalname) throw new installerException (T_('has no formal name'), $extension); 00215 // validate formalname 00216 $extension->admin = ('administrator' == $this->xmlobject->baseAttribute('client')) ? 2 : 1; 00217 if ('template' == $extension->type) { 00218 $currentDefault = aliroTemplateHandler::getInstance()->getDefaultTemplateProperty('formalname', $extension->admin); 00219 if (!$currentDefault OR $currentDefault == $extension->formalname) { 00220 $extension->default_template = '1'; 00221 } 00222 } 00223 $extension->author = $this->purifier->purify((string) $this->getXML('author')); 00224 $extension->version = $this->purifier->purify((string) $this->getXML('version')); 00225 $extension->date = $this->purifier->purify((string) $this->getXML('creationdate')); 00226 $extension->authoremail = $this->purifier->purify((string) $this->getXML('authoremail')); 00227 $extension->authorurl = $this->purifier->purify((string) $this->getXML('authorurl')); 00228 $extension->description = $this->purifier->purify((string) $this->getXML('description')); 00229 $extension->class = $this->xmlobject->baseAttribute('userclass'); 00230 $extension->adminclass = $this->xmlobject->baseAttribute('adminclass'); 00231 $extension->menuclass = $this->xmlobject->baseAttribute('menuclass'); 00232 $extension->timestamp = date('Y-m-d'); 00233 */ 00234 return $extension; 00235 }
| aliroExtensionInstaller::getXML | ( | $ | properties | ) | [protected] |
Definition at line 237 of file aliroExtensionInstaller.php.
Referenced by doJQueries(), handleClasses(), install(), install_component(), putFilesInPlace(), and removeComponent().
00237 { 00238 return is_null($this->xmlobject) ? null : $this->xmlobject->getXML($properties); 00239 }
| aliroExtensionInstaller::handleClasses | ( | $ | extension | ) | [protected] |
Definition at line 241 of file aliroExtensionInstaller.php.
References smartClassMapper::getInstance(), smartAdminClassMapper::getInstance(), getXML(), and handleClassFiles().
Referenced by install().
00241 { 00242 $side = $extension->admin & 2 ? 'admin' : 'user'; 00243 $classfiles = $this->getXML('files->filename'); 00244 $this->handleClassFiles ($classfiles, $extension, $side); 00245 $classfiles = $this->getXML('classfiles->filename'); 00246 $this->handleClassFiles ($classfiles, $extension, $side, true); 00247 if ('component' == $extension->type) { 00248 $classfiles = $this->getXML('administration->files->filename'); 00249 $this->handleClassFiles ($classfiles, $extension, 'admin'); 00250 $classfiles = $this->getXML('administration->classfiles->filename'); 00251 $this->handleClassFiles ($classfiles, $extension, 'admin', true); 00252 } 00253 smartAdminClassMapper::getInstance()->clearCache(); 00254 smartClassMapper::getInstance()->clearCache(); 00255 }
| aliroExtensionInstaller::handleClassFiles | ( | $ | classfiles, | |
| $ | extension, | |||
| $ | side, | |||
| $ | classRequired = false | |||
| ) | [protected] |
Definition at line 257 of file aliroExtensionInstaller.php.
References aliroRequest::getInstance(), aliroCoreDatabase::getInstance(), and T_().
Referenced by handleClasses().
00257 { 00258 if ($classfiles) { 00259 $database = aliroCoreDatabase::getInstance(); 00260 foreach ($classfiles as $classfile) { 00261 $classes = explode(',', (string) $classfile['classes']); 00262 $filename = (string) $classfile; 00263 $filedir = dirname($filename); 00264 $filemap = ('.' == $filedir ? '' : $filedir.'/').basename($filename, '.php'); 00265 foreach ($classes as $class) { 00266 $class = trim($class); 00267 if (!$class) { 00268 if ($classRequired) aliroRequest::getInstance()->setErrorMessage (sprintf(T_('Installer error: XML file %s for extension %s - filename %s has no valid classes attribute'), basename($this->xmlfile), $extension->formalname, $filename), _ALIRO_ERROR_SEVERE); 00269 continue; 00270 } 00271 $database->doSQL("INSERT INTO #__classmap VALUES (0, '$extension->type', '$extension->formalname', '$side', '$filemap', '$class')"); 00272 } 00273 } 00274 } 00275 }
| aliroExtensionInstaller::putFilesInPlace | ( | $ | extension | ) | [protected] |
Definition at line 277 of file aliroExtensionInstaller.php.
References aliroCoreDatabase::getInstance(), getXML(), moveFiles(), and T_().
Referenced by install().
00277 { 00278 $xmlfilename = basename($this->xmlfile); 00279 if (!$this->handler->createDirectory($extension->formalname, $extension->admin)) { 00280 throw new installerException (sprintf(T_('unable to create user directory for %s %s'), $extension->type, $extension->formalname), $extension); 00281 } 00282 $side = ($extension->admin & 2) ? 'admin' : 'user'; 00283 $dirpath = $this->handler->getPath($extension->formalname, $extension->admin); 00284 $classpath = $this->handler->getClassPath($extension->formalname, $extension->admin); 00285 $this->moveFiles($this->getXML('classfiles->filename'), $classpath); 00286 $this->moveFiles($this->getXML('files->filename'), $dirpath, $this->getXML('files->[folder]')); 00287 $this->moveFiles($this->getXML('images->filename'), $dirpath); 00288 $this->moveFiles($this->getXML('css->filename'), $dirpath); 00289 $this->moveFiles($this->getXML('media->filename'), $this->absolute_path.'/images/stories/'); 00290 if ('component' == $extension->type) { 00291 if (!$this->handler->createDirectory($extension->formalname, 2)) { 00292 throw new installerException (sprintf(T_('unable to create user directory for %s %s'), $extension->type, $extension->formalname), $extension); 00293 } 00294 $dirpath = $this->handler->getPath($extension->formalname, 2); 00295 $classpath = $this->handler->getClassPath($extension->formalname, 2); 00296 $this->moveFiles($this->getXML('administration->files->filename'), $dirpath, $this->getXML('administration->files->[folder]')); 00297 $this->moveFiles($this->getXML('administration->classfiles->filename'), $classpath); 00298 $this->moveFiles($this->getXML('administration->images->filename'), $dirpath); 00299 $this->moveFiles(array($this->getXML('installfile')), $classpath); 00300 $this->moveFiles(array($this->getXML('uninstallfile')), $classpath); 00301 $this->moveFiles(array($this->getXML('upgradefile')), $classpath); 00302 $this->moveFiles(array($xmlfilename), $this->handler->getXMLPath($extension->formalname, 2)); 00303 } 00304 $this->moveFiles(array($xmlfilename), $this->handler->getXMLPath($extension->formalname, $extension->admin)); 00305 aliroCoreDatabase::getInstance()->doSQL("UPDATE #__extensions SET xmlfile = '{$this->handler->getXMLRelativePath($extension->formalname, $extension->admin)}/{$xmlfilename}' WHERE formalname = '$extension->formalname'"); 00306 }
| aliroExtensionInstaller::moveFiles | ( | $ | files, | |
| $ | path, | |||
| $ | subdir = '' | |||
| ) | [protected] |
Definition at line 308 of file aliroExtensionInstaller.php.
References aliroFileManager::getInstance(), and T_().
Referenced by putFilesInPlace().
00308 { 00309 $fromdir = $subdir ? $this->here.$subdir.'/' : $this->here; 00310 if ($files) { 00311 $fmanager = aliroFileManager::getInstance(); 00312 foreach ($files as $file) { 00313 $filename = trim((string) $file); 00314 if ($filename) { 00315 if (false !== strpos($filename, '..')) { 00316 throw new installerException (sprintf(T_('file %s contains illegal ".."'), $filename), $extension); 00317 } 00318 else $fmanager->forceCopy($fromdir.$filename, $path.'/'.$filename, true); 00319 } 00320 } 00321 } 00322 }
| aliroExtensionInstaller::doQueries | ( | $ | queries | ) | [protected] |
Definition at line 324 of file aliroExtensionInstaller.php.
References aliroDatabase::getInstance().
Referenced by install().
00324 { 00325 $database = aliroDatabase::getInstance(); 00326 foreach ($queries as $query) if ($query = trim((string)$query)) $database->doSQL($query); 00327 }
| aliroExtensionInstaller::doJQueries | ( | $ | jqueries | ) | [protected] |
Definition at line 329 of file aliroExtensionInstaller.php.
References aliroDatabase::getInstance(), and getXML().
Referenced by install().
00329 { 00330 $database = aliroDatabase::getInstance(); 00331 $subdir = $this->getXML('administration->files->[folder]').'/'; 00332 foreach ($jqueries as $query) { 00333 if ($query = trim((string)$query)) { 00334 $realquery = @file_get_contents($this->here.$subdir.$query); 00335 if ($realquery) { 00336 $database->setQuery($realquery); 00337 $database->query_batch(); 00338 } 00339 } 00340 } 00341 }
| aliroExtensionInstaller::createComponentMenu | ( | $ | item, | |
| $ | name, | |||
| $ | parent, | |||
| $ | toplevel = false | |||
| ) | [protected] |
Definition at line 343 of file aliroExtensionInstaller.php.
Referenced by install_component().
00343 { 00344 $menuitem = new aliroAdminMenu(); 00345 $menuitem->name = $this->purifier->purify((string) $item); 00346 $menuitem->parent = $toplevel; 00347 $link = "index.php?option=$name"; 00348 if ($toplevel AND ($linkdetail = (string) $item['link'])) { 00349 if ('&' == $linkdetail[0]) $link .= $linkdetail; 00350 else $link = 'index.php?'.$linkdetail; 00351 } 00352 elseif ($toplevel AND ($task = (string) $item['task'])) $link .= '&task='.$task; 00353 $menuitem->link = $link; 00354 $menuitem->type = 'components'; 00355 $menuitem->published = 1; 00356 $menuitem->parent = $parent; 00357 $menuitem->component = $name; 00358 $menuitem->ordering = $toplevel ? $this->submenuordering++ : 0; 00359 $menuitem->store(); 00360 return $menuitem->id; 00361 }
| aliroExtensionInstaller::install_component | ( | $ | isUpgrade, | |
| $ | extension | |||
| ) | [protected] |
Definition at line 363 of file aliroExtensionInstaller.php.
References aliroComponent, createComponentMenu(), aliroAdminMenuHandler::getInstance(), and getXML().
00363 { 00364 $mainmenu = $this->getXML('administration->menu'); 00365 $component = new aliroComponent(); 00366 $component->name = ($mainmenu ? $this->purifier->purify((string) $mainmenu) : $extension->name); 00367 $component->option = $component->extformalname = $extension->formalname; 00368 $component->ordering = 0; 00369 $component->class = $this->xmlobject->baseAttribute('userclass'); 00370 $component->adminclass = $this->xmlobject->baseAttribute('adminclass'); 00371 $component->menuclass = $this->xmlobject->baseAttribute('menuclass'); 00372 $component->params = ''; 00373 $component->store(); 00374 if ($mainmenu) { 00375 $topid = $this->createComponentMenu ($mainmenu, $extension->formalname, aliroAdminMenuHandler::getInstance()->baseComponentMenu()); 00376 $submenus = $this->getXML('administration->submenu->menu'); 00377 $this->submenuordering = 1; 00378 if ($submenus) foreach ($submenus as $submenu) { 00379 $this->createComponentMenu ($submenu, $extension->formalname, $topid, true); 00380 } 00381 } 00382 aliroAdminMenuHandler::getInstance()->clearCache(true); 00383 }
| aliroExtensionInstaller::removeComponent | ( | $ | handler, | |
| $ | extension | |||
| ) |
Definition at line 385 of file aliroExtensionInstaller.php.
References $handler, doPackageCode(), aliroDatabase::getInstance(), and getXML().
00385 { 00386 try { 00387 $classpath = $handler->getClassPath($extension->formalname, 2); 00388 if ($uninstallfile = $this->getXML('uninstallfile')) { 00389 $this->handler = $handler; 00390 $this->doPackageCode ($extension, (string) $uninstallfile, (string) $uninstallfile['class'], 'com_uninstall'); 00391 } 00392 $queries = $this->getXML('uninstall->queries->query'); 00393 if ($queries) foreach ($queries as $query) { 00394 aliroDatabase::getInstance()->doSQL((string) $query); 00395 } 00396 } 00397 catch (databaseException $exception) { 00398 00399 } 00400 }
| aliroExtensionInstaller::install_module | ( | $ | isUpgrade, | |
| $ | extension | |||
| ) | [protected] |
Definition at line 402 of file aliroExtensionInstaller.php.
References aliroModule, aliroCoreDatabase::getInstance(), and aliroTemplateHandler::getInstance().
00402 { 00403 $module = new aliroModule(); 00404 $module->title = $extension->name; 00405 $module->ordering = 99; 00406 $module->position = call_user_func(array(aliroTemplateHandler::getInstance()->getDefaultUserTemplateClass(), 'defaultModulePosition')); 00407 $module->showtitle = 1; 00408 $module->admin = $extension->admin; 00409 $module->module = $extension->formalname; 00410 $module->class = $this->xmlobject->baseAttribute('userclass'); 00411 $module->adminclass = $this->xmlobject->baseAttribute('adminclass'); 00412 $module->published = ('yes' == $this->xmlobject->baseAttribute('published')) ? 1 : 0; 00413 $module->store(); 00414 aliroCoreDatabase::getInstance()->doSQL("INSERT INTO #__modules_menu VALUES ('$module->id', 0)"); 00415 }
| aliroExtensionInstaller::install_mambot | ( | $ | isUpgrade, | |
| $ | extension | |||
| ) | [protected] |
Definition at line 417 of file aliroExtensionInstaller.php.
References aliroMambot, and T_().
00417 { 00418 $mambot = new aliroMambot(); 00419 $mambot->name = $extension->name; 00420 $mambot->ordering = 99; 00421 $mambot->element = $extension->formalname; 00422 $mambot->class = $this->xmlobject->baseAttribute('userclass'); 00423 $mambot->published = ('yes' == $this->xmlobject->baseAttribute('published')) ? 1 : 0; 00424 if ($triggers = $this->xmlobject->baseAttribute('triggers')) { 00425 $mambot->triggers = $triggers; 00426 $mambot->store(); 00427 } 00428 else throw new installerException (T_('is plugin but has no triggers'), $extension); 00429 }
aliroExtensionInstaller::$xmlfile = '' [protected] |
aliroExtensionInstaller::$xmlobject = null [protected] |
Definition at line 101 of file aliroExtensionInstaller.php.
aliroExtensionInstaller::$here = '' [protected] |
Definition at line 102 of file aliroExtensionInstaller.php.
aliroExtensionInstaller::$purifier = null [protected] |
Definition at line 103 of file aliroExtensionInstaller.php.
aliroExtensionInstaller::$handler = null [protected] |
1.5.5