Password Reset Validation, Removal of unnessary files, Service display updates
This commit is contained in:
parent
e5340d3e3e
commit
abddbd31a2
@ -65,7 +65,7 @@ class Config extends Kohana_Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static function date($date) {
|
public static function date($date) {
|
||||||
return is_null($date) ? NULL : date(Company::instance()->date_format(),$date);
|
return is_null($date) ? ' ' : date(Company::instance()->date_format(),$date);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,7 +40,7 @@ class Controller_Login extends lnApp_Controller_Login {
|
|||||||
// If the username is correct, create a method token
|
// If the username is correct, create a method token
|
||||||
if (! empty($_POST['username']) AND ($ao=ORM::factory('Account',array('username'=>$_POST['username']))) AND $ao->loaded()) {
|
if (! empty($_POST['username']) AND ($ao=ORM::factory('Account',array('username'=>$_POST['username']))) AND $ao->loaded()) {
|
||||||
$mmto = ORM::factory('Module_Method_Token')
|
$mmto = ORM::factory('Module_Method_Token')
|
||||||
->method(array('account','user_resetpassword'))
|
->method(array('account','user:resetpassword'))
|
||||||
->account($ao)
|
->account($ao)
|
||||||
->uses(2)
|
->uses(2)
|
||||||
->expire(time()+$token_expire*60);
|
->expire(time()+$token_expire*60);
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OSB User Main home page controller
|
|
||||||
*
|
|
||||||
* @package OSB
|
|
||||||
* @category Controllers/Affiliate
|
|
||||||
* @author Deon George
|
|
||||||
* @copyright (c) 2009-2013 Open Source Billing
|
|
||||||
* @license http://dev.osbill.net/license.html
|
|
||||||
*/
|
|
||||||
class Controller_TemplateDefault_Affiliate extends Controller_TemplateDefault_User {
|
|
||||||
public function after() {
|
|
||||||
SystemMessage::add(array(
|
|
||||||
'title'=>'Retire this class extension',
|
|
||||||
'type'=>'info',
|
|
||||||
'body'=>__METHOD__,
|
|
||||||
));
|
|
||||||
|
|
||||||
return parent::after();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -56,48 +56,73 @@ class Controller_User_Account extends Controller_Account {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function action_resetpassword() {
|
public function action_resetpassword() {
|
||||||
// @todo Fix this next logic, since matches_ifset is not being called when the value is on the form, but empty
|
if ($this->request->post()) {
|
||||||
if (empty($_POST['password_confirm']))
|
$validation = Validation::factory($this->request->post())
|
||||||
$_POST['password_confirm'] = ' ';
|
->rule('password','not_empty')
|
||||||
|
->rule('password','min_length',array(':value',6))
|
||||||
|
->rule('password_confirm','matches',array(':validation',':field','password'));
|
||||||
|
|
||||||
// Store our new values
|
// Store our new values
|
||||||
$this->ao->values($_POST);
|
$this->ao->values($this->request->post());
|
||||||
|
|
||||||
|
if (! $validation->check())
|
||||||
|
SystemMessage::factory()
|
||||||
|
->title(_('Record NOT updated'))
|
||||||
|
->type('error')
|
||||||
|
->body(_('Your password didnt pass validation.'));
|
||||||
|
|
||||||
// Run validation and save
|
// Run validation and save
|
||||||
if ($this->ao->changed())
|
elseif ($this->ao->changed())
|
||||||
if ($this->ao->check()) {
|
if ($this->ao->save()) {
|
||||||
SystemMessage::factory()
|
SystemMessage::factory()
|
||||||
->title('Record updated')
|
->title('Record updated')
|
||||||
->type('success')
|
->type('success')
|
||||||
->body(_('Your account record has been updated.'));
|
->body(_('Your account record has been updated.'));
|
||||||
|
|
||||||
$this->ao->save();
|
|
||||||
|
|
||||||
// Log the password reset
|
// Log the password reset
|
||||||
$this->ao->log('Password reset');
|
$this->ao->log('Password reset');
|
||||||
|
|
||||||
HTTP::redirect('login');
|
HTTP::redirect('login');
|
||||||
|
}
|
||||||
} else {
|
|
||||||
// @todo Need to check that this still works with the new bootstrap theming
|
|
||||||
$output = '';
|
|
||||||
|
|
||||||
foreach ($this->ao->validation()->errors('forms/login') as $field => $error)
|
|
||||||
$output .= sprintf('<li><b>%s</b> %s</li>',$field,$error);
|
|
||||||
|
|
||||||
if ($output)
|
|
||||||
$output = sprintf('<ul>%s</ul>',$output);
|
|
||||||
|
|
||||||
SystemMessage::factory()
|
|
||||||
->title(_('Record NOT updated'))
|
|
||||||
->type('error')
|
|
||||||
->body(_('Your updates didnt pass validation.').'<br/>'.$output);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo To add JS password validation (minimum length and both values equal)
|
if (Kohana::$environment >= Kohana::TESTING OR Request::current()->secure())
|
||||||
|
Script::factory()
|
||||||
|
->type('src')
|
||||||
|
->data('media/js/jquery/jquery.validate-1.11.1.min.js');
|
||||||
|
else
|
||||||
|
Script::factory()
|
||||||
|
->type('src')
|
||||||
|
->data('http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js');
|
||||||
|
|
||||||
|
Script::factory()
|
||||||
|
->type('stdin')
|
||||||
|
->data('
|
||||||
|
$("#reset").validate({
|
||||||
|
wrapper: "div",
|
||||||
|
errorElement: "span",
|
||||||
|
|
||||||
|
rules: {
|
||||||
|
password_confirm: {
|
||||||
|
equalTo: "input[name=password]",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
highlight: function(element) {
|
||||||
|
$(element).parents(".control-group").removeClass("success").addClass("error");
|
||||||
|
},
|
||||||
|
success: function(element) {
|
||||||
|
$(element).parents(".control-group").removeClass("error").addClass("success");
|
||||||
|
},
|
||||||
|
errorPlacement: function(error, element) {
|
||||||
|
error.appendTo(element.parents(".controls"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
');
|
||||||
|
|
||||||
Block::factory()
|
Block::factory()
|
||||||
->title(sprintf('Password Reset: %s',$this->ao->accnum()))
|
->title(sprintf('Password Reset: %s',$this->ao->accnum()))
|
||||||
->title_icon('icon-cog')
|
->title_icon('icon-cog')
|
||||||
|
->id('reset')
|
||||||
->type('form-horizontal')
|
->type('form-horizontal')
|
||||||
->body(View::factory('account/user/resetpassword')->set('o',$this->ao));
|
->body(View::factory('account/user/resetpassword')->set('o',$this->ao));
|
||||||
}
|
}
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OSB Affiliate
|
|
||||||
*
|
|
||||||
* @package OSB
|
|
||||||
* @category Models
|
|
||||||
* @author Deon George
|
|
||||||
* @copyright (c) 2009-2013 Open Source Billing
|
|
||||||
* @license http://dev.osbill.net/license.html
|
|
||||||
*/
|
|
||||||
class Model_Affiliate extends ORM_OSB {
|
|
||||||
}
|
|
||||||
?>
|
|
@ -17,34 +17,15 @@ class Model_Auth_UserDefault extends Model_Auth_User {
|
|||||||
array('min_length', array(':value', 4)),
|
array('min_length', array(':value', 4)),
|
||||||
array('max_length', array(':value', 32)),
|
array('max_length', array(':value', 32)),
|
||||||
),
|
),
|
||||||
'password' => array(
|
|
||||||
array('not_empty'),
|
|
||||||
array('min_length', array(':value', 5)),
|
|
||||||
array('max_length', array(':value', 32)),
|
|
||||||
),
|
|
||||||
'email' => array(
|
'email' => array(
|
||||||
array('not_empty'),
|
array('not_empty'),
|
||||||
array('min_length', array(':value', 4)),
|
array('min_length', array(':value', 4)),
|
||||||
array('max_length', array(':value', 127)),
|
array('max_length', array(':value', 127)),
|
||||||
array('email'),
|
array('email'),
|
||||||
),
|
),
|
||||||
// @todo To test
|
|
||||||
'password_confirm' => array(
|
|
||||||
array('matches_ifset', array(':validation', 'password', 'password_confirm')),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validation callbacks
|
|
||||||
// @todo _callbacks no longer used
|
|
||||||
protected $_callbacks = array(
|
|
||||||
'username' => array('username_available'),
|
|
||||||
'email' => array('email_available'),
|
|
||||||
);
|
|
||||||
|
|
||||||
// Columns to ignore
|
|
||||||
protected $_ignored_columns = array('password_confirm');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Complete our login
|
* Complete our login
|
||||||
*
|
*
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class overrides Kohana's Response
|
|
||||||
*
|
|
||||||
* @package OSB
|
|
||||||
* @category Modifications
|
|
||||||
* @author Deon George
|
|
||||||
* @copyright (c) 2009-2013 Open Source Billing
|
|
||||||
* @license http://dev.osbill.net/license.html
|
|
||||||
*/
|
|
||||||
class Response extends Kohana_Response {
|
|
||||||
// Append to the body.
|
|
||||||
public function bodyadd($content) {
|
|
||||||
$this->_body .= (string) $content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,27 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Array and variable validation.
|
|
||||||
*
|
|
||||||
* @package OSB
|
|
||||||
* @category Modifications
|
|
||||||
* @author Deon George
|
|
||||||
* @copyright (c) 2009-2013 Open Source Billing
|
|
||||||
* @license http://dev.osbill.net/license.html
|
|
||||||
*/
|
|
||||||
abstract class Valid extends Kohana_Valid {
|
|
||||||
/**
|
|
||||||
* Checks if a field matches the value of another field, if it is set.
|
|
||||||
* Field is ignored if it is blank.
|
|
||||||
*
|
|
||||||
* @param array array of values
|
|
||||||
* @param string field name
|
|
||||||
* @param string field name to match
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function matches_ifset($array, $field, $match)
|
|
||||||
{
|
|
||||||
return isset($array[$match]) ? ($array[$field] === $array[$match]) : TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,18 +0,0 @@
|
|||||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class supports affiliates
|
|
||||||
*
|
|
||||||
* @package Affiliate
|
|
||||||
* @category Models
|
|
||||||
* @author Deon George
|
|
||||||
* @copyright (c) 2009-2013 Open Source Billing
|
|
||||||
* @license http://dev.osbill.net/license.html
|
|
||||||
*/
|
|
||||||
class Model_Affiliate extends ORM_OSB {
|
|
||||||
// Relationships
|
|
||||||
protected $_belongs_to = array(
|
|
||||||
'host_server_affiliate'=>array('far_key'=>'affiliate_id','foreign_key'=>'id'),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
?>
|
|
@ -90,7 +90,7 @@ class Model_Service extends ORM_OSB {
|
|||||||
$expire = (is_null($plugin=$this->plugin()) ? NULL : $plugin->expire());
|
$expire = (is_null($plugin=$this->plugin()) ? NULL : $plugin->expire());
|
||||||
|
|
||||||
// If $expire is NULL, we'll use the next invoice date
|
// If $expire is NULL, we'll use the next invoice date
|
||||||
$expire = is_null($expire) ? $this->date_next_invoice-86400 : $expire;
|
$expire = is_null($expire) ? $this->paid_to() : $expire;
|
||||||
|
|
||||||
return $format ? Config::date($expire) : $expire;
|
return $format ? Config::date($expire) : $expire;
|
||||||
}
|
}
|
||||||
@ -128,6 +128,15 @@ class Model_Service extends ORM_OSB {
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the date we are invoiced to
|
||||||
|
*/
|
||||||
|
public function invoiced_to($format=FALSE) {
|
||||||
|
$x = $this->invoice_item->order_by('date_stop','DESC')->limit(1)->find();
|
||||||
|
|
||||||
|
return $format ? $x->display('date_stop') : $x->date_stop;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display the service product name
|
* Display the service product name
|
||||||
*/
|
*/
|
||||||
@ -136,7 +145,22 @@ class Model_Service extends ORM_OSB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns TRUE of this service has a planend change
|
* Returns the date that an item has been paid to
|
||||||
|
*/
|
||||||
|
public function paid_to($format=FALSE) {
|
||||||
|
$x = NULL;
|
||||||
|
|
||||||
|
foreach ($this->invoice_item->order_by('date_stop','DESC')->order_by('date_orig','DESC')->find_all() as $iio)
|
||||||
|
if ($iio->invoice->due() == 0) {
|
||||||
|
$x = $iio;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $format ? ($x ? $x->display('date_stop') : ' ') : ($x ? $x->date_stop : NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns TRUE of this service has a planned change
|
||||||
*/
|
*/
|
||||||
public function pending_change() {
|
public function pending_change() {
|
||||||
return $this->service_change()->loaded() ? TRUE : FALSE;
|
return $this->service_change()->loaded() ? TRUE : FALSE;
|
||||||
@ -219,18 +243,13 @@ class Model_Service extends ORM_OSB {
|
|||||||
return $this->invoice_item->order_by('date_start,date_stop');
|
return $this->invoice_item->order_by('date_start,date_stop');
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo To implement
|
|
||||||
public function charges_new() {
|
|
||||||
return $this->charges();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** LIST FUNCTIONS **/
|
/** LIST FUNCTIONS **/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search for services matching a term
|
* Search for services matching a term
|
||||||
*/
|
*/
|
||||||
public function list_autocomplete($term,$index,$value,array $label,array $limit=array(),array $options=NULL) {
|
public function list_autocomplete($term,$index,$value,array $label,array $limit=array(),array $options=NULL) {
|
||||||
// We only show invoice numbers.
|
// We only show service numbers.
|
||||||
if (! is_numeric($term))
|
if (! is_numeric($term))
|
||||||
return array();
|
return array();
|
||||||
|
|
||||||
|
@ -21,6 +21,12 @@
|
|||||||
<dd><?php echo HTML::anchor('product/view/'.$o->product_id,$o->product->title()); ?></dd>
|
<dd><?php echo HTML::anchor('product/view/'.$o->product_id,$o->product->title()); ?></dd>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
|
||||||
|
<dt>Invoiced To</dt>
|
||||||
|
<dd><?php echo $o->invoiced_to(TRUE); ?></dd>
|
||||||
|
|
||||||
|
<dt>Paid To</dt>
|
||||||
|
<dd><?php echo $o->paid_to(TRUE); ?></dd>
|
||||||
|
|
||||||
<dt>Date Next Invoice</dt>
|
<dt>Date Next Invoice</dt>
|
||||||
<dd><?php echo $o->display('date_next_invoice'); ?></dd>
|
<dd><?php echo $o->display('date_next_invoice'); ?></dd>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
* @copyright (c) 2009-2013 Open Source Billing
|
* @copyright (c) 2009-2013 Open Source Billing
|
||||||
* @license http://dev.osbill.net/license.html
|
* @license http://dev.osbill.net/license.html
|
||||||
*/
|
*/
|
||||||
class Task_SSL_Renew extends Task {
|
class Task_SSL_Renew extends Minion_Task {
|
||||||
/**
|
/**
|
||||||
* Renew a certificate
|
* Renew a certificate
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user