diff --git a/classes/lnApp/Controller/Login.php b/classes/lnApp/Controller/Login.php index ede570a..c498f31 100644 --- a/classes/lnApp/Controller/Login.php +++ b/classes/lnApp/Controller/Login.php @@ -13,6 +13,8 @@ abstract class lnApp_Controller_Login extends Controller_TemplateDefault { protected $auth_required = FALSE; + protected $login_attribute = 'email'; + /** * Activate an account so that it can login and use the site */ @@ -208,12 +210,12 @@ abstract class lnApp_Controller_Login extends Controller_TemplateDefault { */ public function action_reset() { // Minutes to keep our token - $token_expire = 15*60; + $token_expire = 15; // If the user posted their details to reset their password if ($this->request->post()) { // If the username is correct, create a method token - if ($ao=ORM::factory('Account',array('email'=>$this->request->post('username'))) AND $ao->loaded()) { + if ($this->request->post('username') AND ($ao=ORM::factory('Account',array($this->login_attribute=>$this->request->post('username')))) AND $ao->loaded()) { $token = $ao->token($token_expire,'account','user:resetpassword',2); if ($token) { diff --git a/classes/lnApp/Email.php b/classes/lnApp/Email.php index ce4ca41..6332834 100644 --- a/classes/lnApp/Email.php +++ b/classes/lnApp/Email.php @@ -226,6 +226,9 @@ abstract class lnApp_Email extends Kohana_Email { * Get email details */ private function email($key) { + if (! isset($this->_email[$key])) + return array(); + if (is_array($this->_email[$key]) AND isset($this->_email[$key]['email'])) return $this->_email[$key]['email']; else diff --git a/classes/lnApp/Form.php b/classes/lnApp/Form.php index 5f43cd0..70641d4 100644 --- a/classes/lnApp/Form.php +++ b/classes/lnApp/Form.php @@ -10,183 +10,17 @@ * @license http://dev.leenooks.net/license.html */ abstract class lnApp_Form extends Kohana_Form { - /** - * Render our control group form attributes - * - * @return array((string) control group wrapper,(array) attributes to exclude - */ - private static function _controlgroup($name,array &$attributes=NULL) { - // Bypass this rendering if nocg is set. - if (isset($attributes['nocg'])) { - unset($attributes['nocg']); - return '%s'; - } - - if (! isset($attributes['class'])) - $attributes['class'] = 'form-control'; - - $output = ''; - - $output .= '
'; - - // Only need col-md for horizonal forms? - if (isset($attributes['label'])) { - $output .= Form::label($name,$attributes['label'],array('class'=>'control-label')); - unset($attributes['label']); - } - - if (isset($attributes['help-block'])) { - $help = $attributes['help-block']; - unset($attributes['help-block']); - } - - if (isset($attributes['add-on'])) { - $addon = $attributes['add-on']; - unset($attributes['add-on']); - } - - $classdiv = FALSE; - if (isset($attributes['divclass'])) { - $output .= sprintf('
',$attributes['divclass']); - unset($attributes['divclass']); - $classdiv = TRUE; - } - - $output .= '%s'; - - if (in_array('required',$attributes)) - $output .= '
'; - - if ($classdiv) - $output .= '
'; - - if (isset($help)) - $output .= sprintf('%s',$help); - - if (isset($addon)) - $output .= sprintf('%s',$addon); - - $output .= '
'; - - return $output; - } - - public static function button($name,$body,array $attributes=NULL) { - return sprintf(self::_controlgroup($name,$attributes),parent::button($name,$body,$attributes)); - } - - /** - * Wrap our Form() functions with boostrap HTML - * - * @usedby Form::hidden - * @usedby Form::password - * @usedby Form::file - * @usedby Form::checkbox - * @usedby Form::radio - * @usedby Form::submit - * @usedby Form::image - */ - public static function input($name,$value=NULL,array $attributes=NULL) { - return (isset($attributes['type']) AND $attributes['type'] == 'hidden') ? parent::input($name,$value,$attributes) : sprintf(self::_controlgroup($name,$attributes),parent::input($name,$value,$attributes)); - } - - public static function select($name,array $options=NULL,$selected=NULL,array $attributes=NULL) { - // If only 1 record, dont show select, but a hidden attribute and a displayed value. - if (isset($attributes['oneonly']) AND $attributes['oneonly']) { - $attributes['disabled'] = 'disabled'; - unset($attributes['oneonly']); - } - - if (isset($attributes['sort']) AND $attributes['sort']) { - asort($options); - unset($attributes['sort']); - } - - return sprintf(self::_controlgroup($name,$attributes),parent::select($name,$options,$selected,$attributes)); - } - - public static function textarea($name,$body='',array $attributes=NULL,$double_encode=TRUE) { - if (! isset($attributes['id'])) - $attributes['id'] = preg_replace('/[\[\]]/','_',$name); - - if (isset($attributes['editor'])) { - switch ($attributes['editor']) { - case 'tinymce': - Script::factory() - ->type('file') - ->data('media/vendor/tinymce/js/tinymce/jquery.tinymce.min.js'); - - Script::factory() - ->type('stdin') - ->data('$("#'.$attributes['id'].'").tinymce({ -script_url : "'.URL::site('media/vendor/tinymce/js/tinymce/tinymce.min.js').'", -theme : "modern", -plugins: [ "code","link","image","preview","table" ], -menubar: "", -toolbar: "undo redo | styleselect | bold italic | link image | table | preview | code", - });'); - - break; - - case 'wysihtml5': - Style::factory() - ->type('file') - ->data('media/theme/bootstrap/vendor/bootstrap-wysihtml5-0.0.2/bootstrap-wysihtml5-0.0.2.css'); - - Script::factory() - ->type('file') - ->data('media/theme/bootstrap/vendor/bootstrap-wysihtml5-0.0.2/libs/js/wysihtml5-0.3.0_rc2.min.js'); - - Script::factory() - ->type('file') - ->data('media/theme/bootstrap/vendor/bootstrap-wysihtml5-0.0.2/bootstrap-wysihtml5-0.0.2.min.js'); - - Script::factory() - ->type('stdin') - ->data('$("#'.$attributes['id'].'").wysihtml5({ -html: true, -parserRules: { - tags: { - p: {}, - strong: {}, - table: {}, - tbody: {}, - thead: {}, - tr: {}, - td: { - check_attributes: { - colspan: "numbers", - rowspan: "numbers", - } - } - } -} - });'); - - break; - default: - throw new Kohana_Exception('Unknown editor :editor for textarea',array(':editor'=>$attributes['editor'])); - } - - unset($attributes['edit']); - } - - return sprintf(self::_controlgroup($name,$attributes),parent::textarea($name,$body,$attributes,$double_encode)); - } - public static function textarea_rows($textarea,$min=10,$char="\n") { return ($x=count(explode($char,$textarea))) < $min ? $min : $x; } - public static function textarea_width($textarea,$min=76,$char="\n") { + public static function textarea_cols($textarea,$min=60,$char="\n") { $x = $min; foreach (explode($char,$textarea) as $string) - { if (strlen($string) > $x) $x = strlen($string); - } - return $x; + return $x+2; } } ?> diff --git a/media/js/search.js b/media/js/search.js index 35338f6..55e0b7f 100644 --- a/media/js/search.js +++ b/media/js/search.js @@ -16,7 +16,7 @@ $(document).ready(function() { }); var c=0; -var search = _.debounce(function(url,query,process){ +var search = _.debounce(function(url,query,process,icon){ $.ajax({ url : site_url+url, type : 'GET', @@ -25,8 +25,12 @@ var search = _.debounce(function(url,query,process){ async : true, cache : false, beforeSend : function() { - if (c++ == 0) - $('i[name=searching]').removeClass("hidden"); + if (c++ == 0) { + if (icon) + $('i[name='+icon+']').addClass("fa-spin"); + else + $('i[name=searching]').removeClass("hidden"); + } }, success : function(data) { // if json is null, means no match, won't do again. @@ -46,8 +50,12 @@ var search = _.debounce(function(url,query,process){ process(userLabels); }, complete : function() { - if (--c == 0) - $('i[name=searching]').addClass("hidden"); + if (--c == 0) { + if (icon) + $('i[name='+icon+']').removeClass("fa-spin"); + else + $('i[name=searching]').addClass("hidden"); + } } }) }, 500); diff --git a/media/theme/baseadmin/css/custom.css b/media/theme/baseadmin/css/custom.css index 994f6f2..35b45e6 100644 --- a/media/theme/baseadmin/css/custom.css +++ b/media/theme/baseadmin/css/custom.css @@ -82,11 +82,6 @@ table .text-right { font-weight: normal; color: #000; } -.form-group [class*=" fa-spin"] { - margin-left: -35px; - position: relative; - margin-top: 10px; -} .navbar .navbar-form .navbar-search-addon [class*=" fa-spin"] { padding: 10px 10px; @@ -102,7 +97,15 @@ table .text-right { } .form-group { - margin-bottom: 25px; + margin-bottom: 15px; +} + +.form-horizontal .form-group { + margin-left: 0px; +} + +.form-group .input-group .input-group-addon { + width: 38px; } ul.typeahead.dropdown-menu { diff --git a/views/field/account.php b/views/field/account.php new file mode 100644 index 0000000..43e55c7 --- /dev/null +++ b/views/field/account.php @@ -0,0 +1,35 @@ + + + + + +
+ +
+ + +
+ +
+ +type('stdin') + ->data(' +$(document).ready(function() { + $("input[id=account_id_label]").typeahead({ + minLength: 2, + source: function (query,process) { + search("'.$data['ajaxurl'].'",query,process,"account_lookup"); + }, + + matcher: function () { return true; }, + + updater: function (item) { + $("input[name=account_id]").val(users[item]).trigger("change"); + + return item; + }, + }); +});'); +?> diff --git a/views/field/date.php b/views/field/date.php new file mode 100644 index 0000000..7d5ea03 --- /dev/null +++ b/views/field/date.php @@ -0,0 +1,37 @@ + + + + +
+ +
+ + +
+ +
+ +type('file') + ->data('media/theme/bootstrap/js/bootstrap.datepicker.js'); + +Style::factory() + ->type('file') + ->data('media/theme/bootstrap/css/bootstrap.datepicker.css'); + +Script::factory() + ->type('stdin') + ->data(' +$(document).ready(function() { + $("#'.$data['field'].'_label").datepicker({ + autoclose : true, + '.($data['enddate'] ? 'endDate : '.$data['enddate'].',' : '').' + todayHighlight: true, + format : "dd-M-yyyy", + todayBtn : true, + }).on("hide",function(ev) { + $("input[name='.$data['field'].']").val(ev.date.valueOf()/1000); + }); +});'); +?> diff --git a/views/field/money.php b/views/field/money.php new file mode 100644 index 0000000..01b5d26 --- /dev/null +++ b/views/field/money.php @@ -0,0 +1,10 @@ + + + +
+ +
+
+ +
+
diff --git a/views/field/number.php b/views/field/number.php new file mode 100644 index 0000000..27cc69e --- /dev/null +++ b/views/field/number.php @@ -0,0 +1,10 @@ + + + +
+ +
+
+ +
+
diff --git a/views/field/select.php b/views/field/select.php new file mode 100644 index 0000000..2dda7a3 --- /dev/null +++ b/views/field/select.php @@ -0,0 +1,11 @@ + + + + + +
+ +
+ 'form-control','placeholder'=>$data['text'])); ?> +
+
diff --git a/views/field/submit.php b/views/field/submit.php new file mode 100644 index 0000000..d75de21 --- /dev/null +++ b/views/field/submit.php @@ -0,0 +1,4 @@ +
+ + +
diff --git a/views/field/text.php b/views/field/text.php new file mode 100644 index 0000000..645f6ca --- /dev/null +++ b/views/field/text.php @@ -0,0 +1,9 @@ + + + +
+ +
+ +
+
diff --git a/views/field/textarea.php b/views/field/textarea.php new file mode 100644 index 0000000..c69790c --- /dev/null +++ b/views/field/textarea.php @@ -0,0 +1,7 @@ + + + +
+ + +
diff --git a/views/login/reset.php b/views/login/reset.php index b34612d..6c2732c 100644 --- a/views/login/reset.php +++ b/views/login/reset.php @@ -14,7 +14,7 @@

To start this process, please enter your Username. If you dont know your Username, please contact us.

- +