public function install()
 {
     $mod = new Modules();
     $mod->getModuleByName('roles');
     $perms = array('create roles', 'update roles', 'delete roles', 'manage roles');
     $perm_ids = FabriqModules::register_perms($mod->id, $perms);
     global $db;
     $sql = "CREATE TABLE IF NOT EXISTS `fabmod_roles_roles` (\n\t\t\t`id` INT(11) NOT NULL AUTO_INCREMENT,\n\t\t\t`role` VARCHAR(100) NOT NULL,\n\t\t\t`enabled` TINYINT(1) NOT NULL DEFAULT 1,\n\t\t\t`created` DATETIME NOT NULL,\n\t\t\t`updated` DATETIME NOT NULL,\n\t\t\tPRIMARY KEY (`id`)\n\t\t) ENGINE=INNODB;";
     $db->query($sql);
     $sql = "CREATE TABLE IF NOT EXISTS `fabmod_roles_moduleperms` (\n\t\t\t`id` INT(11) NOT NULL AUTO_INCREMENT,\n\t\t\t`permission` INT(11) NOT NULL,\n\t\t\t`role` INT(11) NOT NULL,\n\t\t\t`created` DATETIME NOT NULL,\n\t\t\t`updated` DATETIME NOT NULL,\n\t\t\tPRIMARY KEY (`id`),\n\t\t\tCONSTRAINT `fk_moduleperms_permission` FOREIGN KEY (`permission`) REFERENCES fabmods_perms(id) ON DELETE CASCADE,\n\t\t\tCONSTRAINT `fk_moduleperms_role` FOREIGN KEY (`role`) REFERENCES fabmod_roles_roles(id) ON DELETE CASCADE\n\t\t) ENGINE=INNODB;";
     $db->query($sql);
     // create base roles
     $role = FabriqModules::new_model('roles', 'Roles');
     $role->role = "unauthenticated";
     $role->enabled = 1;
     $role->id = $role->create();
     $role = FabriqModules::new_model('roles', 'Roles');
     $role->role = "authenticated";
     $role->enabled = 1;
     $role->id = $role->create();
     $role = FabriqModules::new_model('roles', 'Roles');
     $role->role = "administrator";
     $role->enabled = 1;
     $role->id = $role->create();
     // map paths
     $pathmap =& FabriqModules::module('pathmap');
     $pathmap->register_path('fabriqadmin/roles/manage', 'roles', 'index', 'module');
     $pathmap->register_path('fabriqadmin/roles/create', 'roles', 'create', 'module');
     $pathmap->register_path('fabriqadmin/roles/perms', 'roles', 'perms', 'module');
     // set module as installed
     $mod->installed = 1;
     $mod->update();
 }
 public function uninstall()
 {
     $mod = new Modules();
     $mod->getModuleByName('blog');
     // remove perms
     FabriqModules::remove_perms($mod->id);
     // remove paths
     $pathmap =& FabriqModules::module('pathmap');
     $pathmap->remove_path('blog');
     $pathmap->remove_path('blog/create');
     $pathmap->remove_path('blog/update/!#');
     $pathmap->remove_path('blog/destroy/!#');
     $pathmap->remove_path('blog/show/!#');
     // delete database table
     global $db;
     $sql = "DROP TABLE `fabmod_blog_blogs`;";
     $db->query($sql);
     // uninstall any terms
     if (FabriqModules::enabled('taxonomy')) {
         FabriqModules::module('taxonomy')->uninstallMaps('fabmod_blog_blogs');
     }
     // set module as not installed
     $mod->installed = 0;
     $mod->update();
 }
 public function update_2_1_8()
 {
     // update the module version number
     $mod = new Modules();
     $mod->getModuleByName('users');
     $mod->versioninstalled = '2.1.8';
     $mod->update();
 }
 public function update_2_1_3()
 {
     // update the module version number
     $mod = new Modules();
     $mod->getModuleByName('pathmap');
     $mod->versioninstalled = '2.1.3';
     $mod->update();
 }
 public function update_1_5_1()
 {
     // update the module version number
     $mod = new Modules();
     $mod->getModuleByName('users');
     $mod->versioninstalled = '1.5.1';
     $mod->update();
 }
 public function uninstall()
 {
     $mod = new Modules();
     $mod->getModuleByName('googleanalytics');
     // set module as not installed
     $mod->installed = 0;
     $mod->update();
 }
 public function update_2_3_1()
 {
     // update the path(s) for the fabriqupdate module to point to the proper actions
     $pathmap =& FabriqModules::module('pathmap');
     $pathmap->remove_path('fabriqupdates');
     $pathmap->register_path('fabriqupdates', 'fabriqinstall', 'fetchUpdates', 'module');
     // update the module version number
     $mod = new Modules();
     $mod->getModuleByName('fabriqinstall');
     $mod->versioninstalled = '2.3.1';
     $mod->update();
 }
 /**
  * Check that the fabriqinstall module is installed
  */
 public static function fabriqinstallReady()
 {
     // check that the fabriqinstall module is installed
     if (!FabriqModules::installed('fabriqinstall')) {
         FabriqModules::register_module('fabriqinstall');
         FabriqModules::install('fabriqinstall');
         $module = new Modules();
         $module->getModuleByName('fabriqinstall');
         $module->enabled = 1;
         $module->update();
         Messaging::message('Installed fabriqinstall module', 'success');
     }
 }
 /**
  * Install step 3
  * Database configuration details
  */
 protected function install_step3($continue = TRUE)
 {
     Fabriq::title('Database configuration');
     // go back to site configuration step if the session isn't set
     if (!isset($_SESSION['FAB_INSTALL_site']) || $_SESSION['FAB_INSTALL_site'] == '') {
         PathMap::arg(2, 2);
         $this->install_step2();
     }
     if (isset($_POST['submit'])) {
         if (strlen(trim($_POST['db'])) == 0) {
             Messaging::message('You must enter a database name');
         }
         if (strlen(trim($_POST['user'])) == 0) {
             Messaging::message('You must enter a database user');
         }
         if (strlen(trim($_POST['pwd'])) == 0) {
             Messaging::message('You must enter a database user password');
         }
         if (strlen(trim($_POST['server'])) == 0) {
             Messaging::message('You must enter a database server');
         }
         // test database connectivity
         $mysqli = @mysqli_connect(trim($_POST['server']), trim($_POST['user']), trim($_POST['pwd']), trim($_POST['db']));
         if (!$mysqli) {
             Messaging::message('Error connecting to the database. Please check your database settings and try again.');
         } else {
             mysqli_close($mysqli);
         }
         if (!Messaging::has_messages()) {
             $dbConfig = array('db' => trim($_POST['db']), 'user' => trim($_POST['user']), 'pwd' => trim($_POST['pwd']), 'server' => trim($_POST['server']));
             $_SESSION['FAB_INSTALL_db'] = serialize($dbConfig);
             // write out configuration file
             $siteConfig = unserialize($_SESSION['FAB_INSTALL_site']);
             $confFile = 'sites/' . FabriqStack::site() . '/config/config.inc.php';
             $fh = fopen($confFile, 'w');
             fwrite($fh, "<?php\n");
             fwrite($fh, "/**\n");
             fwrite($fh, " * @file\n");
             fwrite($fh, " * Base config file for a Fabriq app.\n");
             fwrite($fh, " */\n\n");
             fwrite($fh, "\$_FAPP = array(\n");
             fwrite($fh, "\t'title' => \"{$siteConfig['title']}\",\n");
             fwrite($fh, "\t'title_pos' => '{$siteConfig['title_pos']}',\n");
             fwrite($fh, "\t'title_sep' => \"{$siteConfig['title_sep']}\",\n");
             fwrite($fh, "\t'cleanurls' => {$siteConfig['cleanurls']},\n");
             fwrite($fh, "\t'cdefault' => 'homepage',\n");
             fwrite($fh, "\t'adefault' => 'index',\n");
             fwrite($fh, "\t'url' => '{$siteConfig['url']}',\n");
             fwrite($fh, "\t'apppath' => '{$siteConfig['apppath']}',\n");
             fwrite($fh, "\t'templates' => array(\n");
             fwrite($fh, "\t\t'default' => 'application'\n");
             fwrite($fh, "\t)\n");
             fwrite($fh, ");\n\n");
             fwrite($fh, "\$_FDB['default'] = array(\n");
             fwrite($fh, "\t'user' => '{$_POST['user']}',\n");
             fwrite($fh, "\t'pwd' => '{$_POST['pwd']}',\n");
             fwrite($fh, "\t'db' => '{$_POST['db']}',\n");
             fwrite($fh, "\t'server' => '{$_POST['server']}'\n");
             fwrite($fh, ");\n");
             fclose($fh);
             // write default controller if the file isn't already there
             // file may exist from being created in a dev environment or this is
             // a distributed web app
             $contFile = 'sites/' . FabriqStack::site() . "/app/controllers/homepage.controller.php";
             if (!file_exists($contFile)) {
                 $fh = fopen($contFile, 'w');
                 fwrite($fh, "<?php\n");
                 fwrite($fh, "class homepage_controller extends Controller {\n");
                 fwrite($fh, "\tfunction index() {\n");
                 fwrite($fh, "\t\tFabriq::title('Welcome to {$siteConfig['title']}');\n");
                 fwrite($fh, "\t}\n");
                 fwrite($fh, "}\n");
                 fclose($fh);
             }
             // write default action if it doesn't already exist
             // may already exist from being created in a dev environmentor this is
             // a distributed web app
             if (!is_dir('sites/' . FabriqStack::site() . "/app/views/homepage")) {
                 mkdir('sites/' . FabriqStack::site() . "/app/views/homepage");
             }
             $actionFile = 'sites/' . FabriqStack::site() . "/app/views/homepage/index.view.php";
             if (!file_exists($actionFile)) {
                 $fh = fopen($actionFile, 'w');
                 fwrite($fh, "<h1>homepage#index</h1>\n");
                 fclose($fh);
             }
             // create the framework database tables
             global $db;
             $db_info = array('server' => trim($_POST['server']), 'user' => trim($_POST['user']), 'pwd' => trim($_POST['pwd']), 'db' => trim($_POST['db']));
             $db = new Database($db_info);
             // install config table
             $query = "CREATE TABLE IF NOT EXISTS  `fabriq_config` (\n\t\t\t\t\t\t`version` VARCHAR(10) NOT NULL,\n\t\t\t\t\t\t`installed` DATETIME NOT NULL,\n\t\t\t\t\t\tPRIMARY KEY (`version`)\n\t\t\t\t\t) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
             $db->query($query);
             $query = "INSERT INTO fabriq_config (version, installed) VALUES (?, ?)";
             $db->prepare_cud($query, array($this->installVersion, date('Y-m-d H:i:s')));
             // modules table
             $query = "CREATE TABLE IF NOT EXISTS `fabmods_modules` (\n\t\t\t\t\t\t`id` int(11) NOT NULL AUTO_INCREMENT,\n\t\t\t\t\t\t`module` varchar(100) NOT NULL,\n\t\t\t\t\t\t`enabled` tinyint(4) NOT NULL,\n\t\t\t\t\t\t`hasconfigs` tinyint(1) NOT NULL,\n\t\t\t\t\t\t`installed` tinyint(1) NOT NULL,\n\t\t\t\t\t\t`versioninstalled` varchar(20) NOT NULL,\n\t\t\t\t\t\t`description` text NOT NULL,\n\t\t\t\t\t\t`dependson` text,\n\t\t\t\t\t\t`created` datetime NOT NULL,\n\t\t\t\t\t\t`updated` datetime NOT NULL,\n\t\t\t\t\t\tPRIMARY KEY (`id`)\n\t\t\t\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;";
             $db->query($query);
             // module configs table
             $query = "CREATE TABLE IF NOT EXISTS `fabmods_module_configs` (\n\t\t\t\t\t\t`id` int(11) NOT NULL AUTO_INCREMENT,\n\t\t\t\t\t\t`module` int(11) NOT NULL,\n\t\t\t\t\t\t`var` varchar(100) NOT NULL,\n\t\t\t\t\t\t`val` text NOT NULL,\n\t\t\t\t\t\t`created` datetime NOT NULL,\n\t\t\t\t\t\t`updated` datetime NOT NULL,\n\t\t\t\t\t\tPRIMARY KEY (`id`)\n\t\t\t\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;";
             $db->query($query);
             // module perms table
             $query = "CREATE TABLE IF NOT EXISTS `fabmods_perms` (\n\t\t\t\t\t\t`id` int(11) NOT NULL AUTO_INCREMENT,\n\t\t\t\t\t\t`permission` varchar(100) NOT NULL,\n\t\t\t\t\t\t`module` int(11) NOT NULL,\n\t\t\t\t\t\t`created` datetime NOT NULL,\n\t\t\t\t\t\t`updated` datetime NOT NULL,\n\t\t\t\t\t\tPRIMARY KEY (`id`)\n\t\t\t\t\t) ENGINE=InnoDB  DEFAULT CHARSET=utf8;";
             $db->query($query);
             // install the module events table
             $query = "CREATE TABLE IF NOT EXISTS `fabmods_module_events` (\n\t\t\t\t\t`id` INT(11) NOT NULL AUTO_INCREMENT,\n\t\t\t\t\t`eventModule` VARCHAR(50) NOT NULL,\n\t\t\t\t\t`eventAction` VARCHAR(50) NOT NULL,\n\t\t\t\t\t`eventName` VARCHAR(100) NOT NULL,\n\t\t\t\t\t`handlerModule` VARCHAR(50) NOT NULL,\n\t\t\t\t\t`handlerAction` VARCHAR(50) NOT NULL,\n\t\t\t\t\tPRIMARY KEY (`id`)\n\t\t\t\t) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
             $db->query($query);
             if (!isset($_SESSION['FAB_INSTALL_mods_installed'])) {
                 Messaging::message('Configuration file has been written', 'success');
                 Messaging::message('Core database tables have been created', 'success');
                 FabriqModules::register_module('pathmap');
                 FabriqModules::register_module('roles');
                 FabriqModules::register_module('users');
                 FabriqModules::register_module('sitemenus');
                 FabriqModules::register_module('fabriqmodules');
                 FabriqModules::register_module('fabriqinstall');
                 FabriqModules::install('pathmap');
                 $module = new Modules();
                 $module->getModuleByName('pathmap');
                 $module->enabled = 1;
                 $module->update();
                 Messaging::message('Installed pathmap module', 'success');
                 FabriqModules::install('roles');
                 $module = new Modules();
                 $module->getModuleByName('roles');
                 $module->enabled = 1;
                 $module->update();
                 Messaging::message('Installed roles module', 'success');
                 FabriqModules::install('users');
                 $module = new Modules();
                 $module->getModuleByName('users');
                 $module->enabled = 1;
                 $module->update();
                 Messaging::message('Installed users module', 'success');
                 FabriqModules::register_module('sitemenus');
                 FabriqModules::install('sitemenus');
                 $module = new Modules();
                 $module->getModuleByName('sitemenus');
                 $module->enabled = 1;
                 $module->update();
                 Messaging::message('Installed sitemenus module', 'success');
                 FabriqModules::register_module('fabriqmodules');
                 FabriqModules::install('fabriqmodules');
                 $module = new Modules();
                 $module->getModuleByName('fabriqmodules');
                 $module->enabled = 1;
                 $module->update();
                 Messaging::message('Installed fabriqmodules module', 'success');
                 FabriqModules::register_module('fabriqinstall');
                 FabriqModules::install('fabriqinstall');
                 $module = new Modules();
                 $module->getModuleByName('fabriqinstall');
                 $module->enabled = 1;
                 $module->update();
                 Messaging::message('Installed fabriqinstall module', 'success');
                 // get admin role and give it all perms so that the admin can actually set
                 // things up
                 $role = FabriqModules::new_model('roles', 'Roles');
                 $role->getRole('administrator');
                 $perms = new Perms();
                 $perms->getAll();
                 foreach ($perms as $perm) {
                     $modPerm = FabriqModules::new_model('roles', 'ModulePerms');
                     $modPerm->permission = $perm->id;
                     $modPerm->role = $role->id;
                     $modPerm->create();
                 }
                 $_SESSION['FAB_INSTALL_mods_installed'] = true;
             }
             if ($continue) {
                 // go to next step
                 header("Location: " . PathMap::build_path('fabriqinstall', 'install', 4));
                 exit;
             }
         }
         FabriqModules::set_var('fabriqinstall', 'submitted', true);
     }
 }