From 2f7a10804ecff6db9d8ba45c5666b5fe0d10265a Mon Sep 17 00:00:00 2001 From: Deon George Date: Mon, 2 May 2011 22:20:56 +1000 Subject: [PATCH] Updates from lnApp --- application/bootstrap.php | 4 +- .../classes/controller/lnapp/login.php | 209 ++++++++++++++++++ .../controller/lnapp/templatedefault.php | 4 +- application/classes/controller/lnapp/tree.php | 3 +- application/classes/controller/login.php | 207 +---------------- .../classes/controller/templatedefault.php | 20 -- application/classes/controller/tree.php | 2 +- application/classes/controller/welcome.php | 5 +- application/classes/editor.php | 2 +- application/classes/lnapp/config.php | 39 +--- application/classes/model/.htaccess | 2 - application/config/.htaccess | 2 - application/config/auth.php | 1 + application/config/database.php | 20 +- application/media/css/default.css | 2 +- .../media/img/address-book-new-big.png | Bin 0 -> 3787 bytes application/media/img/address-book-new.png | Bin 0 -> 1305 bytes application/media/img/bug-big.png | Bin 0 -> 928 bytes application/media/img/gritter-close-ie6.gif | Bin 0 -> 718 bytes application/media/img/gritter.png | Bin 0 -> 4880 bytes application/media/img/help-about-big.png | Bin 0 -> 2978 bytes application/media/img/help-about.png | Bin 0 -> 981 bytes application/media/img/help-big.png | Bin 0 -> 1615 bytes application/media/img/help-faq-big.png | Bin 0 -> 2421 bytes application/media/img/help-faq.png | Bin 0 -> 1118 bytes application/media/img/help.png | Bin 0 -> 738 bytes application/media/img/request-feature-big.png | Bin 0 -> 1095 bytes application/media/img/smile-big.png | Bin 0 -> 1332 bytes application/media/js/themes/default/d.png | Bin 0 -> 7635 bytes application/media/js/themes/default/style.css | 56 +++++ .../media/js/themes/default/throbber.gif | Bin 0 -> 1849 bytes application/views/login.php | 1 + 32 files changed, 301 insertions(+), 278 deletions(-) create mode 100644 application/classes/controller/lnapp/login.php delete mode 100644 application/classes/model/.htaccess delete mode 100644 application/config/.htaccess create mode 100644 application/media/img/address-book-new-big.png create mode 100644 application/media/img/address-book-new.png create mode 100644 application/media/img/bug-big.png create mode 100644 application/media/img/gritter-close-ie6.gif create mode 100755 application/media/img/gritter.png create mode 100644 application/media/img/help-about-big.png create mode 100644 application/media/img/help-about.png create mode 100644 application/media/img/help-big.png create mode 100644 application/media/img/help-faq-big.png create mode 100644 application/media/img/help-faq.png create mode 100644 application/media/img/help.png create mode 100644 application/media/img/request-feature-big.png create mode 100644 application/media/img/smile-big.png create mode 100644 application/media/js/themes/default/d.png create mode 100644 application/media/js/themes/default/style.css create mode 100644 application/media/js/themes/default/throbber.gif 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 0000000000000000000000000000000000000000..aa7c4e016c9a9f73b0de9857e3df5fb576257c73 GIT binary patch literal 3787 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 BGL`@U literal 0 HcmV?d00001 diff --git a/application/media/img/address-book-new.png b/application/media/img/address-book-new.png new file mode 100644 index 0000000000000000000000000000000000000000..e37385cc152e1728bc16c20ed1a8ce242fa30ada GIT binary patch literal 1305 zcmV+!1?KvRP)Pcr>vqKT8l;FqyvgDA$!mgr&>_f2pD zW)ozBbD6slVa!D#;zX272Mk!DP^iFQW1A@gTj`Z@bKFX~)OK77IButu7FsTaQlRbM zms3bqM)$!t`Q@CPll-3N{lD*f4h4XEl6`?`0Y1mBP3{X~+4lvdKakB?zhx zS$%_(k3Q+4c8ZDg-@wavaXMY%kt^&fRM$nrIQTx`+<i*zEb9|sTj0ADw9ehe{6sA1K3@l|@G7UI4MP3&42_AY zafDtfLTODSgl%dFx@ZWLIyY$5>sVju^*9@+(}A_6deB|3Oi@y~Xl>QDie8lx^>Q(2 zdJ+|tWw=_}jPJ|(+-PZyf#Dx-kMgypR?tc>nEU;>ltd<&?CNgEj6n~hQIAeV8*=k< z@FTC~DY3XM8o6NiV7z3Sk_02TODkoOUC@1iMX3Hiiz)^%0myqA=a>j}3k3$CRu=tlEx3 zRxf%gilloQbd8um&#hq2)C0qC2n?F{i2P^hRlb<&e34w=#Nt!}bUnV9Rvv`%-V1jr zk@P-)w;ufI{a_wC z0{cP^T5nRI1frVInp*x!0XNUG8AX0^F*3@9h~X)r9GOFrWEdIM{TQ3EK=s&!saXrk z>MAfllY=46MT`xd0X-TE?#+u#5y$c^m)KJj@mx7(=2vmCppy|62nTV!`Vp+Q4Mb%% zgPt|xyS)2|&96qGpbI{qronCuhr_ZZ-aU$J#IR-1o2@u=qZR!V^T_&3gXGFStPpX0 zi2{u(9l}!OIPtp-nS2#Q{(hH2Z zSv`$dPAiW8CdKE!N|1J^hY|NiQZ6p<8TS}P99xVlJO#5Gk}G=V}=`f*GLH2kD zBMeCrBlxNa$rW9$jt5I&S92J-$0*Kb3UTsUBjUL2=pLRWi?)m@qXn8V6XO5qV1&mK z>k#yl0Ewj?jM!fD5geKVmw0CsxrJOL7u6y%qX}OTaYQ=lG_8SjTaWORdK^!7O+R$2 z+s_h(NG$1ei3Oj)q0V!OJw>=r{{DUqGC4Wf-rnxFAt0r6m$*mPAnrc5aHoFZPXX!tIW#Fkh-@}1 zgcunaIdE;Q)w-{*uc@iYd$HDLGMSl~nJ}5cMx2Ab0?2uvK5<5XZ4IbS9y%Yc`wJT07%ZDz#lGybn3JqSRL~ z0UMA74b4&(;i^(TLHHouW@2KZv$OMExB)%z3;YY;Loal|6x@ch@X6Si?-HL4j@D=l zeuOzN@HzCtAbbO5cnohq+|yIjbjFy_Ph%X%fYJIiybU2dgwNm{+<-yYgcaC>^-^hI zU_eS41c9}7c6JumZ^`EVsK0+4wqYKC3+K=OaORAut5fhdT!DJ9)^2Za*F-0SAOIR0 z8@s!^fxX>b;4yp%z}&riy}2BhE=kyhKVc7q5G^e&9UUE+OvblfsFVuBuu`cws9wq? zSc40vPR(7r_U6`>U0-Ks2awfe0uWa2VGs(+I&9m+vkw8USUYBzkBrPwS0PwY4>8<_XtR z?QyfF^}_so6h-NDI*OvUwl-_+^wd-oMXzJg!&ysCO%38{Fr7}nPRAG{+`UUx;q}6|pRv$CJeep*C0000Q?p{liYHH=T)upH)~s3P=H@9WDTaoI zot>RNK0a1fRb&dSOvEG*2;&HeM|kAi~2*|TTgy?gib=g&uv9_8ib855-6)ej#& ztX;cy+O%l`0s?k+cG=n485tSJj~{n%aEOYEI(6z)Wo2bpSlIgY>lZIx{Nu-u_V)Iw zswxo?ksCK|?Afzt-MV#$4joEJNSHEZNCMki?(^G9DBs4DA0KlA4-XUF{g-;~8~>S)2Qt zr4^YHrt(BjO<>ZDo6y8!o1iYtm$)pEH7Y*AOKt*-K?1YN@~w$NZVB8R69W^p8MbX> z2v1<=Z;IJ;@X(=<1m7f9COv`W{2W_#B6*itXfVlfC0H&un##G%Tr5F&xm1FqNdn7q zmDLHH)^8GImisBQu{=oBX0p?n%41+0%5+gUQE*yHP=>bWBJM*fH78PBXE3_T=XfRr zWU^RA$1;U5B%i&)KPiEy-n&Lx;gRF-Jl+UR$iBA%yu2tBQB0m*KZV klO;q&G-@>)84n8x&q`bHRhy%cqp_2ThePmiumXcM0E(Ob2mk;8 literal 0 HcmV?d00001 diff --git a/application/media/img/gritter.png b/application/media/img/gritter.png new file mode 100755 index 0000000000000000000000000000000000000000..0ca3bc0a0f8068194082db9719d6e20a8645985f GIT binary patch literal 4880 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 Zf3P5-;PGuo@D~?gbJgKWjfL<1{{eTAuA%?{ literal 0 HcmV?d00001 diff --git a/application/media/img/help-about-big.png b/application/media/img/help-about-big.png new file mode 100644 index 0000000000000000000000000000000000000000..45b5d620625fcf15fffa10e5a6b33427886969c3 GIT binary patch literal 2978 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 literal 0 HcmV?d00001 diff --git a/application/media/img/help-about.png b/application/media/img/help-about.png new file mode 100644 index 0000000000000000000000000000000000000000..435ea0eeaae4e0f4fd7f35cec165cf184e96f937 GIT binary patch literal 981 zcmV;`11kK9P)0=OBTd6P1FeF#9cDLHp>8UQ zAn0g8g-ryfUWqVvU!jxYh2m~xf52$R2D_*fS{ca1U9^Fw7Al8kXM22Obio z92raO{h&!XGRBbnqwZgUCp+j5w{$nepFBt;mTZ{pp#QOewN`^|T?fO)a)NG>eFj(ygfAUM_$4X4$J`CyeiZ`O=5>($3%^QIj3? zYexokAlkL7^Q};<{T+qLAU1~^+y#K48PN%r)8CrK*^y#pJ#*Fb%oi^&FwW=JYyqc+ zrB^w6ED}#PL=(@2BP~g+zk>0X(7Fycxcg6VrIf+}4`@qlN6^g`DyI zxA%W!FN(F6=`+&kdn%oH_T8rD#6Bve48`mPlma){h8t`{2jVz-mC_xM zFp>CSl#a5zaF&Hj->f>?wr{Oi>#<-s7KydL5Q((*pp?ch-@=+zwA+kw>Ni^97ZAN0 zHD9A_)~`*C{kYg8Bsw1>Y83hB*NVr zr%mR@_XUi(=J~dEk88R@F(4|?x98Qb1Eu^${K_J3sGDHqMP|=`QnuEcFviw&1=iXf zN9q)#b5pPQOE*8WH-CECuH5>{&ZS=SQ>SEfC*8IWL`0N`IN2P>m(tS(L zm?~s*_PB^RBDFuHhbCns9KZ$Y4;|)6uaryv{DC7}2kHU0x`Av9 zt}ZGdP!%-+v6(C87U_tM28wQ zK~#9!m6mI4Tt^jvzx(p8?W`ZM<2X%>A4%&+OyZ~&;Hs^Ks6b6xf`Wq5{sDyeL4Op1 z_yMSdN7WS61|lJ70il9gMWD1zDhP$Rv~KH~*p1`HapTx=yz$yzuOGW!@8iDa&b|EL zx>!M|%8{;SG@5h1d*+-uXB2KtlnwLXRuyiRO$}}PTB<5zPnDIG-60*b!gU-~Hw@p` zqWN@Y^_pv2k1xirOaW`R1ZZg6x2JYX-E;Td)7|~hg9oUqsU}uYNoi>*bEzfP3Kq%a z0x!REhSB#g4z6XEA4|_(8wTV@0y;j?^Yv0yKKM&x=qzPT zG+k#UXHs+}uJBMbm8w`7mhG~A$2L0mbQ!}J-n+kOiBm7oB{15U_PX zjm2Vj8<7Za42)1;SIba;A7k&Fpt`Od#0r7$BC_vdxXaYnYWT92=Z_!aiRVu6%NI|R z%bOG|7t6AVltch!FHiwwbwKev*<4w@1(_={HMfMKsA$pKu(KabC77@McJ_np{t;@YydML3k3+lW4j| zHkZej9zhUzfDWiS5cr-OFJxEt=_L_tSJ1Qn5W1$J=_fS15wd|R@Fq&@o|K}b;HkbC@f6O z0AoNN@YVsN>FGRKB++W%|%T6ooeTwh=RtyC(t zzWz7hPhrgRKqfSr4x!@a*M{;DFAfce0MT$<_gIGB+F@hy!gT*1`8P&w9Xc2aXUzZr N002ovPDHLkV1f>g7GVGY literal 0 HcmV?d00001 diff --git a/application/media/img/help-faq-big.png b/application/media/img/help-faq-big.png new file mode 100644 index 0000000000000000000000000000000000000000..1d57544fcfda07203ab62a1bb0f0bc87e716c83b GIT binary patch literal 2421 zcmV-*35xcKP)_O?|2fWbkhH`5;0jjp)m)ZtayBgX>V`;falG7tTyf-Cz#KgSOdvL9B;0b>_RC#?6=^7OiutvlJE`& z9}Wk{9RN~tm%UV~bvUjzLTZwckr4u&<|Mo}5{Zzjj;nQ|m8)RclGkJa9C(2W##-OO z?5TD#J1U$^8R=l^|JlRz-1DZq=F?9r4|jESHVzIB<{Wf74G#~J&dys6Rx8Ws0%+-e z$dsJ9$((caFxOr8WL1CF!xWUa$Uq2~e9eJF_L^8MMuI{AxC4YjeuDS5+W2D$0IV44 zBnOq^co}iY5Y8UYsB;#6znr_{9lR>Mx0y3GCID~{KZ|-EdYN67PIv=1mD2h2d8{1S z06bnV`KzOv!a#QNC#=S;wJ9<-mC!FhXx?5Ti3h2Oc4Z+X?4%*OW8&b zKugy{VyI~+UxHICQwo!;6+-Gi#)|NR+t8$BuszI{(FIu23j= zuD?G@w2~TK{W~{pGQSdS&^$oTEMqh&xA%#q5I*7WTO$h+I-9AIG3h(0duLUSO zWbcD&LW9A;xC4Yj0gCrNa`a&I@#Dt?h3SK}U)|59gq1)~4GV-Nf|dQ<<;$11;3R|q z7H+?s@Z%l4D%_wC99JY4^~d^&RpL%ef^9Nt)v8s~jjZv9Ry+R-Tw-G7$OZsYJ^kEq zhgust=&b9-lrelIkRh%U1!WfbtYgN9h3oFGIo0 z&_7@8p^nb`vZ}wjO$&~|+sQ2% z!s-4`+G|w+D6okoV>aO$prZ14Ez6sCZru3Gg-X0nQV29vIWSENfP?s1bo+sq?y7Q9 z@G=yPwe0s8xW0 zfdO3tFGGtU_w}~d04xA4RD>`uuUN5SnbBDC`%jJ@IE$Z9v=Cr%2rrt8l>DET_LH3o z0KP+)`hrmkUPgC&4Zu9me2rdGf9HRY{{ul_k2W=3IIDddoM@@Rc}q_BYyjw6^hksh zGS&V|cY6)M9MCru&D99^=PX*ZXs*HV@mr;3(ixA(BM%_wao=TQUH|u@mqe zx`gS2wO?<0#Y&7QgK?%(8k41-n^90u@G38{d|iF*nM+NV8u6ns)&74VS&~g~qZ7q7 zz(i;uHb7xEeW;f0G@7O;Pbn^wInMM3rVx0yV;KSPYx1qmj^QVZk?{>4H(1yV!YZv) zQ~jnWK~7Pm9-o{Xo84YK&%znDavZlLEr7{nS|C_CFD^dD8=||rYZ#oQmth#JI#cK~ z{68Q`lQTBhXWI8VKs>m7_6G|5Z#l=Uk8 z3B};8UAuO!(NwYn^7U_!cRo%q$FyR3(;#@60bD9(0>RDM-Zr$)u-B?o8PyJ8j!&H^ zfN4r6vz1QgD-#aRoZkfDQ(V4nTR|ZJMtbhJTiInjJpKbaJmzpk)2v&Q-WC;_dS-Z-)&a&orFomF;-gzMaDbh>pV^q_ndYY78hUbeHnK(l^ n*p=_TP=K)tJpEXFkgWd#=zh}tL(H{K00000NkvXXu0mjfj>wB7 literal 0 HcmV?d00001 diff --git a/application/media/img/help-faq.png b/application/media/img/help-faq.png new file mode 100644 index 0000000000000000000000000000000000000000..69e0ce1e958fecf4830943d1e6bc29add6ba1293 GIT binary patch literal 1118 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6%*9TgAsieWw;%dH0CG7CJR*yM z%CCbkqm#z$3ZS55iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$QVa}?p8|YB zT>t<74^-dK&;TS?ty%>nApjx*VH+D8!-NsEgM$N{lbxLnXY=szz}XN+Mn*KST2f0#OJ84iPk(1;XIpJUZFOD6 zCLq|psiV8KySL-ryEk9HeEI$zh`s}z4OH{y&C90NhK}yG=GMlYySH_9we?Nts&A<6 z>~8I!(B0G9HFf%=n!3uGhN_7Z`=(BxykXPYO`F#5Ik4y8!2_qxoSHDPXY01jPo6w^ z{rY9uq6_V7uXc8|_Vjhm*nWM{o?DCd-CA|@-kPKL_MCrw;KJkkPhPxx_x8i551&4L z`26|v*RP+yfBy<}$&Vl3fBpLP=g*(NfBynq_4@Uz=9Y%tdw1^KwWF)M9q69^i9JBF z59pr0uHOEx8MCHMn?8BVwoTi%Zvi@KRZ(nAE#@%f`n~9>018 zby7!HE6_a)_X6E>d)1M5>bN1ZOPZV8 zJ32ZiPMI5CJ zO}Wfe`CpHxufMF({`A>JoUx)juWSB%+rV^e|N78tstWS5>)tnJy{}6QH9B&4)zZxA zuED)YF?mNNPP(uy)a5)W(XnL8r&V8qm5$ApNLHDAp~rCp_uX8zL?#xlx|lQ}z4?v1 ze5+Oe?3wYbYSKp;v(4Xcv%ls3S?KZiZ6KH80w4RB^XYe&N&U6<4_~@}=KVA7hrT>H zU3K-$w3UI&zg~Sl+5i5x_s0?qEplgVn;o0;_OGu~S7z-so~p+;k3UP?d~b{RS%a5e zFL$l8tN(T3ca(TRu==j6Sy#7hUvAAFexFg6VNV_V1N+d&JyVYB92Eg&K~Gmdmvv4F FO#t}{G$8;0 literal 0 HcmV?d00001 diff --git a/application/media/img/help.png b/application/media/img/help.png new file mode 100644 index 0000000000000000000000000000000000000000..674a8e92b7f20890210e7f9e52c3bc44733dffa8 GIT binary patch literal 738 zcmV<80v-K{P)nJY(i5b*a|{viz&fDK@p;)lY?EeSqdF8xKuX>ow^r?;1CFf z(zR|ajxHHoN*y~$Kok)|(xfU$Ufz4TdmVg9W2)lN@ATui?}z*SJNQo$J@Gvt2|T`| zw+4I%8h}w9U^<!n|*(9aPSGJcR;dQt!9$R zQzhr+``n9vO!`$2)nM?+y6vh~|))-^1+*iGjcDvoJl`#fm z45?I#v9U3<)_9(W)*8oga9#IiP_x;*JX8wHvJgU0tJP?=T1-z*<2VkE<6zr1wryjK z`4{AQ-tSVWL?jX+6bf}=OG`^wmPMn{!1KH==;-K(dcE!d2Jkx|Q>)cJtgo*>4~N4~ zrIe!6-o?em@cjHdo12^Z?Ch+iweC!I`SkR3J6MswpklH3qgX7y0v-i>Ct|VKlgY`+ zFO^D#-QC@vp!2P}-<4$@3db%707*qoM6N<$g2Gft=>Px# literal 0 HcmV?d00001 diff --git a/application/media/img/request-feature-big.png b/application/media/img/request-feature-big.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b124144bc8fd0e05daffbc4c561e6897333478 GIT binary patch literal 1095 zcmV-N1i1T&P)*tZti#T z|DFH;ocmq)k4vm(QAPa+&ml;gpYZS;tilBSO-xG;MK5?9T=ezp?)HJs#u_QZ1 zH2OtDZTYr!xtVM!Euh4fgQ`j#E)N|)U88qk{QT(IH)?ASwJAL6qS*=*TJ0Z9Z>2vjLB85JxU3O!d`yx;osP(bASl`l6TTxYRFCst3L|L(wijq9aigGAimx(b$#S@58m}kM`3+6-%pV)cn)S)kz zYsqvGDMHpYJYI=G6>KZbry$RaK~)e!U{Dooxn{Q8t$2fR4)3qQVlh6ol1^H{daE%W zPwHq1m0_2U*?EmvJc+LB#NtW30gchgIaE~=(V`fQYW7MxYC3>Hl_P;rwAw5*;hBe< zP7i%UPK5aD*s3ZwP*#$UswnvVVG8v9{Q0JAaU+`x^g%XfWIq?AWWP^>>I3P8{>S|c^U6~@c7NnH(hH2063@p zZ9o1tN={amF3{0+oeKlE*z>?<@(fW1N2c}RKfHKm1MTTF{sE{y*uMDj{eI@?U;?#e z#4#<3bK)ezv+UdD#zYWBXlTAZ5s4*VcAR^AarX~3w~JMcimJxejKQ|1*y$5n-?CXe zA1y4FB8d<>BEyCrb2H|*A31nz@ZY(4b6^MDKzO;6bbt&X3n<+Ch}?0!Irpn{8P+v<_X0D(6yOIE zOCk3H6aa-lrhQB0k@{!%Jw56eXY7^>EfW5Ie01alpaCA>HsAx|s{u&B2xJ5KKwc{6 zg&&j-B!L(Z0A^E=P|CqQZ_xroO`U}$^%zpUg&4GyXc&krkLQ1>KLK_xgU+LC1OWg5 N002ovPDHLkV1lZ2^SA&2 literal 0 HcmV?d00001 diff --git a/application/media/img/smile-big.png b/application/media/img/smile-big.png new file mode 100644 index 0000000000000000000000000000000000000000..22fba5ffce41d5eb25b1267871a8091ce49cd1f1 GIT binary patch literal 1332 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 z 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 0000000000000000000000000000000000000000..5b33f7e54f4e55b6b8774d86d96895db9af044b4 GIT binary patch literal 1849 zcma*odr(tX9tZI2z31lM+(&YVk%mZ}5P~KlG2s=WSbGzm0!x7^P##Mnh7t-jP!X0Q zk_SQ}Po-L1tlDK;6l?(>v)e5ZBQx4|Y-Q?nr@Px3?9h(3ZWr3^tj=`TP57gKr87N$ zp2wWee1GRRCwo_xahnw)5cxNPJbCg2L6DV|6`#+yw6v6!mDS$f9-JvFD^n;GQ&UrZ zzh5jCkByB101O60U0q#p_1BM>Cv-vP?&s4@g_((4_1L=L$(a91)0=J91Gas#R{McE znYG^9*0A5YZ>#;~+Wkn(W5B0^yELIYLP!K}mB~<)AM@1&nqekynuaEGqPrzoH|KodRXJy)%+w_fu3nE5>@Bd_b zqC$EQ;{c`T&?EsNO|igL9gC7Ygxv?aQUEXMq?~>wg{EyW;VcJ37CUF#HjrT=KQO_* zS>M9yydXk18D(+QDJ1>r);Lav_uYKp$T?4vr{Q$lTo&pKv^?(>L-)G2*lwH!Ah7k? z7oH<8h-(KTKt5V6$8gF)C7Io&P5=SjTh)=zV=E2EUhQZP##L8S{d%UK>>+y82>+FV+#^BzW7u3F)Bb>=lYQ%%j`F>ASe zo*cw@V#u6T`A2He;70mR(V&iV&-7{qP~=SRf&jm9-T{*ZeZ}$rd0#6c&fLG^xJcf5 z+p<`wJYgW+_s*V{uI$nMB;%8`S_3>PfGOj3Rq}@Cx^+j?rk92fANSFDBYnOqQ>Vdj z)(|$AhP4t&Lb=Gvo2#3Gl%9<=Gv`Mz?Po@P4iLF!x}GUWJICDlFk-hS^Whyh7x~VH z@0vD1>HYD4&e+~yzS*-sFR{9`{QEEZO1zg7>R&7cHts-6j!xHVdA8eI+ZlVzd%`es zJT@$#GX(gvCJ1oJN%yLBK}{V=V;seo;!w|Yte!W1%5qLNFWqvZW>h&IiH+oPT=b@E zPhGzv5=(Un*X>v`>%8h_nj^NdYcE6NHS_ifkCV$*D)Tqrbu`s;<=t<4 zAHNqNV?6(g<1PY-w@#I-WYFViz?9TrkMr)u0g`O`u|>T;k|2sV*YF^punvT;$SuTy{j3Gv)yqD!R_CF>yR)MzmmYS5v+~R zXAdD%ng9?df;wd8GxR#%3O+gz};Vo;)sK%Bj-q>Oq%R7JU-KD?vYu>#2UjaDo z&8$>5xW~?KPD_#XFToU1hIb*VOMidUr6iYiO0N|i-7s`T8!cFT`rN!^1Pt78J93i6 z5HI1wIM$94m{3SLDvISDe6$ZG1;eq_D9RTaaC>=cO{@Bs>$IlPCPJJ$h$)-3vzNUQ6OsN#_zWxey!_9%hxwH2_dEJi=yY|1c7nDm2_Lm!Cof8-R_+9UkS zcBE(o47yE)oMR(Q=dp1a2wTX5KvvGyLqlWTa7V&!A*|w|)ax~1_~aJ0=_Lilg*0iQk7#ZD EAHN$8j{pDw literal 0 HcmV?d00001 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));?>   +