function index($tab = 'list') { $model = HC_App::model('user'); $layout = clone $this->layout; /* build content */ $content = ''; $method = '_content_' . $tab; if (method_exists($this, $method)) { $content = $this->{$method}($model); } else { $extensions = HC_App::extensions(); if ($extensions->has(array('admin/users/index', $tab))) { $calling_parent = 'admin/users/index' . '/' . $tab; $content = $extensions->run(array('admin/users/index', $tab, $calling_parent)); } } $layout->set_partial('content', $content); /* header */ $layout->set_partial('header', $this->render('admin/users/index/_header', array())); /* menubar */ $layout->set_partial('menubar', $this->render('admin/users/index/_menubar', array('tab' => $tab, 'object' => $model))); /* final layout */ $this->layout->set_partial('content', $this->render('admin/users/index/index', array('layout' => $layout))); $this->layout(); }
function update($id) { $extensions = HC_App::extensions(); $args = func_get_args(); $id = array_shift($args); $model = HC_App::model('shift'); $model->where('id', $id)->get(); $this->_check_model($model); $acl = HC_App::acl(); if (!$acl->set_object($model)->can('edit')) { return; } $original_model = clone $model; /* supplied as parameters */ $values = hc_parse_args($args); /* if post supplied */ $form = $this->form_edit; $post = $this->input->post(); if ($post) { $form->grab($post); $form_values = $form->values(); $values = array_merge($values, $form_values); } if (!$values or !array_key_exists("action", $values)) { $redirect_to = 'shifts/zoom/index/id/' . $id; $this->redirect($redirect_to); return; } /* approve */ if (!$model->release_request or $values['action']) { $current_user = $this->auth->user(); $model->release_request = 0; $model->user_id = 0; $action_result = $model->save(); // $action_result = $model->delete($current_user, 'user'); $msg = HCM::__('Shift released'); } else { $model->release_request = 0; $action_result = $model->save(); $msg = HCM::__('Shift release rejected'); } if ($action_result) { /* extensions */ $extensions->run('shifts/update', $post, $model); /* save and redirect here */ $this->session->set_flashdata('message', $msg); $redirect_to = 'shifts/zoom/index/id/' . $id; /* what to refresh on referring page */ $parent_refresh = $model->present_calendar_refresh(); $parent_refresh = array_keys($parent_refresh); $this->redirect($redirect_to, $parent_refresh); } else { /* final layout */ $this->layout->set_partial('content', Modules::run('shifts/zoom/index', $model, 'release')); $this->layout(); } }
function api_insert($post) { $extensions = HC_App::extensions(); $notifications_email_skip = isset($post['notifications_email_skip']) ? $post['notifications_email_skip'] : FALSE; if ($notifications_email_skip) { $messages = HC_App::model('messages'); $messages->remove_engine('email'); } /* extensions */ $extensions->run('notifications_email/insert', $post); $return = TRUE; return $return; }
function __construct() { parent::__construct(); if (defined('NTS_DEVELOPMENT')) { if (!($this->input->is_ajax_request() or $this->is_module())) { $this->output->enable_profiler(TRUE); } } $this->load->database(); $ri = HC_Lib::ri(); if (!$this->is_setup()) { $setup_redirect = 'setup'; if ($ri) { $setup_redirect = $ri . '/setup'; } $this->redirect($setup_redirect); exit; } $this->load->library(array('session', 'hc_modules')); /* add module models paths for autoloading */ $extensions = HC_App::extensions(); $acl = HC_App::acl(); $look_in_dirs = $this->config->look_in_dirs(); foreach ($look_in_dirs as $ldir) { if (class_exists('Datamapper')) { Datamapper::add_model_path($ldir); } $this->load->add_package_path($ldir); $extensions->add_dir($ldir); $acl->add_dir($ldir); } $extensions->init(); $acl->init(); /* reload config paths */ $app_conf = HC_App::app_conf(); $this->load->library('hc_modules'); /* events and notifiers */ $this->load->library(array('hc_events', 'hc_email')); $this->hc_email->from = $app_conf->get('email_from'); $this->hc_email->fromName = $app_conf->get('email_from_name'); // conf $this->load->library('hc_auth', NULL, 'auth'); $user = $this->auth->user(); $acl->set_user($user); $CI =& ci_get_instance(); $current_url = $CI->config->site_url($CI->uri->uri_string()); $this->session->set_flashdata('referrer', $current_url); $this->layout = new HC_View_Layout(); }
function index() { $args = hc_parse_args(func_get_args(), TRUE); if (!isset($args['id'])) { echo 'PARAMS MISSING IN admin/users/zoom/index<br>'; return; } /* PARAMS */ $id = $args['id']; $tab = isset($args['tab']) ? $args['tab'] : 'edit'; $subtab = isset($args['subtab']) ? $args['subtab'] : ''; if (is_object($id)) { $model = $id; } else { $model = HC_App::model('user'); $model->where('id', $id)->get(); $this->_check_model($model); } /* build content */ $subheader = NULL; $content = ''; $method = '_content_' . $tab; if (method_exists($this, $method)) { $content = $this->{$method}($model); } else { $extensions = HC_App::extensions(); if ($extensions->has(array('admin/users/zoom', $tab))) { $calling_parent = 'admin/users/zoom/index/id/' . $id . '/tab/' . $tab; $pass_arg = isset($args['_pass']) ? $args['_pass'] : array(); array_unshift($pass_arg, array('admin/users/zoom', $tab, $calling_parent)); $pass_arg[] = 'user'; $pass_arg[] = $model->id; $content = call_user_func_array(array($extensions, 'run'), $pass_arg); $subheader = $extensions->run(array('admin/users/zoom/menubar', $tab), $model); } } /* CONTENT */ $content = $this->render($this->views_path . '/index', array('subheader' => $subheader, 'content' => $content)); $this->layout->set_partial('content', $content); /* HEADER */ $this->layout->set_partial('header_ajax', $this->render($this->views_path . '/_header', array('object' => $model))); /* MENUBAR */ $this->layout->set_partial('sidebar', $this->render($this->views_path . '/_menubar', array('tab' => $tab, 'object' => $model))); $this->layout(); }
function index() { if (!$this->auth->check()) { $this->redirect('auth/login'); } $args = hc_parse_args(func_get_args(), TRUE); // if( ! (isset($args['id'])) ){ // echo 'PARAMS MISSING IN admin/users/zoom/index<br>'; // return; // } /* PARAMS */ $tab = isset($args['tab']) ? $args['tab'] : 'edit'; $model = isset($args['id']) ? $args['id'] : clone $this->auth->user(); /* build content */ $subheader = NULL; $content = ''; $method = '_content_' . $tab; if (method_exists($this, $method)) { $content = $this->{$method}($model); } else { $extensions = HC_App::extensions(); if ($extensions->has(array('auth/profile', $tab))) { $calling_parent = 'auth/profile/index/tab/' . $tab; $pass_arg = isset($args['_pass']) ? $args['_pass'] : array(); array_unshift($pass_arg, array('auth/profile', $tab, $calling_parent)); $pass_arg[] = 'user'; $pass_arg[] = $model->id; $content = call_user_func_array(array($extensions, 'run'), $pass_arg); $subheader = $extensions->run(array('auth/profile/menubar', $tab), $model); } } /* CONTENT */ $content = $this->render($this->views_path . '/index', array('subheader' => $subheader, 'content' => $content)); $this->layout->set_partial('content', $content); /* HEADER */ $this->layout->set_partial('header_ajax', $this->render($this->views_path . '/_header', array('object' => $model))); /* MENUBAR */ $this->layout->set_partial('sidebar', $this->render($this->views_path . '/_menubar', array('tab' => $tab, 'object' => $model))); $this->layout(); }
} /* TIME */ if ($templates_label) { $time_input = HC_Html_Factory::widget('list')->add_attr('class', 'list-unstyled')->add_attr('class', 'list-inline')->add_item('item', $form->input('time'))->add_item('label', $templates_label)->add_item_attr('label', 'style', 'margin-left: 1em;'); } else { $time_input = $form->input('time'); } $display_form->add_item(HC_Html_Factory::widget('grid')->add_item(HC_Html_Factory::widget('label_row')->set_label(HCM::__('Time'))->set_content($time_input)->set_error($form->input('time')->error()), 7)->add_item(HC_Html_Factory::widget('label_row')->set_label(HCM::__('Date'))->set_content($form->input('date'))->set_error($form->input('date')->error()), 5)); /* STAFF */ $display_form->add_item($form->input('user')); $staff_view = HC_Html_Factory::widget('module')->set_url('shifts/zoom/form')->pass_arg($object)->pass_arg('user')->set_self_target(TRUE)->set_skip_src(TRUE); $display_form->add_item(HC_Html_Factory::widget('label_row')->set_label(HCM::__('Staff'))->set_content($staff_view)); /* STATUS */ $display_form->add_item(HC_Html_Factory::widget('label_row')->set_label(HCM::__('Status'))->set_content($form->input('status')->set_inline(TRUE)->add_option($object->_const('STATUS_DRAFT'), $object->set('status', $object->_const('STATUS_DRAFT'))->present_status())->add_option($object->_const('STATUS_ACTIVE'), $object->set('status', $object->_const('STATUS_ACTIVE'))->present_status())->render())->set_error($form->input('status')->error())); /* ADD NOTE IF POSSIBLE */ $extensions = HC_App::extensions(); $more_content = $extensions->run('shifts/zoom/confirm'); if ($more_content) { $more_holder = HC_Html_Factory::widget('list')->add_attr('class', 'list-unstyled')->add_attr('class', 'list-separated2'); foreach ($more_content as $mc) { $more_holder->add_item($mc); } $display_form->add_item($more_holder); } $display_form->add_item(HC_Html_Factory::widget('label_row')->set_content($buttons)->add_attr('class', 'padded2')->add_attr('style', 'border-top: #eee 1px solid; margin-top: 1em;')); // echo $display_form->render(); $out = HC_Html_Factory::widget('flatmodal'); $out->set_content($display_form); /* $out->set_closer( HC_Html_Factory::element('a')
function render() { $sh = $this->shift(); $t = HC_Lib::time(); $titles = array(); $iknow = $this->iknow(); $wide = $this->wide(); $use_color = FALSE; $use_color = TRUE; if ($wide && $wide === 'mini') { $use_color = TRUE; } if (in_array($sh->type, array($sh->_const("TYPE_TIMEOFF")))) { $display = array('date', 'time', 'user', 'location'); } else { if (!$wide or $wide === 'mini') { $display = array('date', 'time', 'location', 'user'); } elseif ($wide) { $display = array('date', 'time', 'user', 'location'); } } foreach ($iknow as $ik) { $display = HC_Lib::remove_from_array($display, $ik); } // if( in_array($sh->type, array($sh->_const("TYPE_TIMEOFF"))) ){ // $display = HC_Lib::remove_from_array($display, 'location'); // } foreach ($display as $ds) { $title_view = ''; switch ($ds) { case 'date': $title_view = $sh->present_date(HC_PRESENTER::VIEW_RAW); break; case 'time': $title_view = $sh->present_time(); break; case 'location': if (in_array($sh->type, array($sh->_const("TYPE_TIMEOFF")))) { $title_view = ''; // $title_view = HCM::__('Timeoff'); // $title_view = $sh->present_location(); } else { $title_view = $sh->present_location(); } break; case 'user': if ($sh->type == $sh->_const('TYPE_TIMEOFF') && !in_array('time', $display)) { $title_view = $sh->present_type(HC_PRESENTER::VIEW_HTML_ICON) . $sh->present_user(HC_PRESENTER::VIEW_RAW); } else { // $titles[] = $sh->present_user(); if ($sh->user_id) { $title_view = $sh->present_user(HC_PRESENTER::VIEW_RAW); } else { $title_view = $sh->present_user(); } } break; } // if( $title_view ){ $titles[] = $title_view; // } } $wrap = HC_Html_Factory::element('div')->add_attr('class', array('alert', 'display-block'))->add_attr('class', array('alert-default-o'))->add_attr('class', array('no-underline'))->add_attr('class', array('alert-condensed2'))->add_attr('class', array('text-smaller'))->add_attr('class', array('squeeze-in')); foreach ($sh->present_status_class() as $status_class) { // $wrap->add_attr('class', 'alert-' . $status_class); } /* background color depends on location */ if ($use_color) { $color = $sh->location->present_color(); } else { $type = $sh->type; switch ($type) { case $sh->_const('TYPE_TIMEOFF'): $wrap->add_attr('class', array('alert-archive')); $color = '#ddd'; break; default: $wrap->add_attr('class', array('alert-success-o')); $color = '#dff0d8'; break; } } if ($sh->status == $sh->_const('STATUS_DRAFT')) { $color1 = HC_Lib::adjust_color_brightness($color, 0); $color2 = HC_Lib::adjust_color_brightness($color, 20); // $color1 = '#fff'; // $color2 = '#eee'; $wrap->add_attr('style', "background: repeating-linear-gradient(\r\n\t\t\t\t\t-45deg,\r\n\t\t\t\t\t{$color1},\r\n\t\t\t\t\t{$color1} 6px,\r\n\t\t\t\t\t{$color2} 6px,\r\n\t\t\t\t\t{$color2} 12px\r\n\t\t\t\t\t);\r\n\t\t\t\t"); } else { $wrap->add_attr('style', 'background-color: ' . $color . ';'); // $wrap->add_attr('class', 'alert-success'); } if (!$sh->user_id) { $wrap->add_attr('class', 'hc-red-triangled'); } // echo $color; /* ID */ if (in_array('id', $iknow)) { $wrap->add_child($sh->present_id()); } /* build link title */ $nolink = $this->nolink(); $new_window = $this->new_window(); $a_link = HC_Html_Factory::widget('titled', 'a'); $link_to = 'shifts/zoom/index/id/' . $sh->id; $a_link->add_attr('href', HC_Lib::link($link_to)->url()); if (!$new_window) { $a_link->add_attr('class', 'hc-flatmodal-loader'); } else { $a_link->add_attr('target', '_blank'); $a_link->add_attr('class', 'hc-parent-loader'); } if ($nolink) { $a_title = HC_Html_Factory::widget('titled', 'span'); } else { $a_title = HC_Html_Factory::widget('titled', 'a'); } $a_title = HC_Html_Factory::widget('titled', 'span'); $a_title->add_attr('class', array('squeeze-in')); // $a_title->add_attr('style', 'border: red 1px solid;'); // $a_title->add_attr('style', 'border-color: ' . $sh->location->present_color()); if ($wide === 'mini') { if (!$nolink) { $final_ttl = clone $a_link; $final_ttl->add_child(' ')->add_attr('style', 'display: block;'); $final_ttl->add_attr('title', join(' ', $titles)); } $a_title->add_child($final_ttl); } else { if (count($display) > 1) { if ($wide) { $titles2 = HC_Html_Factory::widget('grid'); $titles2->set_slim(); $grid_width = array(2 => 6, 3 => 4, 4 => 3, 5 => 2, 6 => 2); $grid_width = isset($grid_width[count($display)]) ? $grid_width[count($display)] : 2; for ($ti = 0; $ti < count($titles); $ti++) { $ttl = $titles[$ti]; // next title is empty? if ($ti < count($titles) - 1 && !strlen($titles[$ti + 1])) { $ti++; $grid_width += $grid_width; } $final_ttl = $ttl; if (!$nolink) { $final_ttl = clone $a_link; $final_ttl->add_child($ttl); } $titles2->add_item($final_ttl, $grid_width, array('class' => 'squeeze-in')); } } else { $titles2 = HC_Html_Factory::widget('list')->add_attr('class', 'list-unstyled'); $this_index = 0; foreach ($titles as $ttl) { if (!strlen($ttl)) { continue; } $final_ttl = $ttl; if (!$nolink) { $final_ttl = clone $a_link; $final_ttl->add_child($ttl); } $titles2->add_item($this_index, $final_ttl); $titles2->add_item_attr($ttl, 'class', array('squeeze-in')); $this_index++; } } $a_title->add_attr('title', join(' ', $titles)); $a_title->add_child($titles2); } else { $final_ttl = $titles; if (!$nolink) { $final_ttl = clone $a_link; $final_ttl->add_child($titles); } $final_ttl->add_attr('title', join(' ', $titles)); $a_title->add_child($final_ttl); } } $wrap->add_child($a_title); /* EXTENSIONS */ $extensions = HC_App::extensions(); $more_content = $extensions->set_skip($iknow)->run('shifts/quickview', $sh, $wrap); if ($wide !== 'mini') { if ($more_content) { $more_wrap = HC_Html_Factory::widget('list')->add_attr('class', 'list-unstyled')->add_attr('class', 'list-separated')->add_attr('class', 'text-small'); $added = 0; foreach ($more_content as $mck => $mc) { if ($mck && in_array($mck, $iknow)) { continue; } $more_wrap->add_item($mc); $added++; } if ($added) { $wrap->add_child($more_wrap); } } } /* THIS CHILDREN */ if ($wide !== 'mini') { $children = $this->children(); foreach ($children as $child) { $wrap->add_child($child); } } $wrap->add_attr('class', 'common-link-parent'); return $wrap->render(); }
function index() { $args = hc_parse_args(func_get_args(), TRUE); if (!isset($args['id'])) { echo 'PARAMS MISSING IN shifts/zoom/index<br>'; return; } /* PARAMS */ $id = $args['id']; $tab = isset($args['tab']) ? $args['tab'] : 'overview'; $subtab = isset($args['subtab']) ? $args['subtab'] : ''; if (is_object($id)) { $model = $id; } else { $model = HC_App::model('shift'); $model->where('id', $id)->get(); $this->_check_model($model); } $acl = HC_App::acl(); if (!$acl->set_object($model)->can('view')) { return; } /* display form */ $this->form_edit->set_values($model->to_array()); $this->form_edit->set_errors($model->errors()); /* build content */ $calling_parent = 'shifts/zoom/index/id/' . $id; $subheader = NULL; $content = ''; $method = '_content_' . $tab; if (method_exists($this, $method)) { $content = $this->{$method}($model, $args); } else { $extensions = HC_App::extensions(); if ($extensions->has(array('shifts/zoom', $tab))) { $calling_parent = 'shifts/zoom/index/id/' . $id . '/tab/' . $tab; $content = $extensions->run(array('shifts/zoom', $tab, $calling_parent), $model, $subtab); $subheader = $extensions->run(array('shifts/zoom/menubar', $tab), $model); } } /* CONTENT */ $content = $this->render($this->views_path . '/index', array('subheader' => $subheader, 'content' => $content)); $this->layout->set_partial('content', $content); if (!in_array($tab, array('assign'))) { /* HEADER */ $this->layout->set_partial('header_ajax', $this->render($this->views_path . '/_header', array('object' => $model))); /* MENUBAR */ $this->layout->set_partial('sidebar', $this->render($this->views_path . '/_menubar', array('tab' => $tab, 'object' => $model))); } $this->layout(); }
private function _init_shifts($state) { $t = HC_Lib::time(); $shifts = HC_App::model('shift'); switch ($state['range']) { case 'custom': if (strpos($state['date'], '_') !== FALSE) { list($start_date, $end_date) = explode('_', $state['date']); } else { $start_date = $end_date = $state['date']; } break; case 'day': $start_date = $state['date']; $end_date = 0; break; case 'all': $start_date = $end_date = 0; break; case 'upcoming': $t->setNow(); $start_date = $t->formatDate_Db(); $end_date = NULL; break; default: $t->setDateDb($state['date']); list($start_date, $end_date) = $t->getDates($state['range'], TRUE); break; } if ($start_date && $end_date) { // $shifts->where('date_end >=', $start_date); // $shifts->where('date <=', $end_date); $shifts->where('date_end >=', $start_date); $shifts->where('date <=', $end_date); $shifts->where('date >=', $start_date); } elseif ($start_date && $end_date === 0) { $shifts->where('date =', $start_date); } elseif ($start_date && $end_date === NULL) { $shifts->where('date_end >=', $start_date); } /* location */ $where_location = array(); if ($this->fix['location']) { if (is_array($this->fix['location']) && count($this->fix['location']) == 1 && $this->fix['location'][0] == 0) { /* all locations */ } else { $where_location = $this->fix['location']; } } if (isset($state['location'])) { if (!is_array($state['location'])) { $state['location'] = array($state['location']); } $where_location = $state['location']; } if ($where_location) { $shifts->group_start(); $shifts->or_where('type', $shifts->_const('TYPE_TIMEOFF')); $shifts->or_where_in_related('location', 'id', $where_location); $shifts->group_end(); } /* staff */ $where_staff = array(); if ($this->fix['staff']) { $where_staff = $this->fix['staff']; } if (isset($state['staff'])) { if (!is_array($state['staff'])) { $state['staff'] = array($state['staff']); } $where_staff = $state['staff']; } if (count($where_staff)) { if (in_array(0, $where_staff)) { $shifts->group_start(); $shifts->or_where_related('user', 'id', NULL, TRUE); $shifts->or_where_related('user', 'id', 0); $shifts->or_where_in_related('user', 'id', $where_staff); $shifts->group_end(); } else { $shifts->where_related('user', 'id', $where_staff); } } /* type */ if (isset($this->fix['type'])) { $state['type'] = $this->fix['type']; } if (isset($state['by']) && $state['by'] == 'location') { $shifts->where('type', $shifts->_const('TYPE_SHIFT')); } if (isset($state['type']) && $state['type'] !== NULL) { $this_types = array(); $this_statuses = array(); foreach ($state['type'] as $stype) { if (strpos($stype, '_') === FALSE) { $this_type = $stype; $this_types[$this_type] = 1; } else { list($this_type, $this_status) = explode('_', $stype); $this_types[$this_type] = 1; $this_statuses[$this_status] = 1; } } if ($this_types) { $shifts->where_in('type', array_keys($this_types)); } if ($this_statuses) { $shifts->where_in('status', array_keys($this_statuses)); } } /* status */ if (isset($state['status'])) { $shifts->where('status', $state['status']); } /* extensions */ $extensions = HC_App::extensions(); $current_filter = ''; if (isset($this->fix['filter'])) { $current_filter = $this->fix['filter']; } elseif (isset($state['filter'])) { $current_filter = $state['filter']; } /* preprocess */ if ($current_filter) { if ($extensions->has(array('list/filter', $current_filter))) { $shifts = $extensions->run(array('list/filter', $current_filter), 'pre', $shifts); } } /* NOW GET */ $shifts->get(); // $shifts->get_iterated(); // $shifts->check_last_query(); $acl = HC_App::acl(); $return = $acl->filter($shifts, 'view'); /* extensions with postprocess */ if ($current_filter) { if ($extensions->has(array('list/filter', $current_filter))) { $return = $extensions->run(array('list/filter', $current_filter), 'post', $return); } } return $return; // return $shifts; }
function api_insert($post, $parent = NULL) { $notes = $post['notes']; $note = HC_App::model('note'); $note->content = $notes; $relations = array('author' => $this->auth->user()); if ($parent) { $relations[$parent->my_class()] = $parent; } if (isset($parent)) { $access_levels = $this->access_levels; if (count($access_levels) == 1) { $access_levels = array_keys($access_levels); $access_level = $access_levels[0]; } else { $access_level = $post['access_level']; } } else { $access_level = 0; } if (!$access_level) { $access_level = 0; } $note->access_level = $access_level; if ($note->save($relations)) { $return = TRUE; } else { $return = $note->error->string; } /* extensions */ $extensions = HC_App::extensions(); $extensions->run('notes/insert', $post); return $return; }
function insert() { $extensions = HC_App::extensions(); $params = $this->_init_add_params(func_get_args()); $params_array = $params->to_array(); $model = HC_App::model('shift'); $date_input = $this->form_add_time->input('date'); $date_input->set_value($params_array['date']); $dates = $date_input->dates(); /* if post supplied */ $post = $this->input->post(); $this->form_confirm->grab($post); $form_values = $this->form_confirm->values(); $possible_statuses = $params->get_options('status'); if (count($possible_statuses) > 1) { if (array_key_exists('status', $form_values)) { $params_array['status'] = $form_values['status']; } } elseif (count($possible_statuses) == 1) { $params_array['status'] = array_shift($possible_statuses); } $success_count = 0; $users_ids = $params_array['user']; // $publish_now = ($form_values['status'] == $model->_const('STATUS_ACTIVE')) ? TRUE : FALSE; $publish_now = $params_array['status'] == $model->_const('STATUS_ACTIVE') ? TRUE : FALSE; unset($params_array['user']); if (!$params_array['location']) { unset($params_array['location']); } /* group id */ $group_id = 0; if (count($dates) * count($users_ids) > 1) { $max_group_id = $model->select_max('group_id')->get()->group_id; if (!$max_group_id) { $max_group_id = 0; } $group_id = $max_group_id + 1; } $result_models = array(); foreach ($dates as $date) { foreach ($users_ids as $uid) { $this_params = $params_array; $this_params['date'] = $date; if ($uid) { $this_params['user'] = $uid; } $model->clear(); $related = $model->from_array($this_params); $model->group_id = $group_id; /* create shift */ if (!$model->save($related)) { $errors = $model->errors(); $this->form_confirm->set_errors($errors); $orphan_errors = $this->form_confirm->orphan_errors(); return $this->_add($params, 'confirm'); } $success_count++; $result_models[] = clone $model; /* extensions */ $extensions->run('shifts/insert', $post, $model); } } switch ($model->type) { case $model->_const('TYPE_SHIFT'): $msg = sprintf(HCM::_n('%d shift added', '%d shifts added', $success_count), $success_count); break; case $model->_const('TYPE_TIMEOFF'): $msg = sprintf(HCM::_n('%d timeoff added', '%d timeoffs added', $success_count), $success_count); break; } $this->session->set_flashdata('message', $msg); $redirect_to = 'list/calendar'; $parent_refresh = array(); foreach ($result_models as $o) { $this_parent_refresh = $o->present_calendar_refresh(); $parent_refresh = array_merge($parent_refresh, $this_parent_refresh); } $parent_refresh = array_keys($parent_refresh); $this->redirect($redirect_to, $parent_refresh); }
function bulk() { $acl = HC_App::acl(); $extensions = HC_App::extensions(); /* if post supplied */ $post = $this->input->post(); if (isset($post['id'])) { $ids = $post['id']; } elseif (isset($post['ids'])) { $ids = explode('|', $post['ids']); } else { $ids = array(); } // $action = isset($post['action']) ? $post['action'] : ''; // if( $ids && $action ){ if ($ids) { $model = HC_App::model('shift'); $model->where_in('id', $ids)->get(); $success_count = 0; $action = 'update'; /* delete */ if (isset($post['delete'])) { $action = 'delete'; foreach ($model as $o) { if (!$acl->set_object($o)->can('delete')) { continue; } if ($o->delete()) { $success_count++; } } } else { $this->form->grab($post); $form_values = $this->form->values(); foreach ($model as $o) { if (!$acl->set_object($o)->can('edit')) { continue; } reset($form_values); foreach ($form_values as $k => $v) { if ($v === NULL) { continue; } $o->{$k} = $v; } if ($o->save()) { $success_count++; } else { $errors = $o->errors(); } } } switch ($action) { case 'delete': $msg = sprintf(HCM::_n('%d shift deleted', '%d shifts deleted', $success_count), $success_count); break; default: $msg = sprintf(HCM::_n('%d shift updated', '%d shifts updated', $success_count), $success_count); break; } if ($msg) { $this->session->set_flashdata('message', $msg); } foreach ($model as $o) { $extensions->run('shifts/update', $post, $o); } } $redirect_to = '-referrer-'; $parent_refresh = array(); foreach ($model as $o) { $this_parent_refresh = $o->present_calendar_refresh(); $parent_refresh = array_merge($parent_refresh, $this_parent_refresh); } $parent_refresh = array_keys($parent_refresh); $this->redirect($redirect_to, $parent_refresh); }
public function send($key, $user, $payloads = array()) { if (!$user->email) { return; } $app_conf = HC_App::app_conf(); $conf_key = 'notifications_email:' . $key; $subject = $app_conf->conf($conf_key); if ($subject === FALSE) { $subject = $key; } $msg = new stdClass(); $msg->subject = $subject; if (count($payloads) > 1) { $msg->subject .= ' (' . count($payloads) . ')'; } $extensions = HC_App::extensions(); /* build body */ $body = array(); foreach ($payloads as $payload) { foreach ($payload as $k => $obj) { /* $body = array_merge( $body, array_values($obj->present_text(HC_PRESENTER::VIEW_TEXT, TRUE)) ); */ if (is_object($obj)) { $body = array_merge($body, array_values($obj->present_text(HC_PRESENTER::VIEW_RAW, TRUE))); } elseif (is_array($obj)) { $body = array_merge($body, $obj); } else { } // extensions $ext_key = 'notifications_email' . '/' . $key; $more_content = $extensions->run($ext_key, $obj, $user); if ($more_content) { $body[] = ''; } /* foreach( $more_content as $subtab => $subtext ){ if( $subtext ){ if( is_array($subtext) ){ foreach( $subtext as $subtext2 ){ if( is_array($subtext2) ){ $body = array_merge( $body, $subtext2 ); } else { $body[] = $subtext2; } } } else { $body[] = $subtext; } } } */ } $body[] = ''; } $msg->body = $body; /* transport email */ $CI =& ci_get_instance(); $subj = $msg->subject; $body = join("\n", $msg->body); $CI->hc_email->setSubject($subj); $CI->hc_email->setBody($body); $CI->hc_email->sendToOne($user->email); }
function index($id) { $extensions = HC_App::extensions(); $args = func_get_args(); $id = array_shift($args); $model = HC_App::model('shift'); $model->where('id', $id)->get(); $this->_check_model($model); $acl = HC_App::acl(); if (!$acl->set_object($model)->can('edit')) { return; } $original_model = clone $model; /* supplied as parameters */ $values = hc_parse_args($args); /* if post supplied */ $form = $this->form_edit; $post = $this->input->post(); if ($post) { $form->grab($post); $form_values = $form->values(); $values = array_merge($values, $form_values); } $relname = 'user'; $unassign = FALSE; if ($values[$relname] === '0' or $values[$relname] === 0 or $values[$relname] == '' or $values[$relname] === NULL) { // delete user relation unset($values[$relname]); if ($model->user_id) { $unassign = TRUE; } } if (!$values) { return $this->_zoom($model, 'time'); } if ($values['location'] === NULL) { unset($values['location']); } $related = $model->from_array($values); $action_result1 = $model->save($related); $action_result2 = TRUE; if ($unassign) { $rel = $model->{$relname}->get(); $action_result2 = $model->delete($rel, $relname); } if ($action_result1 && $action_result2) { /* extensions */ $extensions->run('shifts/update', $post, $model); /* save and redirect here */ if ($id) { $msg = sprintf(HCM::_n('%d shift updated', '%d shifts updated', 1), 1); } else { $msg = sprintf(HCM::_n('%d shift added', '%d shifts added', 1), 1); } $this->session->set_flashdata('message', $msg); $redirect_to = 'shifts/zoom/index/id/' . $id; // $redirect_to = '-referrer-'; /* what to refresh on referring page */ $parent_refresh = $model->present_calendar_refresh(); $parent_refresh = array_keys($parent_refresh); $this->redirect($redirect_to, $parent_refresh); } else { /* final layout */ $this->layout->set_partial('content', Modules::run('shifts/zoom/index', 'id', $model)); $this->layout(); } }