<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/* TODO: error handling */
+/* TODO: check that requesting user == app-session user */
class Control extends CI_Controller {
public function index() {
}
- public function open($aid) {
+ public function open($aid, $core=NULL) {
if ($this->user->is_logged_in()) {
- $instance = $this->msession->openApp($aid);
-
- $repl = array('id' => $instance->iid(), 'name' => $instance->appName(), 'title' => $instance->windowTitle(), 'interior' => $instance->windowContents());
- $this->json->reply($repl);
+ if ($aid == -1) {
+ // core app!
+ $instance = $this->msession->openCoreApp($core);
+ $repl = array('id' => $instance->iid(), 'name' => $instance->appName(), 'title' => $instance->windowTitle(), 'interior' => $instance->windowContents());
+ $this->json->reply($repl);
+ } else {
+ $instance = $this->msession->openApp($aid);
+ $repl = array('id' => $instance->iid(), 'name' => $instance->appName(), 'title' => $instance->windowTitle(), 'interior' => $instance->windowContents());
+ $this->json->reply($repl);
+ }
} else {
$this->json->error('Not logged in.');
}
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+/* TODO: check if app was succesfully opened, if not delete the instance */
+
class Msession extends CI_Model {
public function __construct() {
$this->load->model('user');
}
protected function setError($error) {
+ trigger_error($error);
$this->lastError = $error;
return FALSE;
}
protected function getApp($aid, $iid, $file, $class) {
if (!is_file($this->config->item('app_prefix').$file)) {
- return setError('App file does not exist');
+ return $this->setError('App file does not exist');
}
if (!(include_once $this->config->item('app_prefix').$file)) {
- return setError('Include error');
+ return $this->setError('Include error');
}
return new $class($iid);
}
}
+ public function openCoreApp($name) {
+ $idata = array(
+ 'sid' => $this->user->sid(),
+ 'aid' => -1,
+ );
+ $this->db->insert('session_apps', $idata);
+ $iid = $this->db->insert_id();
+
+ $app = $this->getApp(-1, $iid, 'core/'.$name.'.php', ucfirst($name));
+ if ($app) {
+ $app->opening();
+ $this->apps[$iid] = $app;
+ }
+ return $app;
+ }
public function openApp($aid) {
$sid = $this->user->sid();
$level = $this->user->level();
$this->db->where('aid', $aid);
$q = $this->db->get('apps');
if ($q->num_rows() == 0)
- return setError('No such app');
+ return $this->setError('No such app');
$row = $q->row();
if (!$level)
- return setError('No access');
+ return $this->setError('No access');
elseif ($row->access == 'operator' && $level == 'user')
- return setError('No access');
- elseif ($row->access == 'manager' && $level != 'maneger')
- return setError('No access');
+ return $this->setError('No access');
+ elseif ($row->access == 'manager' && $level != 'manager')
+ return $this->setError('No access');
// they have access, go on
$idata = array(
this.loadMenu = function() {
$('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="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> • <span style="font-family:monospace;"><span id="clock"></span></span></p>');
+ $('.navbar').append('<div class="navbar-inner"><div id="menu" class="container-fluid"></div></div>');
+ $('#menu').append('<a class="brand dropdown-toggle" href="#" tabindex="-1" data-toggle="dropdown">KronOS <b class="caret"></b></a><ul id="coreapps" class="dropdown-menu"></ul>');
+ $('#menu').append('<div class="menuitems"></div>');
+ $('#menu').append('<p class="navbar-text pull-right">Logged in as <a href="#" class="navbar-link" id="username"><em>unauthenticated</em></a> • <span style="font-family:monospace;"><span id="clock"></span></span></p>');
$('#clock').jclock({
format: '%H:%M',
});
+
+ $('#coreapps').append('<li><a tabindex="-1" href="javascript:wos.openCoreApp(\'credits\');void(0);">Credits</a></li>');
};
this.loadContainer = function() {
$(target).append('<div class="modal-body"></div>');
$(target).append('<div class="modal-footer"></div>');
- $(target+'>.modal-header').append('<button type="button" class="close" aria-hidden="true" data-dismiss="modal" onClick="wos.closeApp(\'#'+repl.name+'\');void(0);">×</button>');
+ $(target+'>.modal-header').append('<button type="button" class="close" aria-hidden="true" data-dismiss="modal" onClick="wos.closeApp(\'#'+repl.name+repl.id+'\');void(0);">×</button>');
$(target+'>.modal-header').append('<h3 class="appLabel">'+repl.title+'</h3>');
$(target+'>.modal-body').append(repl.interior);
}
this.openCoreApp = function(appname) {
+ this.openApp("-1/"+appname);
}
this.closeApp = function(target) {