diff --git a/application/bootstrap.php b/application/bootstrap.php index d0af2600..d12c416c 100644 --- a/application/bootstrap.php +++ b/application/bootstrap.php @@ -89,11 +89,11 @@ Kohana::modules(array( Kohana::modules(array_merge(Kohana::modules(),Config::appmodules())); /** - * Enable admin, user (account), reseller and affiliate interfaces + * Enable specalised interfaces */ Route::set('sections', '/(/(/(/)))', array( - 'directory' => '('.implode('|',Kohana::config('config.method_directory')).')' //(account|admin|affiliate|reseller|task)' + 'directory' => '('.implode('|',Kohana::config('config.method_directory')).')' )); /** diff --git a/application/classes/controller/lnapp/login.php b/application/classes/controller/lnapp/login.php new file mode 100644 index 00000000..03960694 --- /dev/null +++ b/application/classes/controller/lnapp/login.php @@ -0,0 +1,209 @@ +logged_in()!= 0) { + // Redirect to the user account + Request::instance()->redirect('welcome/index'); + } + + // If there is a post and $_POST is not empty + if ($_POST) { + // Instantiate a new user + $user = ORM::factory('account'); + + // Check Auth + $status = $user->login($_POST); + + // If the post data validates using the rules setup in the user model + if ($status) { + // Redirect to the user account + if ($redir = Session::instance()->get('afterlogin')) { + Session::instance()->delete('afterlogin'); + Request::instance()->redirect($redir); + + } else + Request::instance()->redirect('welcome/index'); + + } else { + SystemMessage::add(array( + 'title'=>_('Invalid username or password'), + 'type'=>'error', + 'body'=>_('The username or password was invalid.') + )); + } + } + + Block::add(array( + 'title'=>_('Login to server'), + 'body'=>View::factory('login'), + 'style'=>array('css/login.css'=>'screen'), + )); + + $this->template->control = HTML::anchor($this->request->uri(),'Login',array('id'=>'ajxbody')); + $this->template->content = Block::factory(); + + Script::add(array('type'=>'stdin','data'=>' + $(document).ready(function() { + $("#ajxbody").click(function() {$("#ajBODY").load("'.$this->request->uri().'/"); return false;}); + });' + )); + } + + public function action_register() { + // If user already signed-in + if (Auth::instance()->logged_in()!= 0) { + // Redirect to the user account + Request::instance()->redirect('welcome/index'); + } + + // Instantiate a new user + $account = ORM::factory('account'); + + // If there is a post and $_POST is not empty + if ($_POST) { + // Check Auth + $status = $account->values($_POST)->check(); + + if (! $status) { + foreach ($account->validate()->errors() as $f=>$r) { + // $r[0] has our reason for validation failure + switch ($r[0]) { + // Generic validation reason + default: + SystemMessage::add(array( + 'title'=>_('Validation failed'), + 'type'=>'error', + 'body'=>sprintf(_('The defaults on your submission were not valid for field %s (%s).'),$f,$r[0]) + )); + } + } + } + + $ido = ORM::factory('module') + ->where('name','=','account') + ->find(); + + $account->id = $ido->record_id->next_id($ido->id); + // Save the user details + if ($account->save()) {} + + } + + SystemMessage::add(array( + 'title'=>_('Already have an account?'), + 'type'=>'info', + 'body'=>_('If you already have an account, please login..') + )); + + Block::add(array( + 'title'=>_('Register'), + 'body'=>View::factory('bregister') + ->set('account',$account) + ->set('errors',$account->validate()->errors()), + 'style'=>array('css/bregister.css'=>'screen'), + )); + + $this->template->control = HTML::anchor($this->request->uri(),'Register',array('id'=>'ajxbody')); + $this->template->content = Block::factory(); + $this->template->left = HTML::anchor('login','Login').'...'; + } + + /** + * Enable user password reset + */ + public function action_reset() { + // If user already signed-in + if (Auth::instance()->logged_in()!= 0) { + // Redirect to the user account + Request::instance()->redirect('welcome/index'); + } + + // If the user posted their details to reset their password + if ($_POST) { + // If the email address is correct, create a method token + if (! empty($_POST['email']) AND ($ao=ORM::factory('account',array('email'=>$_POST['email']))) AND $ao->loaded()) { + $mt = ORM::factory('module_method_token'); + + // Find out our password reset method id + // @todo move this to a more generic method, so that it can be called by other methods + $mo = ORM::factory('module',array('name'=>'account')); + $mmo = ORM::factory('module_method',array('name'=>'user_resetpassword','module_id'=>$mo->id)); + + // Check to see if there is already a token, if so, do nothing. + if ($mt->where('account_id','=',$ao->id)->and_where('method_id','=',$mmo->id)->find()) { + if ($mt->date_expire < time()) { + $mt->delete(); + $mt->clear(); + } + } + + if (! $mt->loaded()) { + $mt->account_id = $ao->id; + $mt->method_id = $mmo->id; + $mt->date_expire = time() + 15*3600; + $mt->token = md5(sprintf('%s:%s:%s',$mt->account_id,$mt->method_id,$mt->date_expire)); + $mt->save(); + + // Send our email with the token + $et = EmailTemplate::instance('account_reset_password'); + $et->to = array($mt->account->email=>sprintf('%s %s',$mt->account->first_name,$mt->account->last_name)); + $et->variables = array( + 'SITE'=>URL::base(TRUE,TRUE), + 'SITE_ADMIN'=>Config::sitename(), + 'SITE_NAME'=>Config::sitename(), + 'TOKEN'=>$mt->token, + 'USER_NAME'=>sprintf('%s %s',$mt->account->first_name,$mt->account->last_name), + ); + $et->send(); + } + + // Redirect to our password reset, the Auth will validate the token. + } elseif (! empty($_REQUEST['token'])) { + Request::instance()->redirect(sprintf('user/account/resetpassword?token=%s',$_REQUEST['token'])); + } + + // Show our token screen even if the email was invalid. + if (isset($_POST['email'])) + Block::add(array( + 'title'=>_('Reset your password'), + 'body'=>View::factory('login_reset_sent'), + 'style'=>array('css/login.css'=>'screen'), + )); + else + Request::instance()->redirect('login'); + + } else { + Block::add(array( + 'title'=>_('Reset your password'), + 'body'=>View::factory('login_reset'), + 'style'=>array('css/login.css'=>'screen'), + )); + } + + $this->template->content = Block::factory(); + } + + public function action_noaccess() { + $this->template->content = ' '; + + SystemMessage::add(array( + 'title'=>_('No access to requested resource'), + 'type'=>'error', + 'body'=>_('You do not have access to the requested resource, please contact your administrator.') + )); + } +} +?> diff --git a/application/classes/controller/lnapp/templatedefault.php b/application/classes/controller/lnapp/templatedefault.php index 343804f3..22ef6f1d 100644 --- a/application/classes/controller/lnapp/templatedefault.php +++ b/application/classes/controller/lnapp/templatedefault.php @@ -61,9 +61,9 @@ abstract class Controller_lnApp_TemplateDefault extends Controller_Template { if (! Kohana::Config('config.method_security')) return FALSE; - return (($this->auth_required !== FALSE && Auth::instance()->logged_in() === FALSE) || + return (($this->auth_required !== FALSE && Auth::instance()->logged_in(NULL,get_class($this).'|'.__METHOD__) === FALSE) || (is_array($this->secure_actions) && array_key_exists($this->request->action,$this->secure_actions) && - Auth::instance()->logged_in($this->secure_actions[$this->request->action]) === FALSE)); + Auth::instance()->logged_in($this->secure_actions[$this->request->action],get_class($this).'|'.__METHOD__) === FALSE)); } /** diff --git a/application/classes/controller/lnapp/tree.php b/application/classes/controller/lnapp/tree.php index 4d6fd587..43a1d0e3 100644 --- a/application/classes/controller/lnapp/tree.php +++ b/application/classes/controller/lnapp/tree.php @@ -86,9 +86,10 @@ $(function () { * @param id */ public function action_json($id=null) { + #if (! Auth::instance()->logged_in()) { if ($this->_auth_required()) { $this->treedata = array('attr'=>array('id'=>'a_login'), - 'data'=>array('title'=>_('Please Login').'...','attr'=>array('id'=>'login','href'=>URL::site('/login')))); + 'data'=>array('title'=>_('Please Login').'...','attr'=>array('id'=>'N_login','href'=>URL::site('/login')))); return; } diff --git a/application/classes/controller/login.php b/application/classes/controller/login.php index e9e1a5ba..59a728d0 100644 --- a/application/classes/controller/login.php +++ b/application/classes/controller/login.php @@ -1,209 +1,4 @@ logged_in()!= 0) { - // Redirect to the user account - Request::instance()->redirect('welcome/index'); - } - - // If there is a post and $_POST is not empty - if ($_POST) { - // Instantiate a new user - $user = ORM::factory('account'); - - // Check Auth - $status = $user->login($_POST); - - // If the post data validates using the rules setup in the user model - if ($status) { - // Redirect to the user account - if ($redir = Session::instance()->get('afterlogin')) { - Session::instance()->delete('afterlogin'); - Request::instance()->redirect($redir); - - } else - Request::instance()->redirect('welcome/index'); - - } else { - SystemMessage::add(array( - 'title'=>_('Invalid username or password'), - 'type'=>'error', - 'body'=>_('The username or password was invalid.') - )); - } - } - - Block::add(array( - 'title'=>_('Login to server'), - 'body'=>View::factory('login'), - 'style'=>array('css/login.css'=>'screen'), - )); - - $this->template->control = HTML::anchor($this->request->uri(),'Login',array('id'=>'ajxbody')); - $this->template->content = Block::factory(); - - Script::add(array('type'=>'stdin','data'=>' - $(document).ready(function() { - $("#ajxbody").click(function() {$("#ajBODY").load("'.$this->request->uri().'/"); return false;}); - });' - )); - } - - public function action_register() { - // If user already signed-in - if (Auth::instance()->logged_in()!= 0) { - // Redirect to the user account - Request::instance()->redirect('welcome/index'); - } - - // Instantiate a new user - $account = ORM::factory('account'); - - // If there is a post and $_POST is not empty - if ($_POST) { - // Check Auth - $status = $account->values($_POST)->check(); - - if (! $status) { - foreach ($account->validate()->errors() as $f=>$r) { - // $r[0] has our reason for validation failure - switch ($r[0]) { - // Generic validation reason - default: - SystemMessage::add(array( - 'title'=>_('Validation failed'), - 'type'=>'error', - 'body'=>sprintf(_('The defaults on your submission were not valid for field %s (%s).'),$f,$r[0]) - )); - } - } - } - - $ido = ORM::factory('module') - ->where('name','=','account') - ->find(); - - $account->id = $ido->record_id->next_id($ido->id); - // Save the user details - if ($account->save()) {} - - } - - SystemMessage::add(array( - 'title'=>_('Already have an account?'), - 'type'=>'info', - 'body'=>_('If you already have an account, please login..') - )); - - Block::add(array( - 'title'=>_('Register'), - 'body'=>View::factory('bregister') - ->set('account',$account) - ->set('errors',$account->validate()->errors()), - 'style'=>array('css/bregister.css'=>'screen'), - )); - - $this->template->control = HTML::anchor($this->request->uri(),'Register',array('id'=>'ajxbody')); - $this->template->content = Block::factory(); - $this->template->left = HTML::anchor('login','Login').'...'; - } - - /** - * Enable user password reset - */ - public function action_reset() { - // If user already signed-in - if (Auth::instance()->logged_in()!= 0) { - // Redirect to the user account - Request::instance()->redirect('welcome/index'); - } - - // If the user posted their details to reset their password - if ($_POST) { - // If the email address is correct, create a method token - if (! empty($_POST['email']) AND ($ao=ORM::factory('account',array('email'=>$_POST['email']))) AND $ao->loaded()) { - $mt = ORM::factory('module_method_token'); - - // Find out our password reset method id - // @todo move this to a more generic method, so that it can be called by other methods - $mo = ORM::factory('module',array('name'=>'account')); - $mmo = ORM::factory('module_method',array('name'=>'user_resetpassword','module_id'=>$mo->id)); - - // Check to see if there is already a token, if so, do nothing. - if ($mt->where('account_id','=',$ao->id)->and_where('method_id','=',$mmo->id)->find()) { - if ($mt->date_expire < time()) { - $mt->delete(); - $mt->clear(); - } - } - - if (! $mt->loaded()) { - $mt->account_id = $ao->id; - $mt->method_id = $mmo->id; - $mt->date_expire = time() + 15*3600; - $mt->token = md5(sprintf('%s:%s:%s',$mt->account_id,$mt->method_id,$mt->date_expire)); - $mt->save(); - - // Send our email with the token - $et = EmailTemplate::instance('account_reset_password'); - $et->to = array($mt->account->email=>sprintf('%s %s',$mt->account->first_name,$mt->account->last_name)); - $et->variables = array( - 'SITE'=>URL::base(TRUE,TRUE), - 'SITE_ADMIN'=>Config::sitename(), - 'SITE_NAME'=>Config::sitename(), - 'TOKEN'=>$mt->token, - 'USER_NAME'=>sprintf('%s %s',$mt->account->first_name,$mt->account->last_name), - ); - $et->send(); - } - - // Redirect to our password reset, the Auth will validate the token. - } elseif (! empty($_REQUEST['token'])) { - Request::instance()->redirect(sprintf('user/account/resetpassword?token=%s',$_REQUEST['token'])); - } - - // Show our token screen even if the email was invalid. - if (isset($_POST['email'])) - Block::add(array( - 'title'=>_('Reset your password'), - 'body'=>View::factory('login_reset_sent'), - 'style'=>array('css/login.css'=>'screen'), - )); - else - Request::instance()->redirect('login'); - - } else { - Block::add(array( - 'title'=>_('Reset your password'), - 'body'=>View::factory('login_reset'), - 'style'=>array('css/login.css'=>'screen'), - )); - } - - $this->template->content = Block::factory(); - } - - public function action_noaccess() { - $this->template->content = ' '; - - SystemMessage::add(array( - 'title'=>_('No access to requested resource'), - 'type'=>'error', - 'body'=>_('You do not have access to the requested resource, please contact your administrator.') - )); - } -} +class Controller_Login extends Controller_lnApp_Login {} ?> diff --git a/application/classes/controller/templatedefault.php b/application/classes/controller/templatedefault.php index d7070879..969d0356 100644 --- a/application/classes/controller/templatedefault.php +++ b/application/classes/controller/templatedefault.php @@ -11,26 +11,6 @@ * @license http://dev.leenooks.net/license.html */ class Controller_TemplateDefault extends Controller_lnApp_TemplateDefault { - /** - * Check and see if this controller needs authentication - * - * if $this->auth_required is TRUE, then the user must be logged in only. - * if $this->auth_required is FALSE, AND $this->secure_actions has an array of - * methods set to TRUE, then the user must be logged in AND a member of the - * role. - * - * @return boolean - */ - protected function _auth_required() { - // If our global configurable is disabled, then continue - if (! Kohana::Config('config.method_security')) - return FALSE; - - return (($this->auth_required !== FALSE && Auth::instance()->logged_in(NULL,get_class($this).'|'.__METHOD__) === FALSE) || - (is_array($this->secure_actions) && array_key_exists($this->request->action,$this->secure_actions) && - Auth::instance()->logged_in($this->secure_actions[$this->request->action],get_class($this).'|'.__METHOD__) === FALSE)); - } - protected function _left() { if ($this->template->left) return $this->template->left; diff --git a/application/classes/controller/tree.php b/application/classes/controller/tree.php index d21effe9..2ee2809a 100644 --- a/application/classes/controller/tree.php +++ b/application/classes/controller/tree.php @@ -24,7 +24,7 @@ class Controller_Tree extends Controller_lnApp_Tree { public function action_json($id=null) { if ($this->_auth_required()) { $this->treedata = array('attr'=>array('id'=>'a_login'), - 'data'=>array('title'=>_('Please Login').'...','attr'=>array('id'=>'N_login','href'=>URL::site('login')))); + 'data'=>array('title'=>_('Please Login').'...','attr'=>array('id'=>'N_login','href'=>URL::site('/login')))); return; } diff --git a/application/classes/controller/welcome.php b/application/classes/controller/welcome.php index 20d37caf..1569ae3a 100644 --- a/application/classes/controller/welcome.php +++ b/application/classes/controller/welcome.php @@ -12,8 +12,7 @@ */ class Controller_Welcome extends Controller_TemplateDefault { public function action_index() { - $block = new block; - $block->add(array( + Block::add(array( 'title'=>'Welcome to lnApp (public)!', 'subtitle'=>'Using lnApp', 'body'=>'Sample lnApp application', @@ -33,7 +32,7 @@ class Controller_Welcome extends Controller_TemplateDefault { )); } - $this->template->content = $block; + $this->template->content = Block::factory(); } } ?> diff --git a/application/classes/editor.php b/application/classes/editor.php index 8299c122..20432e33 100644 --- a/application/classes/editor.php +++ b/application/classes/editor.php @@ -1,7 +1,7 @@ get('modules')) - return $cache->get('modules'); - - } else - $cache = ''; - - $modules = array(); - $module_table = 'module'; - - if (class_exists('Model_'.ucfirst($module_table))) { - $mo = ORM::factory($module_table)->where('status','=',1)->find_all()->as_array(); - - foreach ($mo as $o) - $modules[$o->name] = MODPATH.$o->name; - } - - if ($cache) - $cache->set('modules',$modules); - - return $modules; - } - /** * Return our site name */ @@ -90,7 +57,13 @@ abstract class lnApp_Config extends Kohana { return Kohana::config('config.site_name'); } + public static function logo_file() { + // @todo Move the logo filename to a config file + return Kohana::find_file(sprintf('media/%s',Config::siteid()),'img/logo-small','png'); + } + public static function logo() { + // @todo Move the logo filename to a config file $mediapath = Route::get('default/media'); $logo = $mediapath->uri(array('file'=>'img/logo-small.png'),array('alt'=>static::sitename())); diff --git a/application/classes/model/.htaccess b/application/classes/model/.htaccess deleted file mode 100644 index 281d5c33..00000000 --- a/application/classes/model/.htaccess +++ /dev/null @@ -1,2 +0,0 @@ -order allow,deny -deny from all diff --git a/application/config/.htaccess b/application/config/.htaccess deleted file mode 100644 index 281d5c33..00000000 --- a/application/config/.htaccess +++ /dev/null @@ -1,2 +0,0 @@ -order allow,deny -deny from all diff --git a/application/config/auth.php b/application/config/auth.php index 1155c350..a85bd580 100644 --- a/application/config/auth.php +++ b/application/config/auth.php @@ -15,5 +15,6 @@ return array( 'salt_pattern' => null, 'lifetime' => 1209600, 'session_key' => 'auth_user', + 'forced_key' => 'auth_forced', ); ?> diff --git a/application/config/database.php b/application/config/database.php index 8e74ebe7..468579fd 100644 --- a/application/config/database.php +++ b/application/config/database.php @@ -9,17 +9,29 @@ * @copyright (c) 2010 Open Source Billing * @license http://dev.osbill.net/license.html */ + return array ( 'default' => array ( 'type' => 'mysql', 'connection' => array( - 'hostname' => 'mysql.leenooks.vpn', - 'username' => 'gh-webbill', - 'password' => 'ws0593', + /** + * The following options are available for MySQL: + * + * string hostname server hostname, or socket + * string database database name + * string username database username + * string password database password + * boolean persistent use persistent connections? + * + * Ports and sockets may be appended to the hostname. + */ + 'hostname' => 'localhost', + 'username' => 'username', + 'password' => 'password', 'persistent' => FALSE, - 'database' => 'webghosb', + 'database' => 'database', ), 'table_prefix' => 'ab_', 'charset' => 'utf8', diff --git a/application/media/css/default.css b/application/media/css/default.css index 10afc647..1f76b7c9 100644 --- a/application/media/css/default.css +++ b/application/media/css/default.css @@ -2,7 +2,7 @@ table.box-left { border: 1px solid #AAAACC; margin-right: auto; } table.box-center { border: 1px solid #AAAACC; margin-left: auto; margin-right: auto; } -table.box-full { border: 1px solid #AAAACC; width: 100%; } +table.box-full { border: 1px solid #AAAACC; margin-right: auto; width: 100%; } tr.head { font-weight: bold; } td.head { font-weight: bold; } td.bold { font-weight: bold; } diff --git a/application/media/img/address-book-new-big.png b/application/media/img/address-book-new-big.png new file mode 100644 index 00000000..aa7c4e01 Binary files /dev/null and b/application/media/img/address-book-new-big.png differ diff --git a/application/media/img/address-book-new.png b/application/media/img/address-book-new.png new file mode 100644 index 00000000..e37385cc Binary files /dev/null and b/application/media/img/address-book-new.png differ diff --git a/application/media/img/bug-big.png b/application/media/img/bug-big.png new file mode 100644 index 00000000..0758a855 Binary files /dev/null and b/application/media/img/bug-big.png differ diff --git a/application/media/img/gritter-close-ie6.gif b/application/media/img/gritter-close-ie6.gif new file mode 100644 index 00000000..aea6e427 Binary files /dev/null and b/application/media/img/gritter-close-ie6.gif differ diff --git a/application/media/img/gritter.png b/application/media/img/gritter.png new file mode 100755 index 00000000..0ca3bc0a Binary files /dev/null and b/application/media/img/gritter.png differ diff --git a/application/media/img/help-about-big.png b/application/media/img/help-about-big.png new file mode 100644 index 00000000..45b5d620 Binary files /dev/null and b/application/media/img/help-about-big.png differ diff --git a/application/media/img/help-about.png b/application/media/img/help-about.png new file mode 100644 index 00000000..435ea0ee Binary files /dev/null and b/application/media/img/help-about.png differ diff --git a/application/media/img/help-big.png b/application/media/img/help-big.png new file mode 100644 index 00000000..bbda895a Binary files /dev/null and b/application/media/img/help-big.png differ diff --git a/application/media/img/help-faq-big.png b/application/media/img/help-faq-big.png new file mode 100644 index 00000000..1d57544f Binary files /dev/null and b/application/media/img/help-faq-big.png differ diff --git a/application/media/img/help-faq.png b/application/media/img/help-faq.png new file mode 100644 index 00000000..69e0ce1e Binary files /dev/null and b/application/media/img/help-faq.png differ diff --git a/application/media/img/help.png b/application/media/img/help.png new file mode 100644 index 00000000..674a8e92 Binary files /dev/null and b/application/media/img/help.png differ diff --git a/application/media/img/request-feature-big.png b/application/media/img/request-feature-big.png new file mode 100644 index 00000000..b7b12414 Binary files /dev/null and b/application/media/img/request-feature-big.png differ diff --git a/application/media/img/smile-big.png b/application/media/img/smile-big.png new file mode 100644 index 00000000..22fba5ff Binary files /dev/null and b/application/media/img/smile-big.png differ diff --git a/application/media/js/themes/default/d.png b/application/media/js/themes/default/d.png new file mode 100644 index 00000000..8540175a Binary files /dev/null and b/application/media/js/themes/default/d.png differ diff --git a/application/media/js/themes/default/style.css b/application/media/js/themes/default/style.css new file mode 100644 index 00000000..2ca17ea0 --- /dev/null +++ b/application/media/js/themes/default/style.css @@ -0,0 +1,56 @@ +/* + * jsTree default theme 1.0 + * Supported features: dots/no-dots, icons/no-icons, focused, loading + * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search + */ + +.jstree-default li, +.jstree-default ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; } +.jstree-default li { background-position:-90px 0; background-repeat:repeat-y; } +.jstree-default li.jstree-last { background:transparent; } +.jstree-default .jstree-open > ins { background-position:-72px 0; } +.jstree-default .jstree-closed > ins { background-position:-54px 0; } +.jstree-default .jstree-leaf > ins { background-position:-36px 0; } + +.jstree-default .jstree-hovered { background:#FFF0C0; border:1px solid #841212; padding:0 2px 0 1px; color: #841212;} +.jstree-default .jstree-clicked { background:#FCFCFC; border:1px solid #FCFCFC; padding:0 2px 0 1px; color: #841212;} +.jstree-default a .jstree-icon { background-position:-56px -19px; } +.jstree-default a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; } + +.jstree-default.jstree-focused { background:#FCFCFC; } + +.jstree-default .jstree-no-dots li, +.jstree-default .jstree-no-dots .jstree-leaf > ins { background:transparent; } +.jstree-default .jstree-no-dots .jstree-open > ins { background-position:-18px 0; } +.jstree-default .jstree-no-dots .jstree-closed > ins { background-position:0 0; } + +.jstree-default .jstree-no-icons a .jstree-icon { display:none; } + +.jstree-default .jstree-search { font-style:italic; } + +.jstree-default .jstree-no-icons .checkbox { display:inline-block; } +.jstree-default .jstree-no-checkboxes .checkbox { display:none !important; } +.jstree-default .jstree-checked > a > .checkbox { background-position:-38px -19px; } +.jstree-default .jstree-unchecked > a > .checkbox { background-position:-2px -19px; } +.jstree-default .jstree-undetermined > a > .checkbox { background-position:-20px -19px; } +.jstree-default .jstree-checked > a > .checkbox:hover { background-position:-38px -37px; } +.jstree-default .jstree-unchecked > a > .checkbox:hover { background-position:-2px -37px; } +.jstree-default .jstree-undetermined > a > .checkbox:hover { background-position:-20px -37px; } + +#vakata-dragged.jstree-default ins { background:transparent !important; } +#vakata-dragged.jstree-default .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; } +#vakata-dragged.jstree-default .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; } +#jstree-marker.jstree-default { background:url("d.png") -41px -57px no-repeat !important; } + +.jstree-default a.jstree-search { color:aqua; } + +#vakata-contextmenu.jstree-default-context, +#vakata-contextmenu.jstree-default-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; } +#vakata-contextmenu.jstree-default-context li { } +#vakata-contextmenu.jstree-default-context a { color:black; } +#vakata-contextmenu.jstree-default-context a:hover, +#vakata-contextmenu.jstree-default-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; } +#vakata-contextmenu.jstree-default-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; } +#vakata-contextmenu.jstree-default-context li ul { margin-left:-4px; } + +/* TODO: IE6 support - the `>` selectors */ diff --git a/application/media/js/themes/default/throbber.gif b/application/media/js/themes/default/throbber.gif new file mode 100644 index 00000000..5b33f7e5 Binary files /dev/null and b/application/media/js/themes/default/throbber.gif differ diff --git a/application/views/login.php b/application/views/login.php index c76e139f..fd491b15 100644 --- a/application/views/login.php +++ b/application/views/login.php @@ -7,6 +7,7 @@ Password: 'login-pwd','size'=>40));?>   +