Revize 853
Přidáno uživatelem Michal Kliment před více než 13 roky(ů)
freenetis/branches/approval/application/models/watchdog_cond.php | ||
---|---|---|
<?php
|
||
/**
|
||
*
|
||
* @author Michal Kliment
|
||
* @copyright (c) 2010 Kliment Michal
|
||
* @license GNU GPLv3
|
||
* @license http://www.gnu.org/licenses/gpl.txt
|
||
*/
|
||
|
||
class Watchdog_cond_Model extends ORM
|
||
{
|
||
protected $belongs_to = array('watchog');
|
||
}
|
||
|
||
?>
|
freenetis/branches/approval/application/models/user.php | ||
---|---|---|
) di
|
||
")->current()->total;
|
||
}
|
||
|
||
public function get_name_by_id ($user_id)
|
||
{
|
||
$result = $this->db->query("SELECT id, CONCAT(name,' ',surname) AS name FROM users WHERE id = ?", array($user_id));
|
||
return ($result && $result->current() && $result->current()->id) ? $result->current()->name : '';
|
||
}
|
||
|
||
}
|
||
|
freenetis/branches/approval/application/models/approval_template_item.php | ||
---|---|---|
{
|
||
$cond = ($suggest_amount) ? ' AND t.min_suggest_amount <= '.$suggest_amount : '';
|
||
|
||
return $this->db->query('SELECT g.aro_id AS id FROM approval_template_items i
|
||
$result = $this->db->query('SELECT g.aro_id AS id FROM approval_template_items i
|
||
LEFT JOIN approval_types t ON i.approval_type_id = t.id
|
||
LEFT JOIN groups_aro_map g ON t.aro_group_id = g.group_id
|
||
WHERE i.approval_template_id = '.$template_id.$cond.'
|
||
GROUP BY g.aro_id');
|
||
$arr = array();
|
||
foreach ($result as $aro)
|
||
$arr[] = $aro->id;
|
||
|
||
return $arr;
|
||
}
|
||
|
||
}
|
freenetis/branches/approval/application/models/watchdog.php | ||
---|---|---|
<?php
|
||
/**
|
||
*
|
||
* @author Michal Kliment
|
||
* @copyright (c) 2010 Kliment Michal
|
||
* @license GNU GPLv3
|
||
* @license http://www.gnu.org/licenses/gpl.txt
|
||
*/
|
||
|
||
class Watchdog_Model extends ORM
|
||
{
|
||
protected $has_many = array('watchdog_conds');
|
||
}
|
||
|
||
?>
|
freenetis/branches/approval/application/models/job.php | ||
---|---|---|
|
||
class Job_Model extends ORM
|
||
{
|
||
protected $belongs_to = array('user', 'approval_template');
|
||
protected $belongs_to = array('user', 'approval_template', 'job_report');
|
||
|
||
/**
|
||
* @author Michal Kliment
|
||
... | ... | |
WHERE j.job_report_id = '.$job_report_id.'
|
||
ORDER BY date');
|
||
}
|
||
|
||
public function get_all_by_work_report ($work_report_id)
|
||
{
|
||
return $this->db->query('SELECT j.*, 0 AS hour_rate, 0 AS km_rate FROM jobs j
|
||
WHERE job_report_id = ?
|
||
ORDER BY date ASC, time_from ASC', array($work_report_id));
|
||
}
|
||
}
|
||
|
||
?>
|
freenetis/branches/approval/application/models/job_report.php | ||
---|---|---|
|
||
return count($work_reports);
|
||
}
|
||
|
||
/**
|
||
* Returns suggest amount of work report
|
||
*
|
||
* @author Michal Kliment
|
||
* @param integer $job_report_id
|
||
* @return float
|
||
*/
|
||
public function get_suggest_amount($job_report_id = NULL)
|
||
{
|
||
if (!$job_report_id)
|
||
$job_report_id = $this->id;
|
||
|
||
return $this->db->query("SELECT SUM(suggest_amount) AS suggest_amount FROM jobs j WHERE j.job_report_id = ?", array($job_report_id))->current()->suggest_amount;
|
||
}
|
||
}
|
||
|
||
?>
|
freenetis/branches/approval/application/controllers/approval_templates.php | ||
---|---|---|
url::redirect(url_lang::base().'approval_templates/show_all');
|
||
}
|
||
|
||
/**
|
||
* Updates state of approval template
|
||
*
|
||
* @author Michal Kliment
|
||
* @param numeric $approval_template_id
|
||
* @return boolean
|
||
*/
|
||
public static function update_state($approval_template_id)
|
||
{
|
||
$approval_template = new Approval_template_Model($approval_template_id);
|
||
$approval_template->state = $approval_template->get_state($approval_template->id);
|
||
return $approval_template->save();
|
||
}
|
||
|
||
/** CALLBACK FUNCTIONS **/
|
||
|
||
/**
|
freenetis/branches/approval/application/controllers/js.php | ||
---|---|---|
}
|
||
|
||
/**
|
||
* This method is call only in edit method in works controller
|
||
* This method is called only in edit method in works controller
|
||
* @author Michal Kliment
|
||
* @param numeric $work_id
|
||
*/
|
||
... | ... | |
}
|
||
|
||
/**
|
||
* This method is called only in show method in work reports controller
|
||
* @author Michal Kliment
|
||
* @param numeric $work_report_id
|
||
*/
|
||
public function work_reports_show($work_report_id = NULL)
|
||
{
|
||
// parameter isn't bad
|
||
if ($work_report_id && is_numeric($work_report_id))
|
||
{
|
||
$work_report = new Job_report_Model($work_report_id);
|
||
|
||
// work reports exists
|
||
if ($work_report->id)
|
||
$this->views['work_reports_show']->i = count($work_report->jobs);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Method for remap default behaviour of controllers
|
||
* @author Michal Kliment
|
||
* @param <type> $method
|
freenetis/branches/approval/application/controllers/watchdogs.php | ||
---|---|---|
<?php
|
||
|
||
class Watchdogs_Controller extends Controller
|
||
{
|
||
|
||
private static $model = null;
|
||
|
||
/**
|
||
* Returns array of users who belong to watchdog
|
||
*
|
||
* @author Michal Kliment
|
||
* @param mixed object $object
|
||
* @param string $table
|
||
* @param string $action
|
||
* @return array
|
||
*/
|
||
public static function get_users_by_object_table_action ($object, $table, $action = 'all')
|
||
{
|
||
// creates model only once
|
||
if (!self::$model)
|
||
self::$model = new Watchdog_Model();
|
||
|
||
// finds all watchdogs belong to this table
|
||
$watchdogs = self::$model->like(array('table' => $table))->find_all();
|
||
|
||
$arr_users = array();
|
||
|
||
foreach ($watchdogs as $watchdog)
|
||
{
|
||
$return = true;
|
||
|
||
$allowed_actions = explode(",",$watchdog->action);
|
||
|
||
if (!in_array($action, $allowed_actions) && !in_array('all', $allowed_actions))
|
||
continue;
|
||
|
||
foreach ($watchdog->watchdog_conds as $cond)
|
||
{
|
||
if (!isset($object->{$cond->column}))
|
||
{
|
||
$return = false;
|
||
break;
|
||
}
|
||
|
||
switch ($cond->op)
|
||
{
|
||
case '=':
|
||
$return = $return && ($object->{$cond->column} == $cond->value);
|
||
break;
|
||
case '>':
|
||
$return = $return && ($object->{$cond->column} > $cond->value);
|
||
break;
|
||
case '<':
|
||
$return = $return && ($object->{$cond->column} < $cond->value);
|
||
break;
|
||
case '>=':
|
||
$return = $return && ($object->{$cond->column} >= $cond->value);
|
||
break;
|
||
case '<=':
|
||
$return = $return && ($object->{$cond->column} <= $cond->value);
|
||
break;
|
||
case '!=':
|
||
$return = $return && ($object->{$cond->column} != $cond->value);
|
||
break;
|
||
case 'CONTAINS':
|
||
$return = $return && (strpos($object->{$cond->column}, $cond->value) !== false);
|
||
break;
|
||
case 'NOT_CONTAINS':
|
||
$return = $return && (strpos($object->{$cond->column}, $cond->value) === false);
|
||
break;
|
||
case 'STARTS_WITH':
|
||
$return = $return && (strpos($object->{$cond->column}, $cond->value) == 0);
|
||
break;
|
||
case 'ENDS_WITH':
|
||
$return = $return && (substr($object->{$cond->column}, strlen($cond->value)*-1) == $cond->value);
|
||
break;
|
||
default:
|
||
$return = false;
|
||
break 2;
|
||
}
|
||
if ($return == false)
|
||
break;
|
||
}
|
||
|
||
if ($return == false)
|
||
continue;
|
||
|
||
$arr_users[] = $watchdog->user_id;
|
||
}
|
||
|
||
return $arr_users;
|
||
}
|
||
|
||
/**
|
||
* Returns array of users who belong to watchdog
|
||
*
|
||
* @author Michal Kliment
|
||
* @param ORM object $object
|
||
* @param string $action
|
||
* @return arary
|
||
*/
|
||
public static function get_users_by_object_action ($object, $action = 'all')
|
||
{
|
||
return self::get_users_by_object_table_action ($object, $object->get_table_name(), $action = 'all');
|
||
}
|
||
}
|
||
|
||
?>
|
freenetis/branches/approval/application/controllers/work_reports.php | ||
---|---|---|
$arr_works = array();
|
||
|
||
$work_model = new Job_Model();
|
||
$works = $work_model->where('job_report_id', $work_report->id)->orderby(array('date'=>'ASC', 'time_from' => 'ASC'))->find_all();
|
||
$works = $work_model->get_all_by_work_report($work_report->id);
|
||
|
||
// create grid
|
||
$grid = new Grid(url_lang::base().'work_reports/show/'.$work_report->id, '', array(
|
||
... | ... | |
|
||
$grid->datasource($works);
|
||
|
||
if (isset($_POST) && $_POST)
|
||
{
|
||
$form_data = $_POST;
|
||
$work = new Job_Model();
|
||
|
||
foreach ($form_data['date'] as $i => $date)
|
||
{
|
||
if (isset($form_data['id'][$i]) && is_numeric($form_data['id'][$i]) && $form_data['id'][$i])
|
||
$work->where('id',$form_data['id'][$i])->find();
|
||
else
|
||
$work->clear();
|
||
|
||
$work->job_report_id = $work_report->id;
|
||
$work->user_id = $work_report->user_id;
|
||
$work->added_by_id = $this->session->get('user_id');
|
||
$work->approval_template_id = $work_report->approval_template_id;
|
||
$work->description = $form_data['description'][$i];
|
||
$work->suggest_amount = $form_data['suggest_amount'][$i];
|
||
$work->date = $form_data['date'][$i];
|
||
$work->create_date = date('Y-m-d');
|
||
$work->time_from = $form_data['time_from'][$i];
|
||
$work->time_to = $form_data['time_to'][$i];
|
||
$work->hours = $form_data['hours'][$i];
|
||
$work->km = $form_data['km'][$i];
|
||
$work->state = 0;
|
||
$work->save();
|
||
}
|
||
url::redirect(url::base().url::current(TRUE));
|
||
}
|
||
|
||
$view = new View('main');
|
||
$view->title = 'zobraz';
|
||
$view->content = new View('work_reports_show');
|
freenetis/branches/approval/application/controllers/works.php | ||
---|---|---|
|
||
// access control
|
||
if ($this->acl_check_view('Users_Controller','work',$user->member_id))
|
||
$pending_works_grid->action_field('id')->label(url_lang::lang('texts.Show')) ->url(url_lang::base().'works/show') ->action(url_lang::lang('texts.Show'))->class('center');
|
||
$pending_works_grid->action_field('id')->label(url_lang::lang('texts.Show')) ->url(url_lang::base().'works/show') ->action(url_lang::lang('texts.Show'))->class('center');
|
||
|
||
$pending_works_grid->datasource($pending_works);
|
||
|
||
... | ... | |
*/
|
||
function add($user_id = null)
|
||
{
|
||
if(isset($user_id))
|
||
if($user_id)
|
||
{
|
||
$user = new User_Model($user_id);
|
||
if ($user->id == 0)
|
||
if (!$user->id)
|
||
Controller::error(RECORD);
|
||
// access control
|
||
if (!$this->acl_check_new('Users_Controller','work', $user->member_id))
|
||
... | ... | |
$link_back = url_lang::base().'works/pending';
|
||
$anchor = html::anchor($link_back, url_lang::lang('texts.Back to list of all pending works'));
|
||
}
|
||
|
||
if ($form->validate())
|
||
{
|
||
|
||
// form is validate
|
||
if ($form->validate())
|
||
{
|
||
$form_data = $form->as_array();
|
||
|
||
// creates new work
|
||
... | ... | |
else
|
||
$work->approval_template_id = $this->settings->get('default_work_approval_template');
|
||
|
||
$saved = $work->save();
|
||
// saves work and updates state of approval template
|
||
$saved = $work->save() && Approval_templates_Controller::update_state($work->approval_template_id);
|
||
|
||
// set up state of approval template
|
||
$approval_template = new Approval_template_Model($work->approval_template_id);
|
||
$approval_template->state = $approval_template->get_state($approval_template->id);
|
||
$saved = $saved && $approval_template->save();
|
||
|
||
// success
|
||
if ($saved)
|
||
{
|
||
$receivers = array();
|
||
|
||
|
||
/*$receivers = array();
|
||
|
||
$mail_message = new Mail_message_Model();
|
||
$user = new User_Model();
|
||
|
||
... | ... | |
}
|
||
}
|
||
}
|
||
}
|
||
}*/
|
||
|
||
$this->session->set_flash('message', url_lang::lang('texts.Work has been successfully added').'.');
|
||
url::redirect(url_lang::base().'works/show/'.$work->id);
|
||
... | ... | |
|
||
$work = new Job_Model();
|
||
$work->job_report_id = $work_report->id;
|
||
$work->user_id = $work_report->user_id;
|
||
$work->added_by_id = $this->session->get('user_id');
|
||
$work->approval_template_id = $work_report->approval_template_id;
|
||
$work->description = $form_data['description'];
|
||
$work->suggest_amount = $form_data['suggest_amount'];
|
||
$work->date = $form_data['date'];
|
||
... | ... | |
$work->time_to = $form_data['time_to'];
|
||
$work->hours = $form_data['hours'];
|
||
$work->km = $form_data['km'];
|
||
$work->state = 0;
|
||
|
||
// work is saved
|
||
if ($work->save())
|
||
... | ... | |
}
|
||
|
||
/**
|
||
* Edits work
|
||
*
|
||
* @author Michal Kliment
|
||
* Edits work
|
||
* @param $work_id id of work to edit
|
||
*/
|
||
function edit($work_id = NULL)
|
||
... | ... | |
Controller::error(ACCESS);
|
||
|
||
// work is locked
|
||
if ($work->state > 0)
|
||
if ((!$work->job_report_id && $work->state > 0) || ($work->job_report_id && $work->job_report->state > 0))
|
||
{
|
||
$this->session->set_flash('message', url_lang::lang('texts.It is not possible edit locked work.'));
|
||
url::redirect(url_lang::base().'works/show/'.$work->id);
|
||
}
|
||
|
||
$user_model = new User_Model();
|
||
|
||
// check if user has access rights to edit work of all users
|
||
if ($this->acl_check_edit('Users_Controller','work'))
|
||
// shows user's select and approval template's select only at work which is not from work report
|
||
if (!$work->job_report_id)
|
||
{
|
||
// gets all user's names
|
||
$users = $user_model->get_his_users_names($work->user_id);
|
||
}
|
||
else
|
||
{
|
||
$users = $user_model->get_his_username($work->user_id);
|
||
}
|
||
$user_model = new User_Model();
|
||
|
||
// transforms array of objects to classic array
|
||
$arr_users = arr::from_objects($users, 'username');
|
||
// check if user has access rights to edit work of all users
|
||
if ($this->acl_check_edit('Users_Controller','work'))
|
||
{
|
||
// gets all user's names
|
||
$users = $user_model->get_his_users_names($work->user_id);
|
||
}
|
||
else
|
||
{
|
||
$users = $user_model->get_his_username($work->user_id);
|
||
}
|
||
|
||
if ($this->acl_check_view('approval','templates'))
|
||
{
|
||
$approval_template_model = new Approval_template_Model();
|
||
$approval_templates = $approval_template_model->find_all();
|
||
// transforms array of objects to classic array
|
||
$arr_users = arr::from_objects($users, 'username');
|
||
|
||
// transforms array of objects to classic array
|
||
$arr_approval_templates = arr::from_objects($approval_templates);
|
||
$arr_approval_templates = arr::merge(array(NULL => '----- '.url_lang::lang('texts.select approval template').' -----'),$arr_approval_templates);
|
||
if ($this->acl_check_view('approval','templates'))
|
||
{
|
||
$approval_template_model = new Approval_template_Model();
|
||
$approval_templates = $approval_template_model->find_all();
|
||
|
||
// transforms array of objects to classic array
|
||
$arr_approval_templates = arr::from_objects($approval_templates);
|
||
$arr_approval_templates = arr::merge(array(NULL => '----- '.url_lang::lang('texts.select approval template').' -----'),$arr_approval_templates);
|
||
}
|
||
}
|
||
|
||
// creates form
|
||
... | ... | |
$this->form->set_attr('class', 'form_class')->set_attr('method', 'post');
|
||
|
||
$this->form->group('')->label(url_lang::lang('texts.Basic information'));
|
||
$this->form->dropdown('user_id')->label(url_lang::lang('texts.User'))->options($arr_users)->rules('required')->selected($work->user_id);
|
||
|
||
if (!$work->job_report_id)
|
||
$this->form->dropdown('user_id')->label(url_lang::lang('texts.User'))->options($arr_users)->rules('required')->selected($work->user_id);
|
||
|
||
$this->form->textarea('description')->label(url_lang::lang('texts.Description').':')->rules('required|length[0,65535]')->value($work->description);
|
||
$this->form->input('date')->label(url_lang::lang('texts.Date').':')->rules('required|length[10,10]|valid_date_string')->value($work->date)->class('date');
|
||
|
||
// shows time from and time to only if work is from work report
|
||
if ($work->job_report_id)
|
||
{
|
||
$this->form->input('time_from')->label(url_lang::lang('texts.Time from').':')->rules('required|length[5,5]|valid_time')->class('time_from');
|
||
$this->form->input('time_to')->label(url_lang::lang('texts.Time to').':')->rules('length[5,5]|valid_time')->class('time_to');
|
||
$this->form->input('time_from')->label(url_lang::lang('texts.Time from').':')->rules('required|length[5,5]|valid_time')->class('time_from')->value(substr($work->time_from,0,5));
|
||
$this->form->input('time_to')->label(url_lang::lang('texts.Time to').':')->rules('length[5,5]|valid_time')->class('time_to')->value(substr($work->time_to,0,5));
|
||
}
|
||
|
||
$this->form->input('hours')->label(url_lang::lang('texts.Hours').':')->rules('required|length[0,250]|valid_numeric')->value($work->hours);
|
||
... | ... | |
$this->form->input('km')->label(url_lang::lang('texts.Km').':')->rules('length[0,250]|valid_numeric')->value($work->km);
|
||
$this->form->input('km_rate')->label(url_lang::lang('texts.Rate for Km').':')->rules('length[0,250]|valid_numeric');
|
||
$this->form->input('suggest_amount')->label(url_lang::lang('texts.Suggest amount').':')->rules('required|valid_numeric')->value($work->suggest_amount);
|
||
|
||
if ($this->acl_check_view('approval','templates'))
|
||
|
||
// work is not from any work report and user has rights to change approval template
|
||
if (!$work->job_report_id && $this->acl_check_view('approval','templates'))
|
||
{
|
||
$this->form->group('')->label(url_lang::lang('texts.Advanced information'));
|
||
$this->form->dropdown('approval_template_id')->label(url_lang::lang('texts.Approval template').':')->rules('required')->options($arr_approval_templates)->selected($work->approval_template_id);
|
||
... | ... | |
|
||
// creates new work
|
||
$work = new Job_Model($work_id);
|
||
$work->user_id = $form_data['user_id'];
|
||
$work->added_by_id = $this->session->get('user_id');
|
||
$work->description = $form_data['description'];
|
||
$work->date = $form_data['date'];
|
||
|
||
if ($work->job_report_id)
|
||
{
|
||
// sets up time from and to only to work from work report
|
||
$work->time_from = $form_data['time_from'];
|
||
$work->time_to = $form_data['time_to'];
|
||
}
|
||
else
|
||
{
|
||
// sets up user only to work which is not from work report
|
||
$work->user_id = $form_data['user_id'];
|
||
|
||
// approval template has been changed
|
||
if (isset($form_data['approval_template_id']) && $form_data['approval_template_id'] && $form_data['approval_template_id'] != $work->approval_template_id)
|
||
{
|
||
// remembers old approval template
|
||
$old_approval_template_id = $work->approval_template_id;
|
||
// sets up new approval template
|
||
$work->approval_template_id = $form_data['approval_template_id'];
|
||
}
|
||
}
|
||
|
||
$work->hours = $form_data['hours'];
|
||
$work->km = $form_data['km'];
|
||
$work->suggest_amount = $form_data['suggest_amount'];
|
||
|
||
$old_approval_template_id = $work->approval_template_id;
|
||
|
||
if (isset($form_data['approval_template_id']) && $form_data['approval_template_id'])
|
||
$work->approval_template_id = $form_data['approval_template_id'];
|
||
else
|
||
$work->approval_template_id = $this->settings->get('default_work_approval_template');
|
||
|
||
$saved = $work->save();
|
||
|
||
// set up state of approval template
|
||
$approval_template = new Approval_template_Model($work->approval_template_id);
|
||
$approval_template->state = $approval_template->get_state($approval_template->id);
|
||
$saved = $saved && $approval_template->save();
|
||
// work is not from work report
|
||
if (!$work->job_report_id)
|
||
{
|
||
// set up state of approval template
|
||
$saved = $saved && Approval_templates_Controller::update_state($work->approval_template_id);
|
||
|
||
if ($work->approval_template_id != $old_approval_template_id)
|
||
{
|
||
// set up state of old approval template
|
||
$approval_template = new Approval_template_Model($old_approval_template_id);
|
||
$approval_template->state = $approval_template->get_state($approval_template->id);
|
||
$saved = $saved && $approval_template->save();
|
||
if (isset($old_approval_template_id))
|
||
{
|
||
// set up state of old approval template
|
||
$saved = $saved && Approval_templates_Controller::update_state($old_approval_template_id);
|
||
}
|
||
}
|
||
|
||
// success
|
||
if ($saved)
|
||
{
|
||
$receivers = array();
|
||
|
||
$mail_message = new Mail_message_Model();
|
||
$user = new User_Model();
|
||
$user_id = (!$work->job_report_id) ? $work->user_id : $work->job_report->user_id;
|
||
$approval_template_id = (!$work->job_report_id) ? $work->approval_template_id : $work->job_report->approval_template_id;
|
||
$suggest_amount = (!$work->job_report_id) ? $work->suggest_amount : $work->job_report->get_suggest_amount();
|
||
|
||
// work has been updated by another user, sends message to user
|
||
if ($work->user_id != $this->session->get('user_id'))
|
||
{
|
||
$user->clear();
|
||
$user->where('id', $this->session->get('user_id'))->find();
|
||
Mail_messages_Controller::send_system(array(
|
||
'subject' => mail_message::format('your_work_update_subject'),
|
||
'body' => mail_message::format('your_work_update', array(ORM::factory('User')->get_name_by_id($this->session->get('user_id')), url_lang::base().'works/show/'.$work->id))
|
||
), $user_id, FALSE);
|
||
|
||
$receivers[] = $work->user_id;
|
||
|
||
$mail_message->clear();
|
||
$mail_message->from_id = 1;
|
||
$mail_message->to_id = $form_data['user_id'];
|
||
$mail_message->subject = mail_message::format('your_work_update_subject');
|
||
$mail_message->body = mail_message::format('your_work_update', array($user->name.' '.$user->surname, url_lang::base().'works/show/'.$work->id));
|
||
$mail_message->time = date('Y-m-d H:i:s');
|
||
$mail_message->from_deleted = 1;
|
||
$mail_message->save();
|
||
}
|
||
|
||
// finds all aro ids assigned to vote about this work
|
||
$approval_template_item_model = new Approval_template_item_Model();
|
||
$aro_ids = $approval_template_item_model->get_aro_ids_by_approval_template_id($work->approval_template_id, $work->suggest_amount);
|
||
$aro_ids = ORM::factory('approval_template_item')->get_aro_ids_by_approval_template_id($approval_template_id, $suggest_amount);
|
||
|
||
// count of aro ids is not null
|
||
if (count($aro_ids))
|
||
{
|
||
// finds user to whom belongs work
|
||
$user->clear();
|
||
$user->where('id', $work->user_id)->find();
|
||
Mail_messages_Controller::send_system(array(
|
||
'subject' => mail_message::format('work_update_subject'),
|
||
'body' => mail_message::format('work_update', array(ORM::factory('User')->get_name_by_id($user_id), url_lang::base().'works/show/'.$work->id))
|
||
), $aro_ids);
|
||
|
||
$subject = mail_message::format('work_update_subject');
|
||
$body = mail_message::format('work_update', array($user->name.' '.$user->surname, url_lang::base().'works/show/'.$work->id));
|
||
|
||
foreach ($aro_ids as $aro)
|
||
{
|
||
// is not necessary send message to user who added work
|
||
if ($aro->id != $this->session->get('user_id'))
|
||
{
|
||
if (!in_array($aro->id, $receivers))
|
||
{
|
||
$receivers[] = $aro->id;
|
||
|
||
// sends message
|
||
$mail_message->clear();
|
||
$mail_message->from_id = 1;
|
||
$mail_message->to_id = $aro->id;
|
||
$mail_message->subject = $subject;
|
||
$mail_message->body = $body;
|
||
$mail_message->time = date('Y-m-d H:i:s');
|
||
$mail_message->from_deleted = 1;
|
||
$mail_message->save();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->session->set_flash('message', url_lang::lang('texts.Work has been successfully updated').'.');
|
||
}
|
||
|
||
... | ... | |
Controller::error(RECORD);
|
||
|
||
// access control
|
||
if (!$this->acl_check_delete('Users_Controller', 'work', $work->user->member_id))
|
||
if (!$this->acl_check_delete('Users_Controller', 'work', (!$work->job_report_id) ? $work->user->member_id : $work->job_report->user->member_id))
|
||
Controller::error(ACCESS);
|
||
|
||
// work is locked
|
||
if ($work->state > 0)
|
||
if ((!$work->job_report_id && $work->state > 0) || ($work->job_report_id && $work->job_report->state > 0))
|
||
{
|
||
$this->session->set_flash('message', url_lang::lang('texts.It is not possible delete locked work.'));
|
||
url::redirect(url_lang::base().'works/show/'.$work->id);
|
||
}
|
||
|
||
$approval_template_id = $work->approval_template_id;
|
||
$work_user_id= $work->user_id;
|
||
if (!$work->job_report_id)
|
||
{
|
||
$work_approval_template_id = $work->approval_template_id;
|
||
$work_user_id = $work->user_id;
|
||
}
|
||
else
|
||
$work_user_id = $work->job_report->user_id;
|
||
|
||
$work_description = $work->description;
|
||
$work_suggest_amount = $work->suggest_amount;
|
||
$work_report_id = $work->job_report_id;
|
||
$saved = $work->delete();
|
||
|
||
// set up state of approval template
|
||
$approval_template = new Approval_template_Model($approval_template_id);
|
||
$approval_template->state = $approval_template->get_state($approval_template->id);
|
||
$saved = $saved && $approval_template->save();
|
||
|
||
if ($saved)
|
||
if (!$work_report_id)
|
||
{
|
||
$receivers = array();
|
||
// set up state of approval template
|
||
$saved = $saved && Approval_templates_Controller::update_state($work_approval_template_id);
|
||
}
|
||
else
|
||
{
|
||
$work_report = new Job_report_Model ($work_report_id);
|
||
|
||
$mail_message = new Mail_message_Model();
|
||
$user = new User_Model();
|
||
|
||
// work has been updated by another user, sends message to user
|
||
if ($work_user_id != $this->session->get('user_id'))
|
||
if (!count($work_report->jobs))
|
||
{
|
||
$user->clear();
|
||
$user->where('id',$this->session->get('user_id'))->find();
|
||
$work_report->draft = 1;
|
||
$saved = $saved && $work_report->save();
|
||
}
|
||
}
|
||
|
||
$receivers[] = $work_user_id;
|
||
if ($saved)
|
||
{
|
||
$user_id = (!$work_report_id) ? $work_user_id : $work_report->user_id;
|
||
$approval_template_id = (!$work_report_id) ? $work_approval_template_id : $work_report->approval_template_id;
|
||
$suggest_amount = (!$work_report_id) ? $work_suggest_amount : $work_report->get_suggest_amount();
|
||
|
||
$mail_message = new Mail_message_Model();
|
||
$mail_message->from_id = 1;
|
||
$mail_message->to_id = $work_user_id;
|
||
$mail_message->subject = mail_message::format('your_work_delete_subject');
|
||
$mail_message->body = mail_message::format('your_work_delete', array($work_description, $user->name.' '.$user->surname));
|
||
$mail_message->time = date('Y-m-d H:i:s');
|
||
$mail_message->from_deleted = 1;
|
||
$mail_message->save();
|
||
}
|
||
Mail_messages_Controller::send_system(array(
|
||
'subject' => mail_message::format('your_work_delete_subject'),
|
||
'body' => mail_message::format('your_work_delete', array($work_description, ORM::factory('User')->get_name_by_id($this->session->get('user_id'))))
|
||
), $user_id, FALSE);
|
||
|
||
// finds all aro ids assigned to vote about this work
|
||
$approval_template_item_model = new Approval_template_item_Model();
|
||
$aro_ids = $approval_template_item_model->get_aro_ids_by_approval_template_id($approval_template_id, $work_suggest_amount);
|
||
$aro_ids = ORM::factory('approval_template_item')->get_aro_ids_by_approval_template_id($approval_template_id, $suggest_amount);
|
||
|
||
// count of aro ids is not null
|
||
if (count($aro_ids))
|
||
{
|
||
// finds user to whom belongs work
|
||
$user->clear();
|
||
$user->where('id', $work_user_id)->find();
|
||
Mail_messages_Controller::send_system(array(
|
||
'subject' => mail_message::format('work_delete_subject'),
|
||
'body' => mail_message::format('work_delete', array(ORM::factory('User')->get_name_by_id($user_id), $work_description))
|
||
), $aro_ids);
|
||
|
||
$subject = mail_message::format('work_delete_subject');
|
||
$body = mail_message::format('work_delete', array($user->name.' '.$user->surname, $work_description));
|
||
|
||
foreach ($aro_ids as $aro)
|
||
{
|
||
// is not necessary send message to user who added work
|
||
if ($aro->id != $this->session->get('user_id'))
|
||
{
|
||
if (!in_array($aro->id, $receivers))
|
||
{
|
||
$receivers[] = $aro->id;
|
||
|
||
// sends message
|
||
$mail_message->clear();
|
||
$mail_message->from_id = 1;
|
||
$mail_message->to_id = $aro->id;
|
||
$mail_message->subject = $subject;
|
||
$mail_message->body = $body;
|
||
$mail_message->time = date('Y-m-d H:i:s');
|
||
$mail_message->from_deleted = 1;
|
||
$mail_message->save();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->session->set_flash('message', url_lang::lang('texts.Work has been successfully deleted').'.');
|
||
}
|
||
|
||
if ($work_report_id)
|
||
url::redirect(url_lang::base().'work_reports/show/'.$work_report_id);
|
||
else
|
||
... | ... | |
echo $input->html();
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
?>
|
freenetis/branches/approval/application/controllers/mail_messages.php | ||
---|---|---|
|
||
class Mail_messages_Controller extends Controller
|
||
{
|
||
private static $message = array(
|
||
'subject' => '',
|
||
'body' => '',
|
||
'time' => NULL,
|
||
'from_deleted' => 0,
|
||
'to_deleted' => 0
|
||
);
|
||
|
||
private static $model = NULL;
|
||
|
||
private static $recipients = array();
|
||
|
||
function show($message_id = NULL)
|
||
{
|
||
if (!$message_id || !is_numeric($message_id))
|
||
... | ... | |
$view->render(TRUE);
|
||
}
|
||
|
||
/**
|
||
* Sends mail message
|
||
*
|
||
* @author Michal Kliment
|
||
* @param mixed (string|array) $message
|
||
* @param mixed (integer|array) $from
|
||
* @param mixed (integer|array) $to
|
||
* @param boolean $clear_recipients
|
||
* @return boolean
|
||
*/
|
||
public static function send($message, $from, $to, $clear_recipients = TRUE)
|
||
{
|
||
$return_value = True;
|
||
|
||
if ($clear_recipients != FALSE)
|
||
self::$recipients = array();
|
||
|
||
// converts to array
|
||
if (!is_array($message))
|
||
$message = array('body' => $message);
|
||
|
||
// converts to array
|
||
if (!is_array($from))
|
||
$from = array($from);
|
||
|
||
// converts to array
|
||
if (!is_array($to))
|
||
$to = array($to);
|
||
|
||
foreach ($message as $key => $value)
|
||
if (isset(self::$message[$key]))
|
||
self::$message[$key] = $value;
|
||
|
||
if (!self::$model)
|
||
self::$model = new Mail_message_Model();
|
||
|
||
foreach ($from as $from_user_id)
|
||
{
|
||
foreach ($to as $to_user_id)
|
||
{
|
||
if ($to_user_id == Session::instance()->get('user_id'))
|
||
continue;
|
||
|
||
if (in_array($to_user_id, self::$recipients))
|
||
continue;
|
||
|
||
self::$recipients[] = $to_user_id;
|
||
|
||
self::$model->clear();
|
||
self::$model->from_id = $from_user_id;
|
||
self::$model->to_id = $to_user_id;
|
||
|
||
foreach (self::$message as $key => $value)
|
||
self::$model->$key = $value;
|
||
|
||
if (self::$model->time == '')
|
||
self::$model->time = date('Y-m-d H:i:s');
|
||
|
||
$return_value = $return_value && self::$model->save();
|
||
}
|
||
}
|
||
|
||
return $return_value;
|
||
}
|
||
|
||
public static function send_system($message, $to, $clear_recipients = TRUE)
|
||
{
|
||
if (!is_array($message))
|
||
$message = array('body' => $message);
|
||
|
||
$message['from_deleted'] = 1;
|
||
return self::send($message, 1, $to, $clear_recipients);
|
||
}
|
||
|
||
public function valid_to_field($input)
|
||
{
|
||
$value = trim($input->value);
|
freenetis/branches/approval/application/views/js/work_reports_show.php | ||
---|---|---|
$("#work_report_info").children("tbody").append("<tr>").children().last().append("<th><?php echo url_lang::lang('texts.Rate for hour') ?></th>").append("<td>").children().last().append("<input type=text id='hour_rate' class='number'>");
|
||
$("#work_report_info").children("tbody").append("<tr>").children().last().append("<th><?php echo url_lang::lang('texts.Rate for Km') ?></th>").append("<td>").children().last().append("<input type=text id='km_rate' class='number'>");
|
||
|
||
$(".edit_button").each(function (){
|
||
i++;
|
||
$(this).attr("id", 'edit-'+i);
|
||
});
|
||
|
||
i = <?php echo $i ?>;
|
||
|
||
$("#hour_rate, #km_rate").live("keyup", function () {
|
||
|
||
var hour_rate = $("#hour_rate").val();
|
||
... | ... | |
$(".hour_rate").each(function (){
|
||
if (!is_numeric($(this).val()) || old_hour_rate == $(this).val())
|
||
$(this).val(hour_rate);
|
||
if ($(this).is("td") && $(this).text()!="")
|
||
{
|
||
if (!is_numeric($(this).text()) || old_hour_rate == $(this).text())
|
||
$(this).text(hour_rate);
|
||
}
|
||
});
|
||
old_hour_rate = hour_rate;
|
||
}
|
||
... | ... | |
$(".km_rate").each(function (){
|
||
if (!is_numeric($(this).val()) || old_km_rate == $(this).val())
|
||
$(this).val(km_rate);
|
||
if ($(this).is("td") && $(this).text()!="")
|
||
{
|
||
if (!is_numeric($(this).text()) || old_km_rate == $(this).text())
|
||
$(this).text(km_rate);
|
||
}
|
||
});
|
||
old_km_rate = km_rate;
|
||
}
|
||
... | ... | |
|
||
i++;
|
||
|
||
$(".work_reports_submit").removeAttr("disabled");
|
||
//$(".work_reports_submit").removeAttr("disabled");
|
||
|
||
var row = $(".grid_table").children("tbody").append("<tr>").children().last();
|
||
|
||
date = row.append("<td>").children().last().append("<input type=text name='date["+i+"]' class='date required'>").children().last();
|
||
date = row.append("<td>").children().last().append("<input type=text name='date["+i+"]' class='date datestring required'>").children().last();
|
||
time_from = row.append("<td>").children().last().append("<input type=text name='time_from["+i+"]' class='time_from time required'>").children().last();
|
||
time_to = row.append("<td>").children().last().append("<input type=text name='time_to["+i+"]' class='time_to time'>").children().last();
|
||
hours = row.append("<td>").children().last().append("<input type=text name='hours["+i+"]' class='hours required number'>").children().last();
|
||
... | ... | |
return false;
|
||
});
|
||
|
||
var old_values = new Array();
|
||
|
||
$(".edit_button").live("click", function() {
|
||
var s = explode("-",$(this).attr("id"));
|
||
var id = s[count(s)-1];
|
||
|
||
var date = $(this).parent().parent().children().first();
|
||
var time_from = date.next();
|
||
var time_to = time_from.next();
|
||
var hours = time_to.next();
|
||
var hour_rate = hours.next();
|
||
var km = hour_rate.next();
|
||
var km_rate = km.next();
|
||
var description = km_rate.next();
|
||
var suggest_amount = description.next();
|
||
|
||
if (old_values[id] == null)
|
||
{
|
||
old_values[id] = new Array();
|
||
old_values[id]['date'] = trim(date.text());
|
||
old_values[id]['time_from'] = trim(time_from.text());
|
||
old_values[id]['time_to'] = trim(time_to.text());
|
||
old_values[id]['hours'] = trim(hours.text());
|
||
old_values[id]['hour_rate'] = trim(hour_rate.text());
|
||
old_values[id]['km'] = trim(km.text());
|
||
old_values[id]['km_rate'] = trim(km_rate.text());
|
||
old_values[id]['description'] = trim(description.text());
|
||
old_values[id]['suggest_amount'] = trim(suggest_amount.text());
|
||
|
||
var s = explode("/",this.href);
|
||
var oid = s[count(s)-1];
|
||
|
||
date.html('<input type="hidden" name="id['+id+']" value="'+oid+'"><input type="text" name="date['+id+']" value="'+trim(date.text())+'" class="date datestring required">');
|
||
time_from.html('<input type="text" name="time_from['+id+']" value="'+trim(time_from.text())+'" class="time_from time required">');
|
||
time_to.html('<input type="text" name="time_to['+id+']" value="'+trim(time_to.text())+'" class="time_to time required">');
|
||
hours.html('<input type="text" name="hours['+id+']" value="'+trim(hours.text())+'" class="hours number required">');
|
||
hour_rate.html('<input type="text" name="hour_rate['+id+']" value="'+trim(hour_rate.text())+'" class="hour_rate number required">');
|
||
km.html('<input type="text" name="km['+id+']" value="'+trim(km.text())+'" class="km number required">');
|
||
km_rate.html('<input type="text" name="km_rate['+id+']" value="'+trim(km_rate.text())+'" class="km_rate number required">');
|
||
description.html('<textarea name="description['+id+']" class="description required">'+trim(description.text())+'</textarea>');
|
||
suggest_amount.html('<input type="text" name="suggest_amount['+id+']" value="'+trim(suggest_amount.text())+'" class="suggest_amount number required">');
|
||
|
||
date = date.children().first();
|
||
|
||
date.datepicker({
|
||
dateFormat: "yy-mm-dd",
|
||
changeMonth: true,
|
||
changeYear: true,
|
||
showOtherMonths: true,
|
||
selectOtherMonths: true
|
||
});
|
||
|
||
$(".time_from, .time_to").autocomplete({
|
||
source: function (request, response){
|
||
var arr = new Array();
|
||
var x = 0;
|
||
for (var i=0;i<count(availableTimes);i++)
|
||
{
|
||
if (strpos(availableTimes[i], request.term) === 0)
|
||
arr[x++] = availableTimes[i];
|
||
}
|
||
response(arr);
|
||
},
|
||
close: function(event, ui) {
|
||
$(this).trigger('keyup');
|
||
}
|
||
});
|
||
}
|
||
else
|
||
{
|
||
var confirm = window.confirm('<?php echo url_lang::lang('texts.Do you really want to delete this work') ?>?');
|
||
|
||
if (confirm)
|
||
{
|
||
date.html(old_values[id]['date']);
|
||
time_from.html(old_values[id]['time_from']);
|
||
time_to.html(old_values[id]['time_to']);
|
||
hours.html(old_values[id]['hours']);
|
||
hour_rate.html(old_values[id]['hour_rate']);
|
||
km.html(old_values[id]['km']);
|
||
km_rate.html(old_values[id]['km_rate']);
|
||
description.html('<textarea class="description" readonly>'+old_values[id]['description']+'</textarea>');
|
||
suggest_amount.html(old_values[id]['suggest_amount']);
|
||
|
||
delete old_values[id];
|
||
}
|
||
}
|
||
|
||
return false;
|
||
});
|
||
|
||
$(".delete_button").live("click", function() {
|
||
|
||
var confirm = window.confirm('<?php echo url_lang::lang('texts.Do you really want to delete this work') ?>?');
|
||
... | ... | |
|
||
});
|
||
|
||
$(".work_reports_form").validate({
|
||
/*$(".work_reports_form").validate({
|
||
submitHandler: function(form) {
|
||
alert ("test");
|
||
return false;
|
||
//alert($(".work_reports_form").serialize());
|
||
//return false;
|
||
}
|
||
});
|
||
});*/
|
freenetis/branches/approval/application/views/work_reports_show.php | ||
---|---|---|
|
||
<form method="post" class="work_reports_form">
|
||
<?php echo $grid ?>
|
||
<input type="submit" value="ok" class="work_reports_submit" disabled>
|
||
<input type="submit" value="ok" class="work_reports_submit">
|
||
</form>
|
freenetis/branches/approval/system/libraries/ORM.php | ||
---|---|---|
return $return_obj;
|
||
}
|
||
|
||
/**
|
||
* Returns table name of object
|
||
*
|
||
* @author Michal Kliment
|
||
* @return string
|
||
*/
|
||
public function get_table_name()
|
||
{
|
||
return $this->table_name;
|
||
}
|
||
|
||
} // End ORM
|
freenetis/branches/approval/system/libraries/Profiler.php | ||
---|---|---|
*/
|
||
public function render($return = FALSE)
|
||
{
|
||
if (Config::item('profiler.benchmarks'))
|
||
{
|
||
$data = array();
|
||
//if (Config::get('profiler.benchmarks'))
|
||
//{
|
||
// Clean unique id from system benchmark names
|
||
foreach (Benchmark::get(TRUE) as $name => $time)
|
||
{
|
||
$data['benchmarks'][str_replace(SYSTEM_BENCHMARK.'_', '', $name)] = $time;
|
||
}
|
||
}
|
||
//}
|
||
|
||
// Load database benchmarks, if Database has been loaded
|
||
if (Config::item('profiler.database') AND class_exists('Database', FALSE))
|
||
{
|
||
//if (Config::get('profiler.database') AND class_exists('Database', FALSE))
|
||
//{
|
||
$data['queries'] = Database::$benchmarks;
|
||
}
|
||
//}
|
||
|
||
// Load POST data
|
||
if (Config::item('profiler.post'))
|
||
{
|
||
//if (Config::get('profiler.post'))
|
||
//{
|
||
$data['post'] = TRUE;
|
||
}
|
||
//}
|
||
|
||
if (Config::item('profiler.session'))
|
||
{
|
||
//if (Config::get('profiler.session'))
|
||
//{
|
||
$data['session'] = TRUE;
|
||
}
|
||
//}
|
||
|
||
if (Config::item('profiler.cookie'))
|
||
{
|
||
//if (Config::get('profiler.cookie'))
|
||
//{
|
||
$data['cookie'] = TRUE;
|
||
}
|
||
//}
|
||
|
||
// Load the profiler view
|
||
$view = new View('kohana_profiler', $data);
|
Také k dispozici: Unified diff
Nektere starsi rozdelene veci, ktere jsem necomitnul.