/**
  * 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'));
     }
 }