]> jfr.im git - z_archive/KronOS.git/commitdiff
Adding menus!
authorJohn Runyon <redacted>
Sat, 20 Oct 2012 10:42:43 +0000 (13:42 +0300)
committerJohn Runyon <redacted>
Sat, 20 Oct 2012 10:42:43 +0000 (13:42 +0300)
application/controllers/backend.php
application/libraries/Core.php
application/models/user.php
public/js/application.js

index 0d89764a45aa5ca78375fca5d10999fc307c25e0..bf3256c9135ea5bfc88a4250d1b4ee4e91040a09 100644 (file)
@@ -4,7 +4,6 @@ class Backend extends CI_Controller {
 
        public function __construct() {
                parent::__construct();
-
                $this->load->model('user');
        }
 
index cc5c2705d46fc6b883cafd88fcc3599c8f6dfe75..862a37d16596f692d0c49bb9c88cb9bc704362e4 100644 (file)
@@ -1,13 +1,46 @@
 <?php // if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
 class Core {
+       protected $CI;
+
+       public function __construct() {
+               $this->CI =& get_instance();
+               $this->CI->load->model('user');
+       }
+
        public function get_menu() {
-               $menu = array(
+               /*$menu = array(
                        'Desktop'       => '#',
                        'App'           => '#',
                        'Logout'        => 'javascript:wos.logout();void(0);',
                        'GitHub'        => 'https://github.com/mustis/KronOS'
+               );*/
+               $menu = array();
+
+               $ulev = $this->CI->user->level();
+               if ($ulev == 'operator') $chklevel = "a.access = 'user' OR a.access = 'manager'";
+               elseif ($ulev == 'manager') $chklevel = "1"; // full access -> always true
+               else $chklevel = "a.access = 'user'"; // fallback
+
+               $sql = 'SELECT c.catname AS category, a.appname AS appname, a.aid AS appid FROM categories AS c, apps AS a WHERE c.cid = a.parent AND ('.$chklevel.')';
+               $q = $this->CI->db->query($sql);
+               foreach ($q->result() as $row) {
+                       $menu[$row->category][$row->appname] = 'javascript:wos.openApp('.$row->appid.');void(0);';
+               }
+
+               ksort($menu);
+               foreach ($menu as $key => &$cat) {
+                       if (is_array($cat)) {
+                               ksort($cat);
+                       }
+               }
+
+               $menu['System'] = array(
+                       'About KronOS'  => 'javascript:wos.openCoreApp("credits");void(0);',
+                       'Preferences'   => 'javascript:wos.openCoreApp("account");void(0);',
+                       'Logout'        => 'javascript:wos.logout();void(0);',
                );
+
                return $menu;
        }
        public function get_login() {
index 187223e2f2c17755fdd2941207c87e7a411924a6..d185064a92f0a5dd3c471d041ae0b7c871f45a9f 100644 (file)
@@ -40,9 +40,7 @@ class User extends CI_Model {
                $this->db->insert('sessions', $sdata);
                $this->sid($this->db->insert_id());
 
-               $this->input->set_cookie('session_id', $this->sid());
-
-               return TRUE;
+               return $this->sid();
        }
 
        public function sid($new=NULL) {
@@ -52,12 +50,16 @@ class User extends CI_Model {
                        return $old;
                }
 
-               if (isset($this->cached_sid)) {
+               if (isset($this->cached_sid) && $this->cached_sid != 0) {
                        return $this->cached_sid;
                } else {
-                       // FIXME needs IP-lock checking...
-                       return $this->cached_sid = $this->input->cookie('session_id');
+                       // TODO IP-lock checking...
+                       $this->cached_sid = $this->input->cookie('session_id');
+                       if ($this->cached_sid != 0) {
+                               return $this->cached_sid;
+                       }
                }
+               return FALSE; // fallback to this
        }
        public function uid($new=NULL) {
                if (!empty($new)) {
@@ -106,8 +108,27 @@ class User extends CI_Model {
                return FALSE;
        }
        public function level($new=NULL) {
-               // TODO TODO TODO
-               $this->cached_level = $new;
+               if (!empty($new)) {
+                       $old = $this->cached_level;
+                       $this->cached_level = $new;
+                       return $old;
+               }
+
+               if (isset($this->cached_level)) {
+                       return $this->cached_level;
+               } else {
+                       $uid = $this->uid();
+                       if ($uid !== FALSE) {
+                               $this->db->select('level');
+                               $this->db->where('uid', $uid);
+                               $q = $this->db->get('users');
+                               if ($q->num_rows() > 0) {
+                                       $row = $q->row();
+                                       return $this->cached_level = $row->level;
+                               }
+                       }
+               }
+               return FALSE;
        }
 
        public function is_logged_in() {
index 45e3b90aee32248ccead053dcb4c27bcb204ffd1..7708e75010246a82081d221b096781be28f9e6b8 100644 (file)
@@ -5,23 +5,24 @@ var wos
        $.fn.pageConstruct = function( initvar ) {
 
                this.buildPage = function() {
-                       state = {}
+                       document.cookie = "session_id=0;expires=0";
                        this.loadMenu();
                        this.loadContainer();
                }
 
                this.loadDefaults = function() {
                        var self = this;
-                       $.getJSON("/backend/logged_in", function(resp) {
-                               if (!resp.contents) {
+//                     $.getJSON("/backend/logged_in", function(resp) {
+//                             if (!resp.contents) {
                                        self.hideMenu();
                                        self.hideBackground();
+                                       self.setUsername('<em>unauthenticated</em>');
                                        self.loadLogin();
-                               } else {
-                                       self.loadUsername();
-                                       self.loadBackground();
-                               }
-                       });
+//                             } else {
+//                                     self.loadUsername();
+//                                     self.loadBackground();
+//                             }
+//                     });
                }
 
                this.showError = function(e, t, c) {
@@ -37,9 +38,8 @@ var wos
                        $('body').append('<div class="navbar navbar-inverse navbar-fixed-top"></div>');
                        $('.navbar').append('<div class="navbar-inner"><div class="container-fluid"></div></div>');
                        $('.container-fluid').append('<a class="brand" href="#">KronOS</a>');
-                       $('.container-fluid').append('<div class="nav-collapse collapse menudiv"></div>');
-                       $('.menudiv').append('<div class="menuitems"></div>');
-                       $('.menudiv').append('<p class="navbar-text pull-right">Logged in as <a href="#" class="navbar-link" id="username"><em>unauthenticated</em></a></p>');
+                       $('.container-fluid').append('<div class="menuitems"></div>');
+                       $('.container-fluid').append('<p class="navbar-text pull-right">Logged in as <a href="#" class="navbar-link" id="username"><em>unauthenticated</em></a></p>');
                };
 
                this.loadContainer = function() {
@@ -50,14 +50,18 @@ var wos
                this.loadMenuItems = function() {
                        $.getJSON("/backend/get_menu", function(resp) {
                                if (resp.success) {
-                                       var menuitems = []
+                                       navStr = '<ul class="nav">';
                                        $.each(resp.contents, function(key, val) {
-                                               menuitems.push('<li><a href="' + val + '">' + key + '</li>');
+                                               openStr = '<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">'+key+' <b class="caret"></b></a><ul class="dropdown-menu">';
+                                               innerStr = '';
+                                               closeStr = '</ul></li>';
+                                               $.each(val, function(ikey, ival) {
+                                                       innerStr += '<li><a href=\''+ival+'\'>'+ikey+'</a></li>';
+                                               });
+                                               navStr += openStr+innerStr+closeStr;
                                        });
-                                       $('<ul/>', {
-                                               'class': 'nav',
-                                               html: menuitems.join('')
-                                       }).appendTo('.menuitems');
+                                       navStr += '</ul>';
+                                       $('.menuitems').html(navStr);
                                } else {
                                        throwError(resp.error, 'error', '#desktop');
                                }
@@ -92,8 +96,8 @@ var wos
                        $('style').remove();
                }
 
-               this.loadUsername = function() {
-                       $("#username").html(state.name);
+               this.setUsername = function(name) {
+                       $("#username").html(name);
                }
 
                this.submitLogin = function() {
@@ -104,10 +108,8 @@ var wos
                        self = this;
                        $.post('/account/login', loginData, function(resp) {
                                if (resp.success) {
-                                       for (key in resp.data) {
-                                               state[key] = resp.data[key]
-                                       }
-                                       self.loadUsername();
+                                       document.cookie = "session_id="+resp.data.sid+";expires=0";
+                                       self.setUsername(resp.data.name);
                                        self.loadMenuItems();
                                        self.loadBackground();
 
@@ -123,7 +125,7 @@ var wos
                }
 
                this.logout = function() {
-                       state = {}
+                       document.cookie = "session_id=0;expires=0";
                        this.loadDefaults();
                }