Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 904

Přidáno uživatelem Jiří Sviták před více než 13 roky(ů)

Slouceni stavajicich zmen do hlavni vetve.

Zobrazit rozdíly:

freenetis/trunk/kohana/application/i18n/cs_CZ/texts.php
'add new whole device for user' => 'Přidat nové celé zařízení pro uživatele',
'add new work' => 'Přidat novou práci',
'add new work report' => 'Přidat nový pracovní výkaz',
'add private phone number contact' => 'Přidat soukromý telefoní kontakt',
'add private phone number contact' => 'Přidat soukromý telefonní kontakt',
'add redirection to all ip addresses of member' => 'Přidat přesměrování všem IP adresám člena',
'add smokeping menu item' => 'Přidat položku menu smokepingu',
'add smokeping record' => 'Přidat záznam smokepingu',
......
'admins were succesfully imported' => 'Správci byli úspěšně importováni',
'advanced configuration' => 'Pokročilé nastavení',
'advanced information' => 'Pokročilé informace',
'after you will solve previous problems, you can turn them on in' => 'Až vyřešíte přecházející problémy, můžete je zapnout v',
'after you\'ve done that, click login' => 'Poté, co to dokončíte, klikněte na "Přihlásit".',
'after you\'ve done that, you can continue' => 'Poté, co tak učiníte, můžete pokračovat.',
'agree' => 'Souhlas',
......
'back to login' => 'Zpět na přihlášení',
'back to the list of unread messages' => 'Zpět na seznam nepřečtených zpráv',
'back to messages for redirection' => 'Zpět na zprávy pro přesměrování',
'back to phone invoices' => 'Zpět na telefoní účty',
'back to phone invoice' => 'Zpět na telefoní účet',
'back to phone invoices' => 'Zpět na telefonní účty',
'back to phone invoice' => 'Zpět na telefonní účet',
'back to ports list' => 'Zpět na seznam portů',
'back to profile of association' => 'Zpět na profil sdružení',
'back to project accounts' => 'Zpět na projektové účty',
......
'bitrate' => 'Rychlost přenosu',
'before getting started, we need some information on the database' => 'Předtím než začneme, potřebujeme několik informací o databázi.',
'both' => 'obojí',
'but i can\'t set file permission to 660' => 'Ale nemůžu nastavit oprávnění souboru na 660',
'but i can\'t write the configphp file' => 'Ale nemůžu zapisovat do souboru <code>config.php</code>.',
'but i can\'t write the htaccess file' => 'Ale nemůžu zapisovat do souboru <code>.htaccess</code>.',
'but there are some problems' => 'Ale je zde několik problémů',
'buy date' => 'Datum koupě',
'cancel' => 'Zrušit',
'called number' => 'Volané číslo',
......
'credit subaccounts' => 'Kreditní podúčty',
'csv file template' => 'Šablona CSV souboru',
'csv file templates' => 'Šablony CSV souborů',
'currency' => 'Měna',
'current application password is' => 'Současné aplikační heslo je',
'current credit' => 'Současný kredit',
'currency' => 'Měna',
'currently clean urls are turn off' => 'V současné době jsou čistá URL vypnuta.',
'czk' => 'Kč',
'database' => 'Databáze',
'database has been successfully updated' => 'Databáze byla úspěšně upravena.',
......
'do you want to delete this device including all its interfaces and ip adresses' => 'Chcete smazat toto zařízení včetně všech rozhraní a IP adres',
'do you want to delete this interface' => 'Chcete smazat toto rozhraní',
'do you want to delete this ip address' => 'Chcete smazat tuto IP adresu',
'do you want to delete this phone invoice' => 'Chcete smazat tuto telefoní fakturu',
'do you want to delete this phone invoice' => 'Chcete smazat tuto telefonní fakturu',
'do you want to delete this port' => 'Chcete smazat tento port',
'do you want to delete this rule' => 'Chcete smazat toto pravidlo',
'do you want to delete this smokeping record' => 'Chcete smazat tento záznam smokepingu',
......
'edit member limit' => 'Upravit limit člena',
'edit message' => 'Upravit zprávu',
'edit port' => 'Úprava portu',
'edit private phone number contact' => 'Upravit soukromý telefoní kontakt',
'edit private phone number contact' => 'Upravit soukromý telefonní kontakt',
'edit redirection message' => 'Úprava zprávy přesměrování',
'edit registrations' => 'Upravit přihlášky',
'edit routerboard backup' => 'Upravit zálohu routerboardu',
......
'good' => 'Dobré',
'gps' => 'GPS souřadnice',
'group' => 'Skupina',
'group selection by same phone number' => 'Sdružovat výběry dle telefoních čísel',
'group selection by same phone number' => 'Sdružovat výběry dle telefonních čísel',
'groups of users' => 'Skupiny uživatelů',
'growth of members' => 'Růst členů',
'hello' => 'Dobrý den',
......
'htaccess file hasn\'t been successfully created' => 'Soubor .htaccess nebyl úspěšně vytvořen.',
'i' => 'P',
'i accept this message and i want to cancel this redirection' => 'Beru na vědomí tuto zprávu a chci zrušit toto přesměrování',
'i can\'t set file permission to 660' => 'Nemůžu nastavit oprávnění souboru na 660',
'i can\'t write the configphp file' => 'Nemůžu zapisovat do souboru <code>config.php</code>.',
'i can\'t write the htaccess file' => 'Nemůžu zapisovat do souboru <code>.htaccess</code>.',
'id' => 'ID',
'id of member' => 'ID člena',
'if for any reason this automatic config file creation doesn\'t work, don\'t worry' => 'Jestliže z nějakého důvodu toto automatické vytvoření konfiguračního souboru nebude fungovat, nezoufejte.',
......
'install' => 'Instalovat',
'installation' => 'Instalace',
'installation done' => 'Instalace hotova',
'installation has been finished' => 'Instalace byla dokončena.',
'installation has been successfully finished' => 'Instalace byla úspěšně dokončena.',
'interests' => 'Úroky',
'interests nr' => 'Počet úroků',
......
'my profile' => 'Můj profil',
'my transfers' => 'Moje převody',
'my users' => 'Moji uživatelé',
'my voip calls' => 'Moje VoIP hovory',
'my works' => 'Moje práce',
'n' => 'U',
'name' => 'Jméno',
......
'please choose language' => 'Prosím vyberte jazyk',
'please enter the code you received in an sms message' => 'Prosím vložte kód, který jste obdrželi v SMS zprávě',
'please fill in the form with information about your association' => 'Prosím, vyplňte formulář údaji o vašem sdružení',
'please report this error as bug using form below' => 'Nahlaště prosím tuto chybu jako bug tímto formulářem',
'please select a method of obtaining a password and follow the instructions' => 'Prosím zvolte způsob získání hesla a pokračujte dle instrukcí',
'please use button to save form' => 'Použijte prosím tlačítko pro uložení formuláře',
'polarization' => 'Polarizace',
......
'send date' => 'Datum odeslání',
'send e-mail' => 'Pošli e-mail',
'send e-mail notification after expiration' => 'Poslat zprávu na e-mail po vypršení přesměrování',
'send error report' => 'Zaslat chybové hlášení',
'send money to other account' => 'Poslat peníze na jiný účet',
'send sms' => 'Pošli SMS',
'send sms message' => 'Poslat SMS zprávu',
......
'sent message' => 'Odeslaná zpráva',
'september' => 'Září',
'service' => 'Služba',
'server error' => 'Chyba serveru',
'settings' => 'Nastavení',
'settings for configuration files has been successfully updated' => 'Nastavení pro kofigurační soubory bylo úspěšně upraveno',
'setup config' => 'Nastavení konfigurace',
......
'show answer for this message' => 'Zobrazit odpověď na tuto zprávu',
'show approval template' => 'Zobrazit hlasovací šablonu',
'show approval type' => 'Zobrazit hlasovací typ',
'show calls of whole member' => 'Zobrazit hovory celého člena',
'show clouds' => 'Zobrazit oblasti',
'show details' => 'Zobrazit detaily',
'show devices' => 'Zobrazit zařízení',
......
'you have no permission to delete redirection' => 'Nemáte práva ke smazání přesměrování',
'you have no permission to edit redirection' => 'Nemáte práva k úpravám přesměrování',
'you have to set up it by yourself:' => 'Budete jej muset nastavit ručně:',
'you must create it manually and paste the following text into it' => 'Musíte jej vytvořit ručně a zkopírovat do něj následující text.',
'you must create it manually and paste the following text into it' => 'Musíte jej vytvořit ručně a zkopírovat do něj následující text',
'you will need to know the following items before proceeding' => 'Budete potřebovat znát následující položky před pokračováním:',
'your ip address has not been found in database' => 'Vaše IP adresa nebyla nalezena v databázi.',
'your accout has been locked' => 'Váš účet byl uzamčen.',
freenetis/trunk/kohana/application/i18n/cs_CZ/core.php
<?php defined('SYSPATH') or die('No direct access allowed.');
$lang = array
(
'display stack trace' => 'Zobrazit trasování zásobníku',
'error_message' => 'Chyba se vyskytla na <strong>řádku %s</strong> souboru <strong>%s</strong>.',
'please report this error as bug using form below' => 'Nahlašte prosím tuto chybu jako bug tímto formulářem',
'send error report' => 'Zaslat chybové hlášení',
'server error' => 'Chyba serveru',
'stack_trace' => 'Trasování zásobníku',
'stats_footer' => 'Načteno za {execution_time} sekund, použito {memory_usage} paměti. Generovánou Kohanou v{kohana_version}.',
'unknown error' => 'Neznámá chyba',
);
?>
freenetis/trunk/kohana/application/helpers/url.php
exit('<a href="'.$uri.'">'.$uri.'</a>');
}
/**
* Creates URL from URI
*
* @author Michal Kliment
* @param string $uri
* @return string
*/
public static function create ($uri)
{
return (substr(strtolower($uri),0,7) != 'http://' && substr(strtolower($uri),0,8) != 'https://' && substr(strtolower($uri),0,6) != 'ftp://') ? 'http://'.$uri : $uri;
}
} // End url
freenetis/trunk/kohana/application/helpers/date.php
return num::null_fill($hours,2).':'.num::null_fill($minutes,2).':'.num::null_fill($seconds,2);
}
/**
* Rounds date up
*
* @author Michal Kliment
* @param int $day
* @param int $month
* @param int $year
* @return bool
*/
public function round_up (&$day, &$month, &$year)
{
if ($day >= 15)
{
$month++;
if ($month == 13)
{
$month = 1;
$year++;
}
$day = 1;
return true;
}
else
return false;
}
/**
* Rounds date down
*
* @author Michal Kliment
* @param int $day
* @param int $month
* @param int $year
* @return boolean
*/
public function round_down (&$day, &$month, &$year)
{
if ($day < 15)
{
$month--;
if ($month == 0)
{
$month = 12;
$year--;
}
$day = date::days_of_month($month);
return true;
}
else
return false;
}
} // End date
freenetis/trunk/kohana/application/helpers/callback.php
echo html::image(array('src' => url::base().'media/images/'.$state.'.png', 'title' => url_lang::lang('texts.'.$state)));
}
/**
* Callback to print caller
*
* @author Michal Kliment
* @param <type> $item
* @param <type> $name
* @param <type> $args
*/
public static function voip_caller($item, $name, $args = array())
{
$number = VoIP_calls_Controller::parse_number(substr($item->caller, 4, strlen($item->caller) - 4));
echo VoIP_calls_Controller::number($number, $args[0], $args[1]);
}
/**
* Callback to print called
*
* @author Michal Kliment
* @param <type> $item
* @param <type> $name
* @param <type> $args
*/
public static function voip_callcon($item, $name, $args = array())
{
$number = VoIP_calls_Controller::parse_number(substr($item->callcon, 4, strlen($item->callcon) - 4),$item->area);
echo VoIP_calls_Controller::number($number, $args[0], $args[1]);
}
}
freenetis/trunk/kohana/application/helpers/text.php
return strtr($s, $tbl);
}
/**
* Prints phone number in pretty format
*
* @author Michal Kliment
* @param string $number
* @param string $country_code
* @return string
*/
public static function phone_number ($number, $country_code)
{
$val = $country_code . ' ';
$length = strlen($number);
$pointer = $length % 3;
if ($pointer)
{
$val .= substr($number, 0, $pointer).' ';
}
while ($pointer < $length)
{
$val .= substr($number, $pointer, 3).' ';
$pointer +=3;
}
return $val;
}
} // End text
freenetis/trunk/kohana/application/models/fee.php
}
/**
* Returns regular member fee of member in date
*
* @author Michal Kliment
* @param int $member_id
* @param string $date
* @return int
*/
public function get_regular_member_fee_by_member_date ($member_id, $date)
{
$fee = $this->get_fee_by_member_date_type ($member_id, $date, 'regular member fee');
if ($fee && $fee->id)
return $fee->fee;
$default_fee = $this->get_default_fee_by_date_type ($date, 'regular member fee');
if ($default_fee && $default_fee->id)
return $default_fee->fee;
return 0;
}
/**
* Returns fee by special type
*
* @author Michal Kliment
freenetis/trunk/kohana/application/models/device.php
WHERE device_id = $device_id
");
}
/**
* Returns all member's devices with debt payments
*
* @author Michal Kliment
* @param int $member_id
* @return MySQL_Result object
*/
public function get_member_devices_with_debt_payments ($member_id)
{
return $this->db->query("
SELECT price, payment_rate, buy_date FROM devices d
LEFT JOIN users u ON d.user_id = u.id
WHERE u.member_id = ? AND price IS NOT NULL AND price > 0
", array($member_id));
}
}
freenetis/trunk/kohana/application/models/user.php
", array($user_id, Contact_Model::TYPE_EMAIL));
}
/**
* Returns user by phone number and country code
*
* @author Michal Kliment
* @param string $number
* @param string $country_code
* @return MySQL_Result object
*/
public function get_user_by_phone_number_country_code ($number, $country_code)
{
return $this->db->query("
SELECT u.* FROM contacts c
JOIN contacts_countries cc ON cc.contact_id = c.id
JOIN countries t ON t.id = cc.country_id
JOIN users_contacts uc ON uc.contact_id = c.id
JOIN users u ON uc.user_id = u.id
WHERE c.value LIKE ? AND t.country_code LIKE ?
LIMIT 0,1
", array($number, $country_code))->current();
}
public function get_aro_groups_of_user($user_id)
{
return $this->db->query("
SELECT ag.id, ag.name
FROM aro_groups ag
JOIN groups_aro_map gam ON ag.id = gam.group_id
JOIN aro a ON a.id = gam.aro_id
WHERE a.id = $user_id
");
}
}
?>
freenetis/trunk/kohana/application/models/members_traffic.php
* @license http://www.gnu.org/licenses/gpl.txt
*/
class Members_traffic_Model extends Model
class Members_traffic_Model extends ORM
{
protected $belongs_to = array('member');
/**
* Returns all traffics of members
*
......
}
/**
* Returns actual traffic of member
*
* @author Michal Kliment
* @param int $member_id
* @return MySQL_Result object
*/
public function get_member_traffic ($member_id)
{
return $this->db->query("
SELECT
IFNULL(SUM(upload),0) AS upload,
IFNULL(SUM(download),0) AS download,
IFNULL(active,0) AS active
FROM members_traffics t WHERE t.member_id = ?
", array($member_id))->current();
}
/**
* Cleans (truncate table) traffics of members
*
* @author Michal Kliment
freenetis/trunk/kohana/application/models/members_traffics_daily.php
}
/**
* Returns total traffics of member
*
* @author Michal Kliment
* @param int $member_id
* @return MySQL_Result object
*/
public function get_total_member_traffic ($member_id)
{
return $this->db->query("
SELECT
IFNULL(SUM(upload),0) AS upload,
IFNULL(SUM(download),0) AS download
FROM members_traffics_daily d WHERE d.member_id = ?
", array($member_id))->current();
}
/**
* Updates daily traffics of members
*
* @author Michal Kliment
freenetis/trunk/kohana/application/models/member.php
*/
class Member_Model extends ORM
{
protected $has_many = array('invoices', 'users', 'accounts',
'transfers', 'bank_accounts', 'membership_interrupts');
protected $has_one = array('members_traffic');
protected $has_many = array('invoices', 'users', 'accounts', 'transfers', 'bank_accounts', 'membership_interrupts');
protected $belongs_to = array('address_point','user');
// filtering by redirection
......
{
return $this->db->select(
array('members.registration', 'members.name as namem', 'members.address_point_id',
'members.variable_symbol',
'members.variable_symbola',
'members.type as typem', 'members.organization_identifier', 'members.qos_ceil', 'members.qos_rate',
'members.entrance_fee', 'members.debt_payment_rate',
'members.entrance_date', 'members.comment', 'members.locked',
freenetis/trunk/kohana/application/models/membership_interrupt.php
}
/**
* Function tries to find membership interrupt in given month, for example 2009-09-01.
* @param $member_id
* @param $month
* @return unknown_type
*/
function has_mi_in_month($member_id, $month)
* Checks if member has membership interrupt in given date
*
* @author Michal Kliment
* @param <type> $member_id
* @param <type> $date
* @return <type>
*/
function has_member_interrupt_in_date($member_id, $date)
{
$query = $this->db->query("SELECT mi.*
FROM membership_interrupts mi
WHERE mi.member_id = $member_id
AND mi.from <= '$month'
AND mi.to > '$month'
");
return (bool) count($query);
return (bool) $this->db->query("
SELECT COUNT(*) AS count FROM membership_interrupts mi
JOIN members_fees mf ON mi.members_fee_id = mf.id
WHERE mi.member_id = ? AND ? BETWEEN mf.activation_date AND mf.deactivation_date
", array($member_id, $date))->current()->count;
}
/**
freenetis/trunk/kohana/application/models/country.php
return $list;
}
/**
* Finds country by area (in VoIP)
*
* @author Michal Kliment
* @param string $area
* @return MySQL_Result object
*/
public function find_country_by_area ($area)
{
return $this->db->query("
SELECT * FROM countries
WHERE ? LIKE CONCAT( country_name, '%' )
LIMIT 0,1
", array($area))->current();
}
}
?>
freenetis/trunk/kohana/application/controllers/installation.php
// check if the database is empty
if ($this->settings->get('db_schema_version'))
url::redirect(url_lang::base().'members/show/'.$this->session->get('member_id'));
/**
* finds default currency and country from lang
* @todo do it better, maybe from some special table
*/
switch (Config::get('lang'))
{
// language is czech
case 'cs':
$currency = 'CZK';
$country_id = 55;
break;
default:
$currency = 'USD';
$country_id = 223;
break;
}
// form
$form = new Forge(url_lang::base()."installation", '', 'POST', array('id' => 'article_form'));
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
......
// system
$form->group('')->label(url_lang::lang('texts.System'));
$form->input('title')->label(url_lang::lang('texts.Page title').':')->value('Freenetis')->rules('required');
$form->dropdown('default_country')->label(url_lang::lang('texts.Country').':')->rules('required')->options(self::$COUNTRIES);
$form->input('currency')->label(url_lang::lang('texts.Currency').':')->rules('required');
$form->dropdown('default_country')->label(url_lang::lang('texts.Country').':')->rules('required')->options(self::$COUNTRIES)->selected($country_id);
$form->input('currency')->label(url_lang::lang('texts.Currency').':')->rules('required')->value($currency);
$form->radio('clean_urls')->label(url_lang::lang('texts.Clean URLs').':')->options(array('1'=>url_lang::lang('texts.Yes'),'0'=>url_lang::lang('texts.No')))->default(1);
// submit button
$form->submit('submit')->value(url_lang::lang('texts.Install'));
......
$fee_model->save();
}
// array for store error
$errors = array();
$clean_urls = ($form_data['clean_urls'] && server::is_mod_rewrite_enabled());
// want clean urls - remove index.php from urls
if ($clean_urls)
$this->settings->set('index_page', 0);
else
$this->settings->set('index_page', 1);
// set base domain
$this->settings->set('domain', server::http_host());
......
// want clean urls
if ($clean_urls)
{
// load .htaccess sample file
$htaccessFile = file('.htaccess-sample');
foreach ($htaccessFile as $line_num => $line)
// it is not re-install
if (!file_exists('.htaccess'))
{
// find line with RewriteBase
if (preg_match("/^RewriteBase (.+)/", $line, $matches))
// load .htaccess sample file
$htaccessFile = file('.htaccess-sample');
foreach ($htaccessFile as $line_num => $line)
{
// and set there our suffix (subdirectory)
$htaccessFile[$line_num] = preg_replace("/^(RewriteBase )(.+)/", '${1}'.$suffix, $line);
// find line with RewriteBase
if (preg_match("/^RewriteBase (.+)/", $line, $matches))
{
// and set there our suffix (subdirectory)
$htaccessFile[$line_num] = preg_replace("/^(RewriteBase )(.+)/", '${1}'.$suffix, $line);
}
}
}
// root directory is not writable, only generate code and howto to create config file by user
if (!is_writable('.'))
{
$textarea = '';
foreach ($htaccessFile as $line)
$textarea .= htmlentities ($line);
// root directory is not writable, only generate code and howto to create config file by user
if (!is_writable('.'))
{
$errors['writable'] = TRUE;
$view->textarea = '<textarea cols="90" rows="15">'.$textarea.'</textarea>';
}
// root directory is writable, create .htacess
else
{
$handle = fopen('.htaccess', 'w');
foreach($htaccessFile as $line )
$textarea = '';
foreach ($htaccessFile as $line)
$textarea .= htmlentities ($line);
$view->textarea = '<textarea cols="90" rows="15">'.$textarea.'</textarea>';
}
// root directory is writable, create .htacess
else
{
fwrite($handle, $line);
}
fclose($handle);
$handle = @fopen('.htaccess', 'w');
if (!@chmod('.htaccess', 0666))
$view->chmod_error = 1;
if (!$handle)
$errors['fopen'] = TRUE;
else
{
foreach($htaccessFile as $line )
fwrite($handle, $line);
fclose($handle);
if (!@chmod('.htaccess', 0666))
$errors['chmod'] = TRUE;
}
}
}
// no errors
if (!count($errors))
{
// remove index.php from urls
$this->settings->set('index_page', 0);
}
}
$view->errors = $errors;
$view->render(TRUE);
}
else
freenetis/trunk/kohana/application/controllers/private_phone_contacts.php
}
$view = new View('main');
$view->title = url_lang::lang('texts.Add private phone number');
$view->title = url_lang::lang('texts.Add private phone number contact');
$view->content = new View('private_phone_contacts');
$view->content->title = url_lang::lang('texts.Add private phone number contact');
$view->content->form = $form->html();
......
}
$view = new View('main');
$view->title = url_lang::lang('texts.Edit private phone number');
$view->title = url_lang::lang('texts.Edit private phone number contact');
$view->content = new View('private_phone_contacts');
$view->content->title = url_lang::lang('texts.Edit private phone number contact');
$view->content->form = $form->html();
freenetis/trunk/kohana/application/controllers/users.php
{
$voip = html::anchor(url_lang::base().'voip/show/'.$voip->current()->user_id,$voip->current()->name);
}
$aro_groups = $model_users->get_aro_groups_of_user($user_id);
$view = new View('main');
$view->title = url_lang::lang('texts.Display user');
$view->content = new View('users_show');
......
$view->content->contact_types = $arr_contact_types;
$view->content->message = $this->session->get_once('message');
$view->content->voip = $voip;
$view->content->aro_groups = $aro_groups;
$view->render(TRUE);
} // end of show function
freenetis/trunk/kohana/application/controllers/bank_transfers.php
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
$form->group('')->label(url_lang::lang('texts.Payment'));
$form->dropdown('name')->label(url_lang::lang('texts.Destination credit account').':')->options($arr_accounts)->selected(0);
$form->input('correct_vs')->label(url_lang::lang('texts.Or enter correct variable symbol').':')->callback(array($this, 'valid_var_sym'));
$form->input('correct_vs')->label(url_lang::lang('texts.Or enter correct variable symbol').':')->callback(array($this, 'valid_correct_vs'));
$form->input('text')->label(url_lang::lang('texts.Text').':')->rules('required')->value(url_lang::lang('texts.Assigning of unidentified payment'));
$form->group('')->label(url_lang::lang('texts.Penalty'));
$form->input('penalty')->label(url_lang::lang('texts.Penalty').':')->value($penalty_fee)->rules('valid_numeric');
......
$t->member_id = $member_id;
$t->save_throwable();
// then we create a new transfer to the selected member's account
/*
$t->clear();
$t->member_id = $member_id;
$t->origin_id = $bt->destination_id;
$t->destination_id = $dst_id;
$t->previous_transfer_id = $bt->id;
$t->user_id = $this->session->get('user_id');
$t->datetime = $bt->datetime;
$t->creation_datetime = $time_now;
$t->text = $form_data['text'];
$t->amount = $bt->amount;
$identified_saved = $t->save();
*/
Transfer_Model::insert_transfer($bt->destination_id, $dst_id, $bt->id, $member_id,
$user_id, null, $bt->datetime, $creation_datetime, $form_data['text'], $bt->amount);
......
foreach ($next_ts as $transfer)
{
$transfer->member_id = $member_id;
$transfer->save_trowable();
$transfer->save_throwable();
}
// also penalty should be generated
$operating = ORM::factory('account')->where('account_attribute_id', Account_attribute_Model::$operating)->find();
if ($form_data['penalty'] > 0)
{
/*
$pen = new Transfer_Model();
$pen->origin_id = $dst_id;
$pen->destination_id = $operating->id;
$pen->previous_transfer_id = $bt->id;
$pen->user_id = $this->session->get('user_id');
$pen->datetime = $bt->datetime;
$pen->creation_datetime = $time_now;
$pen->text = $form_data['penalty_text'];
$pen->amount = $form_data['penalty'];
$pen_save = $pen->save();
*/
Transfer_Model::insert_transfer($dst_id, $operating->id, $bt->id, null,
$user_id, null, $bt->datetime, $creation_datetime, $form_data['penalty_text'], $form_data['penalty']);
}
// transfer fee, if it has to be generated
if ($form_data['transfer_fee'] > 0)
{
/*
$tf = new Transfer_Model();
$tf->origin_id = $dst_id;
$tf->destination_id = $operating->id;
$tf->previous_transfer_id = $bt->id;
$tf->user_id = $this->session->get('user_id');
$tf->datetime = $bt->datetime;
$tf->creation_datetime = $time_now;
$tf->text = $form_data['fee_text'];
$tf->amount = $form_data['transfer_fee'];
$tf_saved = $tf->save();
*/
Transfer_Model::insert_transfer($dst_id, $operating->id, $bt->id, null,
$user_id, null, $bt->datetime, $creation_datetime, $form_data['fee_text'], $form_data['transfer_fee']);
}
......
/**
* Function validates variable symbol.
* Do not control by javascript! Let it possible to leave variable symbol empty.
* Target account for assigning unidentified transfer can be selected separately.
* @author Jiri Svitak
* @param $input
* @return unknown_type
*/
function valid_var_sym($input)
function valid_correct_vs($input)
{
if ($this->input->post('name') == 0)
{
freenetis/trunk/kohana/application/controllers/members.php
*/
function show($member_id = NULL, $order_by = 'member_id', $order_by_direction = 'ASC')
{
if (!isset($member_id))
// parameter is wrong
if (!$member_id || !is_numeric($member_id))
Controller::warning(PARAMETER);
if(!$this->acl_check_view(get_class($this),'members',$member_id))
$member = new Member_Model($member_id);
// member doesn't exist
if (!$member->id)
Controller::error(RECORD);
// access control
if(!$this->acl_check_view(get_class($this),'members',$member->id))
Controller::error(ACCESS);
if (!is_numeric($member_id))
Controller::error(RECORD);
$model_members = new Member_Model();
if (count($model_members->get_member($member_id)) == 0)
Controller::error(RECORD);
$member_data = $model_members->get_member($member_id)->current();
// address point
$address_point = new Address_point_Model($member_data->address_point_id);
$address = (($address_point->street_id === null) ? '' : $address_point->street->street.' ').$address_point->street_number;
$town = ($address_point->town_id === null) ? '' : $address_point->town->town.' '.$address_point->town->quarter;
$zip = ($address_point->town_id === null) ? '' : $address_point->town->zip_code;
// member type string
$model_translation = new Translation_Model();
$member_type = $model_translation->get_translation($member_data->member_type);
// member type
$enum_type_model = new Enum_type_Model();
$former_member = $member_data->member_type == 'Former member';
// credit account
if ($member_id != 1)
// finds main user of member
$user = ORM::factory('user')->where(array('member_id' => $member->id, 'type' => User_Model::$member))->find();
// building of user's name
$user_name = $user->name;
if ($user->middle_name != '')
$user_name .= ' '.$user->middle_name;
$user_name .= ' '.$user->surname;
if ($user->pre_title != '')
$user_name = $user->pre_title . ' ' .$user_name;
if ($user->post_title != '')
$user_name .= ' '.$user->post_title;
// translates member's type
$type = ORM::factory('enum_type')->get_value($member->type);
// has member active membership interrupt?
$active_interrupt = ORM::factory('membership_interrupt')->has_member_interrupt_in_date($member->id, date('Y-m-d'));
$title = ($active_interrupt) ? $type . ' '.$member->name . ' ('. url_lang::lang('texts.I') .')' : $type . ' '.$member->name;
// finds credit account of member
if ($member->id != 1)
$account = ORM::factory('account')->where(array('member_id' => $member_id, 'account_attribute_id' => Account_attribute_Model::$credit))->find();
// finds address of member
if ($member->address_point_id && $member->address_point->id)
{
$account_model = new Account_Model();
$account = $account_model->
where(array('member_id' => $member_id,
'account_attribute_id' => Account_attribute_Model::$credit))->find();
$address = ($member->address_point->street_id && $member->address_point->street->id) ? $member->address_point->street->street : '';
$address .= ($member->address_point->street_number) ? ' '.$member->address_point->street_number : '';
if ($member->address_point->town_id && $member->address_point->town->id)
{
$town = $member->address_point->town->town;
$town .= ($member->address_point->town->quarter) ? '-'.$member->address_point->town->quarter : '';
$town .= ', '.$member->address_point->town->zip_code;
}
}
/************************************************************ VoIP ****************************************************/
$billing = new Billing();
$has_driver = $billing->has_driver();
$b_account = $billing->get_account($member->id);
$voip_sip = new Voip_sip_Model();
$voip = $voip_sip->get_all_record_by_member_limited($member->id);
$voip_grid = new Grid(url_lang::base().'members', null, array(
'separator' => '<br /><br />',
'use_paginator' => false,
'use_selector' => false,
'order_by' => $order_by,
'order_by_direction' => $order_by_direction,
'variables' => $member_id.'/'
));
$voip_grid->field('id')->label('ID');
$voip_grid->field('name')->label(url_lang::lang('texts.Number'));
$voip_grid->action_field('user_id')->label(url_lang::lang('texts.Account'))->url(url_lang::base().'voip/show')->action(url_lang::lang('texts.Show'));
$voip_grid->action_field('user_id')->label(url_lang::lang('texts.User'))->url(url_lang::base().'users/show')->action(url_lang::lang('texts.Show'));
$voip_grid->datasource($voip);
if ($has_driver && ($b_account != null))
{
$voip_grid->add_new_button(url_lang::base().'voip_calls/show_by_member/'.$member->id, url_lang::lang('texts.List of all calls'));
if ($member->id != 1)
$voip_grid->add_new_button(url_lang::base().'transfers/add_voip/'.$account->id, url_lang::lang('texts.Recharge VoIP credit'));
}
// finds date of expiration of member fee
$expiration_date = (isset($account)) ? self::get_expiration_date($account) : '';
// finds actual traffic of member
$actual_traffic = ORM::factory('members_traffic')->get_member_traffic ($member->id);
// finds total traffic of member
$members_traffics_daily_model = new Members_traffics_daily_Model();
$total_traffic = $members_traffics_daily_model->get_total_member_traffic ($member->id);
// finds all contacts of main user
$contact_model = new Contact_Model();
$enum_type_model = new Enum_type_Model();
// contacts of main user of member
$model_contacts = new Contact_Model();
$contacts = $model_contacts->find_all_users_contacts($member_data->id);
$arr_contact_types = array();
$contacts = $contact_model->find_all_users_contacts($user->id);
$contact_types = array();
foreach($contacts as $i => $contact)
{
$arr_contact_types[$i] = $enum_type_model->get_value($contact->type);
}
// engineer who added member
$member = new Member_Model($member_id);
$engineer_id = $member->user_id;
$engineer = new User_Model($engineer_id);
$engineer_name = $engineer->name.' '.$engineer->surname;
// users of member
$model_users = new User_Model();
$users = $model_users->orderby($order_by,$order_by_direction)->where('member_id', $member_id)->find_all();
$user_grid = new Grid(url_lang::base().'members', null,array(
$contact_types[$i] = $enum_type_model->get_value($contact->type);
// finds all users of member
$users = ORM::factory('user')->where('member_id', $member->id)->find_all();
// grid with lis of users
$users_grid = new Grid(url_lang::base().'members', null,array(
'separator' => '<br /><br />',
'use_paginator' => false,
'use_selector' => false,
));
'order_by' => $order_by,
'order_by_direction' => $order_by_direction,
'variables' => $member_id.'/'
));
if($this->acl_check_new('Users_Controller','users') || ($this->session->get('user_type') == User_Model::$member && $this->acl_check_new('Users_Controller','users',$member_id)))
$user_grid->add_new_button(url_lang::base().'users/add/'.$member_id, url_lang::lang('texts.Add new user'));
$user_grid->add_back_button(url_lang::lang('texts.Back'));
$user_grid->order_field('id','id')->label('ID');
$user_grid->order_field('name','name')->label(url_lang::lang('texts.Name'));
$user_grid->order_field('surname','surname')->label(url_lang::lang('texts.Surname'));
$user_grid->order_field('login','login')->label(url_lang::lang('texts.Username'));
if ($this->acl_check_new('Users_Controller','users') || ($this->session->get('user_type') == User_Model::$member && $this->acl_check_new('Users_Controller','users',$member->id)))
$users_grid->add_new_button(url_lang::base().'users/add/'.$member->id, url_lang::lang('texts.Add new user'));
$users_grid->field('id')->label('ID');
$users_grid->field('name')->label(url_lang::lang('texts.Name'));
$users_grid->field('surname')->label(url_lang::lang('texts.Surname'));
$users_grid->field('login')->label(url_lang::lang('texts.Username'));
if($this->acl_check_view('Users_Controller','users',$member_id))
$user_grid->action_field('id') ->label(url_lang::lang('texts.User'))->url(url_lang::base().'users/show')->action(url_lang::lang('texts.Show'));
$users_grid->action_field('id') ->label(url_lang::lang('texts.User'))->url(url_lang::base().'users/show')->action(url_lang::lang('texts.Show'));
if($this->acl_check_edit('Users_Controller','users') || ($this->session->get('user_type') == User_Model::$member && $this->acl_check_edit('Users_Controller','users',$member_id)))
$user_grid->action_field('id') ->label(url_lang::lang('texts.User'))->url(url_lang::base().'users/edit')->action(url_lang::lang('texts.Edit'));
$users_grid->action_field('id') ->label(url_lang::lang('texts.User'))->url(url_lang::base().'users/edit')->action(url_lang::lang('texts.Edit'));
if($this->acl_check_delete('Users_Controller','users',$member_id))
$user_grid->action_field('id') ->label(url_lang::lang('texts.User'))->url(url_lang::base().'users/delete')->action(url_lang::lang('texts.Delete'))->script('onclick="return potvrd(\''.url_lang::lang('texts.Do you want to delete this user').'\');"');
$users_grid->action_field('id') ->label(url_lang::lang('texts.User'))->url(url_lang::base().'users/delete')->action(url_lang::lang('texts.Delete'))->class('delete_link');
if ($this->acl_check_view('Devices_Controller', 'devices', $member_id))
$user_grid->action_field('id') ->label(url_lang::lang('texts.Devices'))->url(url_lang::base().'devices/show_by_user')->action(url_lang::lang('texts.Show'));
$users_grid->action_field('id') ->label(url_lang::lang('texts.Devices'))->url(url_lang::base().'devices/show_by_user')->action(url_lang::lang('texts.Show'));
if ($this->acl_check_edit('Users_Controller', 'work', $member_id))
$user_grid->action_field('id') ->label(url_lang::lang('texts.Works'))->url(url_lang::base().'works/show_by_user')->action(url_lang::lang('texts.Show'));
$user_grid->datasource($users);
$users_grid->action_field('id') ->label(url_lang::lang('texts.Works'))->url(url_lang::base().'works/show_by_user')->action(url_lang::lang('texts.Show'));
$users_grid->datasource($users);
// membership interrupts
$mi_model = new Membership_interrupt_Model();
$mis = $mi_model->get_all_by_member($member_id);
$mi_grid = new Grid(url_lang::base().'members', null, array(
$membership_interrupts = ORM::factory('membership_interrupt')->get_all_by_member($member_id);
$membership_interrupts_grid = new Grid(url_lang::base().'members', null, array(
'separator' => '<br /><br />',
'use_paginator' => false,
'use_selector' => false,
'order_by' => $order_by,
'order_by_direction' => $order_by_direction,
'variables' => $member_id.'/'
));
if ($this->acl_check_new(get_class($this), 'membership_interrupts', $member_id))
$mi_grid->add_new_button(url_lang::base().'membership_interrupts/add/'.$member_id, url_lang::lang('texts.Add new interrupt of membership'));
$mi_grid->field('id')->label('ID');
$mi_grid->field('from')->label(url_lang::lang('texts.Date from'));
$mi_grid->field('to')->label(url_lang::lang('texts.Date to'));
$mi_grid->field('comment')->label(url_lang::lang('texts.Comment'));
if ($this->acl_check_edit(get_class($this), 'membership_interrupts', $member_id))
$mi_grid->action_field('id') ->label(url_lang::lang('texts.Membership interrupts'))->url(url_lang::base().'membership_interrupts/edit')->action(url_lang::lang('texts.Edit'));
if ($this->acl_check_delete(get_class($this), 'membership_interrupts'))
$mi_grid->action_field('id') ->label(url_lang::lang('texts.Membership interrupts'))->url(url_lang::base().'membership_interrupts/delete')->action(url_lang::lang('texts.Delete'));
$mi_grid->datasource($mis);
$membership_interrupts_grid->add_new_button(url_lang::base().'membership_interrupts/add/'.$member_id, url_lang::lang('texts.Add new interrupt of membership'));
// active redirections of member, including short statistic of whitelisted IP addresses
$ip_model = new Ip_address_Model();
$info = $ip_model->get_whitelist_info_of_member($member_id);
$whitelist_info = url_lang::lang('texts.IP addresses').': '.url_lang::lang('texts.No whitelist').' ('.$info[Ip_address_Model::$no_whitelist].'), '.
url_lang::lang('texts.Permanent whitelist').' ('.$info[Ip_address_Model::$permanent_whitelist].'), '.url_lang::lang('texts.Temporary whitelist').' ('.$info[Ip_address_Model::$temporary_whitelist].')';
/*$mip_model = new Messages_ip_addresses_Model();
$messages = $mip_model->get_redirections_of_member($member_id);
$redir_grid = new Grid(url_lang::base().'members', null, array(
'use_paginator' => false,
'use_selector' => false
));
if ($this->acl_check_new('Messages_Controller', 'member'))
$membership_interrupts_grid->field('id')->label('ID');
$membership_interrupts_grid->field('from')->label(url_lang::lang('texts.Date from'));
$membership_interrupts_grid->field('to')->label(url_lang::lang('texts.Date to'));
$membership_interrupts_grid->field('comment')->label(url_lang::lang('texts.Comment'));
if ($this->acl_check_edit(get_class($this), 'membership_interrupts', $member_id))
$membership_interrupts_grid->action_field('id') ->label(url_lang::lang('texts.Membership interrupts'))->url(url_lang::base().'membership_interrupts/edit')->action(url_lang::lang('texts.Edit'));
if ($this->acl_check_delete(get_class($this), 'membership_interrupts'))
$membership_interrupts_grid->action_field('id') ->label(url_lang::lang('texts.Membership interrupts'))->url(url_lang::base().'membership_interrupts/delete')->action(url_lang::lang('texts.Delete'))->class('delete_link');
$membership_interrupts_grid->datasource($membership_interrupts);
/************************************************************** BUILDING OF LINKS ****************************************************************************/
$member_links = array();
$user_links = array();
$former_type_id = ORM::factory('enum_type')->get_type_id('Former member');
// member edit link
if ($member->type != $former_type_id && $this->acl_check_edit(get_class($this), 'members', $member->id))
$member_links[] = html::anchor(url_lang::base().'members/edit/'.$member->id,url_lang::lang('texts.Edit member'));
// members's transfers link
if ($member->id != 1 && $this->acl_check_view('Accounts_Controller', 'transfers', $member->id))
$member_links[] = html::anchor(url_lang::base().'transfers/show_by_account/'.$account->id, url_lang::lang('texts.Show transfers'));
// member's tariffs link
if ($this->acl_check_view(get_class($this), 'fees', $member->id))
$member_links[] = html::anchor(url_lang::base().'members_fees/show_by_member/'.$member->id, url_lang::lang('texts.Show tariffs'));
if ($member->id != 1)
{
$redir_grid->add_new_button(url_lang::base().'redirect/add_to_member/'.$member_id, url_lang::lang('texts.Add redirection to all ip addresses of member'));
$redir_grid->add_new_button(url_lang::base().'redirect/set_whitelist/'.$member_id.'/'.Ip_address_Model::$no_whitelist, url_lang::lang('texts.Cancel whitelist'));
$redir_grid->add_new_button(url_lang::base().'redirect/set_whitelist/'.$member_id.'/'.Ip_address_Model::$permanent_whitelist, url_lang::lang('texts.Set permanent whitelist'));
$redir_grid->add_new_button(url_lang::base().'redirect/set_whitelist/'.$member_id.'/'.Ip_address_Model::$temporary_whitelist, url_lang::lang('texts.Set temporary whitelist'));
if ($member->type != $former_type_id)
{
// payment cash link
if ($this->acl_check_edit('Accounts_Controller', 'transfers', $member->id))
$member_links[] = html::anchor(url_lang::base().'transfers/add_member_fee_payment_by_cash/'.$member->id, url_lang::lang('texts.Payment by cash'));
// end membership link
if ($this->acl_check_edit(get_class($this), 'members'))
$member_links[] = html::anchor(url_lang::base().'members/end_membership/'.$member->id, url_lang::lang('texts.End membership'), array('onclick' => 'return potvrd(\''.url_lang::lang('texts.Do you want to end membership of this member').'\')'));
}
else
{
// restore membership link
if ($this->acl_check_edit(get_class($this), 'members'))
$member_links[] = html::anchor(url_lang::base().'members/restore_membership/'.$member->id, url_lang::lang('texts.Restore membership'), array('onclick' => 'return potvrd(\''.url_lang::lang('texts.Do you want to restore membership of this member').'\')'));
}
}
$redir_grid->callback_field('ip_address')->label(url_lang::lang('texts.IP address'))->callback('callback::ip_address_field');
$redir_grid->field('name')->label(url_lang::lang('texts.Message'));
if ($this->acl_check_delete('Messages_Controller', 'ip_address'))
$redir_grid->callback_field('redirection')->label(url_lang::lang('texts.Canceling of message for redirection'))->callback("callback::cancel_redirection_of_member");
$redir_grid->datasource($messages);*/
// redirection link
if ($member->type != $former_type_id && $this->acl_check_edit(get_class($this), 'redirect', $member->id))
$member_links[] = html::anchor(url_lang::base().'redirect/member/'.$member->id, url_lang::lang('texts.Redirection'));
// export of registration link
$member_links[] = html::anchor(url_lang::base().'members/registration_export/'.$member->id, url_lang::lang('texts.Export of registration'));
// user show link
if ($this->acl_check_view('Users_Controller', 'users'))
$user_links[] = html::anchor(url_lang::base().'users/show/'.$user->id, url_lang::lang('texts.Show'));
// user edit link
if ($member->type != $former_type_id && $this->acl_check_edit('Users_Controller','users', $member->id))
$user_links[] = html::anchor(url_lang::base().'users/edit/'.$member->id, url_lang::lang('texts.Edit'));
// user's devices link
if ($this->acl_check_view('Devices_Controller', 'devices', $member->id))
$user_links[] = html::anchor(url_lang::base().'devices/show_by_user/'.$user->id, url_lang::lang('texts.Show devices'));
// user's works link
if ($member->id != 1 && $this->acl_check_view('Users_Controller', 'work', $member->id))
$user_links[] = html::anchor(url_lang::base().'works/show_by_user/'.$user->id, url_lang::lang('texts.Show works'));
// billing
$billing = new Billing();
$has_driver = $billing->has_driver();
$b_account = $billing->get_account($member_id);
$voip_sip = new Voip_sip_Model();
$voip = $voip_sip->get_all_record_by_member_limited($member_id);
$voip_grid = new Grid(url_lang::base().'members', null, array(
'separator' => '<br /><br />',
'use_paginator' => false,
'use_selector' => false,
'order_by' => $order_by,
'order_by_direction' => $order_by_direction,
'variables' => $member_id.'/'
));
//$voip_grid->order_field('id')->label('ID');
$voip_grid->field('name')->label(url_lang::lang('texts.Number'));
$voip_grid->action_field('user_id')->label(url_lang::lang('texts.Account'))->url(url_lang::base().'voip/show')->action(url_lang::lang('texts.Show'));
$voip_grid->action_field('user_id')->label(url_lang::lang('texts.User'))->url(url_lang::base().'users/show')->action(url_lang::lang('texts.Show'));
$voip_grid->datasource($voip);
if ($has_driver && ($b_account != null))
if ($member->type != $former_type_id)
{
$voip_grid->add_new_button(url_lang::base().'voip_calls/show_by_member/'.$member_id, url_lang::lang('texts.List of all calls'));
if ($member_data->member_id != 1)
$voip_grid->add_new_button(url_lang::base().'transfers/add_voip/'.$account->id, url_lang::lang('texts.Recharge VoIP credit'));
// change password link
if ($this->acl_check_edit('Users_Controller', 'password', $member->id))
$user_links[] = html::anchor(url_lang::base().'users/change_password/'.$user->id, url_lang::lang('texts.Change password'));
// change application password link
if ($this->acl_check_edit('Users_Controller', 'application_password', $member->id))
$user_links[] = html::anchor(url_lang::base().'users/change_application_password/'.$user->id, url_lang::lang('texts.Change application password'));
}
// view
$view = new View('main');
$view->title = url_lang::lang('texts.Display member');
$view->title = $title;
$view->content = new View('members_show');
if ($member_id != 1)
$view->content->account = $account;
$view->content->users = $user_grid;
$view->content->voip = $voip_grid;
$view->content->count_voip = count($voip);
$view->content->title = $title;
$view->content->member = $member;
$view->content->user = $user;
$view->content->user_name = $user_name;
$view->content->users_grid = $users_grid;
$view->content->voip_grid = $voip_grid;
$view->content->membership_interrupts_grid = $membership_interrupts_grid;
$view->content->contacts = $contacts;
$view->content->contact_types = $contact_types;
$view->content->expiration_date = $expiration_date;
$view->content->account = (isset($account)) ? $account : NULL;
$view->content->address = (isset($address)) ? $address : '';
$view->content->town = (isset($town)) ? $town : '';
$view->content->billing_has_driver = $has_driver;
$view->content->billing_account = $b_account;
$view->content->mis = $mi_grid;
//$view->content->whitelist_info = $whitelist_info;
$view->content->whitelist_info = '';
//$view->content->redir_grid = $redir_grid;
$view->content->redir_grid = '';
/*foreach($member_data as $key=>$val)
{
// IE dont render TD border if content is NULL, so we must put nbsp into empty fields.
if (trim($val)=='') $member_data->$key = '&nbsp;';
}*/
$registration_value = array('0'=>url_lang::lang('texts.No'),'1'=>url_lang::lang('texts.Yes'));
$member_data->registration = $registration_value[(bool)$member_data->registration];
$view->content->member_data = $member_data;
$view->content->member_type = $member_type;
$view->content->former = $former_member;
$view->content->address = $address;
$view->content->town = $town;
$view->content->zip = $zip;
if ($member_id != 1)
$view->content->expiration_date = self::get_expiration_date($account);
$view->content->contact_types = $arr_contact_types;
$view->content->contacts = $contacts;
$view->content->engineer_id = $engineer_id;
$view->content->engineer_name = $engineer_name;
$view->content->message = $this->session->get_once('message');
$view->content->count_voip = count($voip);
$view->content->actual_traffic = $actual_traffic;
$view->content->total_traffic = $total_traffic;
$view->content->member_links = implode(' | ',$member_links);
$view->content->user_links = implode(' | ',$user_links);
$view->render(TRUE);
} // end of show function
/**
* Gets expiration date of member's payments.
* @author Jiri Svitak
* @author Michal Kliment
* @param $member_id
* @return unknown_type
*/
public static function get_expiration_date($account)
{
$balance = $account->get_account_balance($account->id);
// zero credit account balance means that there is no need to calculate expiration date
if ($balance == 0)
return null;
// negative credit account balance means that member is in debt
if ($balance < 0)
return '<span style="color:red">'.url_lang::lang('texts.You are in debt').'</span>';
$fee_model = new Fee_Model();
$pdate = date_parse(date('Y-m-d'));
$year = $pdate['year'];
if ($pdate['day'] > 15)
// member's actual balance
$balance = $account->balance;
// current date
$day = date('j');
$month = date('n');
$year = date('Y');
// rounds date down
date::round_down($day, $month, $year);
// balance is in positive, we will go to the future
if ($balance >= 0)
{
$month = $pdate['month'] + 1;
if ($month == 13)
{
$month = 1;
$year++;
}
$sign = 1;
$ttl = 1;
$color = 'green';
}
// balance is in negative, we will go to the past
else
{
$month = $pdate['month'];
$sign = -1;
$ttl = 2;
$color = 'red';
}
$credit_left = $balance;
while (true)
$payments = array();
// finds entrance date of member
$entrance_date = date_parse(date::get_middle_of_month($account->member->entrance_date));
// finds debt payment rate of entrance fee
$debt_payment_rate = ($account->member->debt_payment_rate > 0) ? $account->member->debt_payment_rate : $account->member->entrance_fee;
// finds all debt payments of entrance fee
self::find_debt_payments ($payments, $entrance_date['month'], $entrance_date['year'], $account->member->entrance_fee, $debt_payment_rate);
// finds all member's devices with debt payments
$devices = ORM::factory('device')->get_member_devices_with_debt_payments ($account->member_id);
foreach ($devices as $device)
{
$date = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year));
$fee = $fee_model->get_by_date_type($date, 'regular member fee');
// fee has to be defined for every month of membership of every member
if (!$fee || $fee->fee <= 0)
// finds buy date of this device
$buy_date = date_parse(date::get_middle_of_month($device->buy_date));
// finds all debt payments of this device
self::find_debt_payments ($payments, $buy_date['month'], $buy_date['year'], $device->price, $device->payment_rate);
}
$fee_model = new Fee_Model();
while (true)
{
// finds regular member fee for this month
$fee = $fee_model->get_regular_member_fee_by_member_date ($account->member_id, date::create(15, $month, $year));
// if exist payment for this month, adds it to the fee
if (isset($payments[$year][$month]))
$fee += $payments[$year][$month];
// attributed / deduct fee to / from balance
$balance -= $sign * $fee;
if ($sign == -1 && $balance == 0)
$ttl--;
if ($balance * $sign < 0)
$ttl--;
if ($ttl == 0)
break;
$month += $sign;
if ($month == 0 OR $month == 13)
{
return '<span style="color:red">'.url_lang::lang('texts.No member fee set!').'</span>';
$month = ($month == 13) ? 1 : 12;
$year += $sign;
}
}
return '<span style="color: '.$color.'">'.date::create (date::days_of_month($month), $month, $year).'</span>';
}
/**
* It stores debt payments into double-dimensional array (indexes year, month)
*
* @author Michal Kliment
* @param array $payments
* @param int $month
* @param int $year
* @param float $payment_left
* @param float $payment_rate
*/
public static function find_debt_payments (&$payments, $month, $year, $payment_left, $payment_rate)
{
while ($payment_left > 0)
{
if ($payment_left > $payment_rate)
$payment = $payment_rate;
else
{
if ($credit_left < $fee->fee)
break;
$credit_left -= $fee->fee;
}
// next month
$payment = $payment_left;
if (isset($payments[$year][$month]))
$payments[$year][$month] += $payment;
else
$payments[$year][$month] = $payment;
$month++;
if ($month == 13)
if ($month > 12)
{
$year++;
$month = 1;
$year++;
}
$payment_left -= $payment;
}
$expiration_date = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year) + ($credit_left / $fee->fee) * 30 * 24 * 60 * 60);
return $expiration_date;
}
/**
freenetis/trunk/kohana/application/controllers/voip_calls.php
function show_by_member($member_id = null, $from = null, $to = null, $limit_results = 100, $order_by = 'type', $order_by_direction = 'asc', $page_word = null, $page = 1)
{
if (!$this->acl_check_view('VoIP_Controller', 'voip', $member_id))
Controller::error(ACCESS);
// get new selector
if (!is_numeric($member_id))
Controller::error(RECORD);
// parameter is wrong
if (!$member_id || !is_numeric($member_id))
Controller::warning(PARAMETER);
$model_members = new Member_Model();
if (count($model_members->get_member($member_id)) == 0)
$member = new Member_Model($member_id);
// member doesn't exist
if (!$member->id)
Controller::error(RECORD);
// access control
if (!$this->acl_check_view('VoIP_Controller', 'voip', $member->id))
Controller::error(ACCESS);
// for searching in private contacts
$arr_users = array();
$user_id;
... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.

Také k dispozici: Unified diff