/** * Install a module into the database * * @param string $module The name of the module to install * @param boolean $loadifnecessary If true, loads the module before trying to install it * @return array Returns a tuple of whether the install was successful and a message if applicable */ function InstallModule($module, $loadifnecessary = false) { global $gCms; if (!isset($gCms->modules[$module])) { if ($loadifnecessary == false) { return array(false, lang('errormodulenotloaded')); } else { if (!ModuleOperations::LoadNewModule($module)) { return array(false, lang('errormodulewontload')); } } } $db =& $gCms->GetDb(); if (isset($gCms->modules[$module])) { $modinstance =& $gCms->modules[$module]['object']; $result = $modinstance->Install(); #now insert a record if (!isset($result) || $result === FALSE) { $query = "INSERT INTO " . cms_db_prefix() . "modules (module_name, version, status, admin_only, active) VALUES (?,?,'installed',?,?)"; $db->Execute($query, array($module, $modinstance->GetVersion(), $modinstance->IsAdminOnly() == true ? 1 : 0, 1)); #and insert any dependancies if (count($modinstance->GetDependencies()) > 0) { #Now check to see if we can satisfy any deps foreach ($modinstance->GetDependencies() as $onedepkey => $onedepvalue) { $time = $db->DBTimeStamp(time()); $query = "INSERT INTO " . cms_db_prefix() . "module_deps (parent_module, child_module, minimum_version, create_date, modified_date) VALUES (?,?,?," . $time . "," . $time . ")"; $db->Execute($query, array($onedepkey, $module, $onedepvalue)); } } #send an event saying the module has been installed Events::SendEvent('Core', 'ModuleInstalled', array('name' => &$module, 'version' => $modinstance->GetVersion())); // and we're done return array(true); } else { if (trim($result) == "") { $result = lang('errorinstallfailed'); } return array(false, $result); } } else { return array(false, lang('errormodulenotfound')); } }