public function perms()
 {
     if ($this->requiresPermission('manage roles', $this->name)) {
         Fabriq::title('Admin | Manage permissions');
         FabriqModules::add_css('roles', 'roles');
         $perms = new Perms();
         $perms->getAll();
         $modules = new Modules();
         $modules->getEnabled();
         $roles = FabriqModules::new_model('roles', 'Roles');
         $roles->getRoles();
         $modulePerms = FabriqModules::new_model('roles', 'ModulePerms');
         $modulePerms->getAll();
         $permissions = array();
         foreach ($perms as $perm) {
             $permissions[$perm->id] = array();
             foreach ($roles as $role) {
                 if (isset($modulePerms->perms[$perm->id][$role->id])) {
                     $permissions[$perm->id][$role->id] = 1;
                 } else {
                     $permissions[$perm->id][$role->id] = 0;
                 }
             }
         }
         if (isset($_POST['submit'])) {
             foreach ($perms as $perm) {
                 foreach ($roles as $role) {
                     if (isset($_POST['permission'][$perm->id][$role->id])) {
                         $permissions[$perm->id][$role->id] = 1;
                         // add to database if it's not already set
                         if (!isset($modulePerms->perms[$perm->id][$role->id])) {
                             $p = FabriqModules::new_model('roles', 'ModulePerms');
                             $p->permission = $perm->id;
                             $p->role = $role->id;
                             $p->id = $p->create();
                             $modulePerms->perms[$perm->id][$role->id] = $modulePerms->count();
                             $modulePerms->add($p);
                         }
                     } else {
                         $permissions[$perm->id][$role->id] = 0;
                         // remove from database if it is already set
                         if (isset($modulePerms->perms[$perm->id][$role->id])) {
                             $p = FabriqModules::new_model('roles', 'ModulePerms');
                             $p->find($modulePerms[$modulePerms->perms[$perm->id][$role->id]]->id);
                             $p->destroy();
                             $modulePerms->remove($modulePerms->perms[$perm->id][$role->id]);
                             $modulePerms->reindex();
                         }
                     }
                 }
             }
             Messaging::message('Permissions have been updated.', 'success');
         }
         FabriqModules::set_var($this->name, 'perms', $perms);
         FabriqModules::set_var($this->name, 'modules', $modules);
         FabriqModules::set_var($this->name, 'roles', $roles);
         FabriqModules::set_var($this->name, 'permissions', $permissions);
     }
 }
 public function index()
 {
     if (FabriqModules::module('roles')->requiresPermission('administer menus', 'sitemenus')) {
         $menus = FabriqModules::new_model('sitemenus', 'Menus');
         $menus->getAll();
         FabriqModules::set_var('sitemenus', 'menus', $menus);
         Fabriq::title('Manage menus');
         Fabriq::fabriq_ui_on();
         FabriqModules::add_js('users', 'jquery.validate.min');
         FabriqLibs::js_lib('jquery.tmpl.min', 'jquery/plugins');
         FabriqModules::add_js('sitemenus', 'sitemenus.index');
         FabriqModules::add_css('sitemenus', 'sitemenus');
     }
 }
 public function updateAccount()
 {
     if (!$this->isLoggedIn()) {
         header('Location: ' . PathMap::build_path('users', 'login'));
         exit;
     }
     Fabriq::title('Update account');
     $user = FabriqModules::new_model('users', 'Users');
     $user->find($_SESSION[Fabriq::siteTitle()]['FABMOD_USERS_userid']);
     if (isset($_POST['submit'])) {
         $emailPattern = '/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\\@([a-z0-9])(([a-z0-9-])*([a-z0-9]))+' . '(\\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i';
         $displayPattern = '/([A-z0-9]){6,24}/';
         if (!preg_match($displayPattern, $_POST['display'])) {
             Messaging::message("Display name is invalid");
         }
         if (!preg_match($emailPattern, $_POST['email'])) {
             Messaging::message("e-mail address is invalid");
         }
         if (!Messaging::has_messages()) {
             $user->display = $_POST['display'];
             $user->email = $_POST['email'];
             $user->update();
             $_SESSION[Fabriq::siteTitle()]['FABMOD_USERS_displayname'] = $user->display;
             $_SESSION[Fabriq::siteTitle()]['FABMOD_USERS_email'] = $user->email;
             Messaging::message('Account has bee updated', 'success');
         }
         FabriqModules::set_var('users', 'submitted', true);
     }
     FabriqModules::set_var('users', 'user', $user);
     FabriqModules::add_js('users', 'jquery.validate.min');
     FabriqModules::add_js('users', 'users-updateAccount');
     FabriqModules::add_css('users', 'users-admin');
 }
 function __construct()
 {
     parent::__construct();
     global $installed;
     global $_FAPP;
     $processing = FabriqStack::processing();
     if ($processing->action == 'fetchUpdates') {
         return;
     }
     // make sure that we're good to run the requested action
     if ($processing->action == 'install' && $installed && PathMap::arg(2) < 4) {
         header("Location: " . PathMap::build_path($_FAPP['cdefault'], $_FAPP['adefault']));
         exit;
     } else {
         if ($processing->action == 'install' && $installed && PathMap::arg(2) == 4) {
             // determine which version is installed
             if (!isset($_POST['submit'])) {
                 global $db;
                 $query = "SHOW TABLES;";
                 $db->query($query);
                 $tables = array();
                 while ($row = $db->result->fetch_array()) {
                     $tables[] = $row[0];
                 }
                 if (in_array('fabmod_users_users', $tables)) {
                     $query = "SELECT COUNT(*) AS num FROM fabmod_users_users";
                     $db->query($query);
                     $row = $db->result->fetch_array();
                     if ($row['num'] > 0) {
                         header("Location: " . PathMap::build_path($_FAPP['cdefault'], $_FAPP['adefault']));
                         exit;
                     }
                 }
             }
         } else {
             if ($processing->action == 'update') {
                 // figure out what updates are available
                 global $db;
                 $query = "SELECT version FROM fabriq_config ORDER BY installed DESC, version DESC LIMIT 1";
                 $db->query($query);
                 $data = mysqli_fetch_array($db->result);
                 $this->version = $data['version'];
                 if (!FabriqModules::module('roles')->hasRole('administrator')) {
                     if ($this->version != null) {
                         header('Location: ' . PathMap::build_path('users', 'login', 'fabriqinstall', 'update'));
                         exit;
                     }
                 }
             }
         }
     }
     // set the install version
     $this->installVersion = '0.0';
     $updates = get_class_methods('fabriqinstall_module');
     foreach ($updates as $method) {
         if (substr($method, 0, 7) == 'update_' && substr($method, 0, 11) != 'update_step') {
             $version = str_replace('_', '.', str_replace('update_', '', $method));
             if ($version > $this->installVersion) {
                 $this->installVersion = $version;
             }
         }
     }
     // set up display elements
     Fabriq::empty_css_queue();
     FabriqModules::add_css('fabriqinstall', 'fabriqinstall');
     FabriqTemplates::template('fabriqinstall');
 }