This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/application/classes/Model/Account.php

182 lines
4.5 KiB
PHP

<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* This Model manages both the accounts that users use to login to the system, as well as the account where services are owned.
*
* @package OSB
* @category Models
* @author Deon George
* @copyright (c) 2009-2013 Open Source Billing
* @license http://dev.osbill.net/license.html
*/
class Model_Account extends lnAuth_Model_Account {
// Relationships
protected $_has_many = array(
'user_tokens'=>array('model'=>'user_token'),
'email_log'=>array('far_key'=>'id'),
'group'=>array('through'=>'account_group'),
'invoice'=>array('far_key'=>'id'),
'payment'=>array('far_key'=>'id'),
'service'=>array('far_key'=>'id'),
);
protected $_has_one = array(
'RTM'=>array('far_key'=>'id'),
);
// Validation rules
public function rules() {
return array(
'username' => array(
array('not_empty'),
array('min_length', array(':value', 4)),
array('max_length', array(':value', 256)),
),
'email' => array(
array('not_empty'),
// @note: cant use unique emails, since multiple accounts may share the same email
// array(array($this, 'unique'), array('email', ':value')),
array('min_length', array(':value', 4)),
array('max_length', array(':value', 127)),
array('email'),
),
);
}
/** REQUIRED ABSTRACT METHODS **/
/** LOCAL METHODS **/
/**
* Get a list of all invoices for this account
*/
public function invoices($processed=FALSE) {
$o = $this->invoice;
return $processed ? $o->find_all() : $o->where_unprocessed()->find_all();
}
/**
* Get a list of due invoices for this account
*
* @param int Date (in secs) to only retrieve invoices prior to this date
*/
public function invoices_due($date=NULL) {
$result = array();
foreach ($this->invoices() as $io)
if ((is_null($date) OR $io->date_orig < $date) AND $io->due())
$result[$io->id] = $io;
return $result;
}
/**
* Calculate the total of invoices due for this account
*/
public function invoices_due_total($date=NULL,$format=FALSE) {
$result = 0;
foreach ($this->invoices_due($date) as $io)
$result += $io->due();
return $format ? Currency::display($result) : $result;
}
public function isAdmin() {
return ($this->RTM->loaded() AND is_null($this->RTM->parent_id));
}
/**
* Is this account a company account
*/
public function isCompany() {
return strlen($this->company) > 0;
}
public function isReseller() {
return $this->RTM->loaded();
}
/**
* Returns the company name if it exists, otherwise the persons name
*/
public function name($variable=NULL) {
return $this->isCompany() ? $this->company : $this->namesub();
}
/*
* Returns the persons name
*/
public function namesub($variable=NULL) {
return trim(sprintf('%s %s',$this->first_name,$this->last_name));
}
/**
* The key we use to sort entries of this model type
*/
public function sortkey($withcompany=FALSE) {
$sk = '';
if ($withcompany AND $this->company)
$sk .= $this->company.' ';
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
*/
public function list_autocomplete($term,$index,$value,array $label,array $limit=array(),array $options=array()) {
$ao = Auth::instance()->get_user();
$this->clear();
$this->where_active();
// Build our where clause
// First Name, Last name
if (preg_match('/\ /',$term)) {
list($fn,$ln) = explode(' ',$term,2);
$this->where_open()
->where_open()
->where('first_name','like','%'.$fn.'%')
->and_where('last_name','like','%'.$ln.'%')
->where_close()
->or_where('company','like','%'.$term.'%')
->where_close();
} elseif (is_numeric($term)) {
$this->where('id','like','%'.$term.'%');
} elseif (preg_match('/\@/',$term)) {
$this->where('email','like','%'.$term.'%');
} else {
$this->where_open()
->where('company','like','%'.$term.'%')
->or_where('first_name','like','%'.$term.'%')
->or_where('last_name','like','%'.$term.'%')
->where_close();
}
// Restrict results to authorised accounts
array_push($limit,array('id','IN',$ao->RTM->customers($ao->RTM)));
return parent::list_autocomplete($term,$index,$value,$label,$limit,array_merge($options,array('parentbypass'=>TRUE)));
}
}
?>