Updated Login to use lnapp, and minor update to Invoice

This commit is contained in:
Deon George 2016-08-17 22:30:12 +10:00
parent 07de13f678
commit c1cc6b6f69
10 changed files with 107 additions and 148 deletions

View File

@ -34,7 +34,7 @@ class Company {
} }
public function admin() { public function admin() {
return $this->so->account->name(); return $this->so->account;
} }
public function address($ln='<br/>') { public function address($ln='<br/>') {

View File

@ -11,6 +11,8 @@
* @also [logout] * @also [logout]
*/ */
class Controller_Login extends lnApp_Controller_Login { class Controller_Login extends lnApp_Controller_Login {
protected $login_attribute = 'username';
/** /**
* Enable site registration * Enable site registration
* *
@ -23,70 +25,5 @@ class Controller_Login extends lnApp_Controller_Login {
HTTP::redirect('login'); HTTP::redirect('login');
} }
/**
* Enable user password reset
*/
public function action_reset() {
// Minutes to keep our token
$token_expire = 15;
// If user already signed-in
if (Auth::instance()->logged_in())
HTTP::redirect('welcome/index');
// If the user posted their details to reset their password
if ($this->request->post()) {
// If the username is correct, create a method token
if ($this->request->post('username') AND ($ao=ORM::factory('Account',array('username'=>$this->request->post('username')))) AND $ao->loaded()) {
$mmto = ORM::factory('Module_Method_Token')
->method(array('account','user:resetpassword'))
->account($ao)
->uses(2)
->expire(time()+$token_expire*60);
if ($mmto->generate()) {
// Send our email with the token
// @todo Need to provide an option if Email_Template is not installed/activited.
// @todo Need to provide an option if account_reset_password template doesnt exist.
$et = Email_Template::instance('account_reset_password');
$et->to = array('account'=>array($mmto->account_id));
$et->variables = array(
'SITE'=>URL::base(TRUE,TRUE),
'SITE_ADMIN'=>Company::instance()->admin(),
'SITE_NAME'=>Company::instance()->name(),
'TOKEN'=>$mmto->token,
'TOKEN_EXPIRE_MIN'=>$token_expire,
'USER_NAME'=>$mmto->account->namesub(),
);
$et->send();
// Log the password reset
$ao->log('Password reset token sent');
}
// Redirect to our password reset, the Auth will validate the token.
} elseif ($this->request->query('token')) {
HTTP::redirect(URL::link('user','account/resetpassword?token='.$this->request->query('token')));
}
// Show our token screen even if the email was invalid.
if ($this->request->post('username'))
$output = View::factory('pages/login_reset_sent');
else
HTTP::redirect('login');
} else {
$output = View::factory('pages/login_reset');
}
Style::factory()
->type('file')
->data('media/theme/baseadmin/css/pages/login.css');
$this->template->content = $output;
$this->template->shownavbar = FALSE;
}
} }
?> ?>

View File

@ -127,6 +127,18 @@ class Model_Account extends lnApp_Model_Account {
return $sk.sprintf('%s %s',$this->last_name,$this->first_name); return $sk.sprintf('%s %s',$this->last_name,$this->first_name);
} }
/**
* Generate a token for non-login authorised functinos
*/
public function token($token_expire,$module,$method,$uses) {
return ORM::factory('Module_Method_Token')
->method(array($module,$method))
->account($this)
->uses($uses)
->expire(time()+$token_expire*60)
->generate();
}
/** /**
* Search for accounts matching a term * Search for accounts matching a term
*/ */

View File

@ -1,21 +0,0 @@
<div class="account-container stacked">
<div class="content clearfix">
<form method="post" action="<?php echo URL::site('login/reset'); ?>">
<h1>Reset Password</h1>
<p>If you have forgotten your password, we can issue you a temporary access code via email that will allow you to change your password.</p>
<div class="login-fields">
<p>To start this process, please enter your Username. If you dont know your Username, please contact us.</p>
<div class="field">
<label for="username">Username:</label>
<input type="text" id="username" name="username" value="" placeholder="Username" class="login username-field" required/>
</div> <!-- /field -->
</div> <!-- /login-fields -->
<div class="login-actions">
<button class="button btn btn-warning btn-large">Reset</button>
</div> <!-- /login-actions -->
</form>
</div> <!-- /content -->
</div> <!-- /account-container -->

View File

@ -97,6 +97,10 @@ class Model_Charge extends ORM {
return $iio; return $iio;
} }
public function name($variable=NULL) {
return StaticList_ItemType::get($this->type);
}
public function namesub($variable=NULL) { public function namesub($variable=NULL) {
return sprintf('%d@%2.2f - %s (%s)',$this->quantity,$this->amount,($this->description ? ' '.$this->description : '').($this->attributes ? ' ['.join('|',$this->attributes).']' : ''),$this->display('date_charge')); return sprintf('%d@%2.2f - %s (%s)',$this->quantity,$this->amount,($this->description ? ' '.$this->description : '').($this->attributes ? ' ['.join('|',$this->attributes).']' : ''),$this->display('date_charge'));
} }

View File

@ -4,7 +4,7 @@
<?php <?php
echo View::factory('field/date')->set('data',['field'=>'date_charge','value'=>$o->date_charge ? $o->date_charge : time(),'text'=>'Date Charge','enddate'=>'new Date()']); echo View::factory('field/date')->set('data',['field'=>'date_charge','value'=>$o->date_charge ? $o->date_charge : time(),'text'=>'Date Charge','enddate'=>'new Date()']);
echo View::factory('field/account')->set('data',['field'=>'account_id','value'=>$o->account_id,'text'=>'Account','name'=>sprintf('%s: %s',$o->account->refnum(),$o->account->name()),'ajaxurl'=>URL::link('reseller','charge/ajaxlist')]); echo View::factory('field/account')->set('data',['field'=>'account_id','value'=>$o->account_id,'text'=>'Account','name'=>$o->account_id ? sprintf('%s: %s',$o->account->refnum(),$o->account->name()) : '','ajaxurl'=>URL::link('reseller','charge/ajaxlist')]);
echo View::factory('field/select')->set('data',['field'=>'service_id','value'=>$o->account_id ? $o->account->service->list_select() : [],'text'=>'Service','default'=>$o->service_id,'class'=>'col-md-6']); echo View::factory('field/select')->set('data',['field'=>'service_id','value'=>$o->account_id ? $o->account->service->list_select() : [],'text'=>'Service','default'=>$o->service_id,'class'=>'col-md-6']);
echo View::factory('field/select')->set('data',['field'=>'sweep_type','value'=>Arr::merge([''=>''],StaticList_SweepType::table()),'text'=>'Sweep','default'=>is_null($o->sweep_type) ? 6 : $o->sweep_type,'class'=>'col-md-2']); echo View::factory('field/select')->set('data',['field'=>'sweep_type','value'=>Arr::merge([''=>''],StaticList_SweepType::table()),'text'=>'Sweep','default'=>is_null($o->sweep_type) ? 6 : $o->sweep_type,'class'=>'col-md-2']);
echo View::factory('field/select')->set('data',['field'=>'type','value'=>Arr::merge([''=>''],StaticList_ItemType::table()),'text'=>'Item Type','default'=>$o->type,'class'=>'col-md-2']); echo View::factory('field/select')->set('data',['field'=>'type','value'=>Arr::merge([''=>''],StaticList_ItemType::table()),'text'=>'Item Type','default'=>$o->type,'class'=>'col-md-2']);

View File

@ -185,24 +185,34 @@ class Model_Invoice extends ORM implements Cartable {
$result = array(); $result = array();
$lo = $this->account->language; $lo = $this->account->language;
foreach ($this->subitems() as $iio) { $track['p'] = $track = array();
// We only summarise item_type=0 foreach ($this->items_render() as $key => $items) {
if (! $iio->item_type == 0) switch ($key) {
continue; case 's':
$last = '';
foreach ($items as $iio) {
if ($iio->product) { if ($iio->product) {
$p = $iio->product->name($lo); $p = $iio->title($lo);
}
if (! isset($result[$p])) { if (! isset($result[$p])) {
$result[$p]['quantity'] = 0; $result[$p]['quantity'] = 0;
$result[$p]['subtotal'] = 0; $result[$p]['subtotal'] = 0;
} }
$result[$p]['quantity']++; $result[$p]['quantity']++;
$result[$p]['subtotal'] += $iio->subtotal(); $result[$p]['subtotal'] += $iio->subtotal();
}
break;
case 'other':
break;
} }
} }
ksort($result);
return $result; return $result;
} }

View File

@ -170,6 +170,9 @@ class Model_Invoice_Item extends ORM {
if (! $this->isValid()) if (! $this->isValid())
return sprintf('Record Error [%s-%s]',$this->item_type,$this->id); return sprintf('Record Error [%s-%s]',$this->item_type,$this->id);
if (is_null($variable) OR ! $variable instanceof Model_Language)
$variable = Site::language();
switch ($this->item_type) { switch ($this->item_type) {
case 0: case 0:
case 2: case 2:
@ -278,6 +281,25 @@ class Model_Invoice_Item extends ORM {
return $result; return $result;
} }
public function title(Model_Language $lo) {
if (! $this->isValid())
return 'Record Error';
switch ($this->item_type) {
case 0:
case 2:
case 3:
case 4:
return $this->product->name($lo);
case 5:
return $this->_module()->name($lo);
case 124:
return StaticList_ItemType::get($this->item_type);
default:
return 'Unknown';
}
}
public function total($format=FALSE) { public function total($format=FALSE) {
$result = $this->void ? 0 : $this->subtotal()+$this->tax()-$this->discount(); $result = $this->void ? 0 : $this->subtotal()+$this->tax()-$this->discount();

@ -1 +1 @@
Subproject commit a7616960f01f1019ecf2fe041a06af0d67a5e697 Subproject commit 2b48dde8f7297e49914e742d85e14783d900902c

View File

@ -1,61 +1,56 @@
<div class="span11"> <fieldset class="col-md-12">
<fieldset> <legend>SSL CA Certificate Edit/Update</legend>
<legend>SSL CA Certificate Edit/Update</legend>
<div class="dl-horizontal"> <div class="dl-horizontal">
<dt>Subject</dt> <dt>Subject</dt>
<dd><?php echo $o->subject(); ?></dd> <dd><?php echo $o->subject(); ?></dd>
<dt>DN</dt> <dt>DN</dt>
<dd><?php echo $o->dn(); ?></dd> <dd><?php echo $o->dn(); ?></dd>
<dt>Serial</dt> <dt>Serial</dt>
<dd><?php echo $o->serial(); ?></dd> <dd><?php echo $o->serial(); ?></dd>
<dt>Subject Key Id</dt> <dt>Subject Key Id</dt>
<dd><?php echo $o->ski(); ?></dd> <dd><?php echo $o->ski(); ?></dd>
<?php if (! $o->isRoot()) : ?> <?php if (! $o->isRoot()) : ?>
<dt>Issuer</dt> <dt>Issuer</dt>
<dd> <dd>
<?php if ($o->validParent()) : ?> <?php if ($o->validParent()) : ?>
<?php echo HTML::anchor(URL::link('reseller','ssl/edit/').$o->parent_ssl_ca_id,$o->issuer()); ?> <?php echo HTML::anchor(URL::link('reseller','ssl/edit/').$o->parent_ssl_ca_id,$o->issuer()); ?>
<?php else : ?> <?php else : ?>
<?php echo $o->issuer(); ?> <?php echo $o->issuer(); ?>
<?php endif ?> <?php endif ?>
</dd> </dd>
<dt>Issuer Serial</dt> <dt>Issuer Serial</dt>
<dd><?php printf('%s (%s)',$o->aki_keyid(), $o->aki_serial()); ?></dd> <dd><?php printf('%s (%s)',$o->aki_keyid(), $o->aki_serial()); ?></dd>
<dt>Issuer Valid</dt> <dt>Issuer Valid</dt>
<dd><?php echo $o->validParent(TRUE); ?></dd> <dd><?php echo $o->validParent(TRUE); ?></dd>
<?php endif ?> <?php endif ?>
<dt>Valid From</dt> <dt>Valid From</dt>
<dd><?php echo $o->valid_from(TRUE); ?></dd> <dd><?php echo $o->valid_from(TRUE); ?></dd>
<dt>Valid To</dt> <dt>Valid To</dt>
<dd><?php echo $o->valid_to(TRUE); ?></dd> <dd><?php echo $o->valid_to(TRUE); ?></dd>
<dt>Hash</dt> <dt>Hash</dt>
<dd><?php echo $o->hash(); ?></dd> <dd><?php echo $o->hash(); ?></dd>
<dt>Version</dt> <dt>Version</dt>
<dd><?php echo $o->version(); ?></dd> <dd><?php echo $o->version(); ?></dd>
<dt>Key Algorithm<dt> <dt>Key Algorithm<dt>
<dd><?php echo $o->algorithm(); ?></dd> <dd><?php echo $o->algorithm(); ?></dd>
</div> <!-- /dl-horizontal --> </div> <!-- /dl-horizontal -->
</fieldset>
<?php echo Form::textarea('sign_pk',$o->sign_pk,array('class'=>'span6','label'=>'Private Key','placeholder'=>'Private Key','style'=>'font-family: monospace;','rows'=>Form::textarea_rows($o->sign_pk))); ?> <?php
<?php echo Form::textarea('sign_cert',$o->sign_cert,array('class'=>'span6','label'=>'Public Certificate','placeholder'=>'Public Certificate','style'=>'font-family: monospace;','rows'=>Form::textarea_rows($o->sign_cert))); ?> echo View::factory('field/textarea')->set('data',['field'=>'sign_pk','value'=>$o->sign_pk,'text'=>'Private Key']);
echo View::factory('field/textarea')->set('data',['field'=>'sign_cert','value'=>$o->sign_cert,'text'=>'Public Certificate']);
<div class="row"> echo View::factory('field/submit');
<div class="offset2"> ?>
<button type="submit" class="btn btn-primary">Save changes</button> </fieldset>
<button type="button" class="btn">Cancel</button>
</div>
</div>
</div> <!-- /span -->