function edit() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('event'); $event = ProjectEvents::findById(get_id()); $user_filter = isset($_GET['user_id']) ? $_GET['user_id'] : logged_user()->getId(); $inv = EventInvitations::findById(array('event_id' => $event->getId(), 'contact_id' => $user_filter)); if ($inv != null) { $event->addInvitation($inv); } if (!$event->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $event_data = array_var($_POST, 'event'); if (!is_array($event_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } $setlastweek = false; $rsel1 = false; $rsel2 = false; $rsel3 = false; $forever = $event->getRepeatForever(); $occ = 1; if ($event->getRepeatD() > 0) { $occ = 2; $rjump = $event->getRepeatD(); } if ($event->getRepeatD() > 0 and $event->getRepeatD() % 7 == 0) { $occ = 3; $rjump = $event->getRepeatD() / 7; } if ($event->getRepeatM() > 0) { $occ = 4; $rjump = $event->getRepeatM(); } if ($event->getRepeatY() > 0) { $occ = 5; $rjump = $event->getRepeatY(); } if ($event->getRepeatH() > 0) { $occ = 6; } if ($event->getRepeatH() == 2) { $setlastweek = true; } if ($event->getRepeatEnd()) { $rend = $event->getRepeatEnd(); } if ($event->getRepeatNum() > 0) { $rnum = $event->getRepeatNum(); } if (!isset($rjump) || !is_numeric($rjump)) { $rjump = 1; } // decide which repeat type it is if ($forever) { $rsel1 = true; // forever } else { if (isset($rnum) and $rnum > 0) { $rsel2 = true; // repeat n-times } else { if (isset($rend) and $rend instanceof DateTimeValue) { $rsel3 = true; // repeat until } } } // if(isset($rend) AND $rend=="9999-00-00") $rend = ""; // organize the time and date data for the html select drop downs. $thetime = $event->getStart()->getTimestamp() + logged_user()->getTimezone() * 3600; $durtime = $event->getDuration()->getTimestamp() + logged_user()->getTimezone() * 3600 - $thetime; $hour = date('G', $thetime); // format time to 24-hour or 12-hour clock. if (!user_config_option('time_format_use_24')) { if ($hour >= 12) { $pm = 1; $hour = $hour - 12; } else { $pm = 0; } } $event_data = array('description' => $event->getDescription(), 'name' => $event->getObjectName(), 'username' => $event->getCreatedByDisplayName(), 'typeofevent' => $event->getTypeId(), 'forever' => $event->getRepeatForever(), 'usetimeandduration' => $event->getTypeId() == 3 ? 0 : 1, 'occ' => $occ, 'rjump' => $rjump, 'setlastweek' => $setlastweek, 'rend' => isset($rend) ? $rend : NULL, 'rnum' => isset($rnum) ? $rnum : NULL, 'rsel1' => $rsel1, 'rsel2' => $rsel2, 'rsel3' => $rsel3, 'thetime' => $event->getStart()->getTimestamp(), 'hour' => $hour, 'minute' => date('i', $thetime), 'month' => date('n', $thetime), 'year' => date('Y', $thetime), 'day' => date('j', $thetime), 'durtime' => $event->getDuration()->getTimestamp() - $thetime, 'durationmin' => $durtime / 60 % 60, 'durationhour' => $durtime / 3600 % 24, 'durday' => floor($durtime / 86400), 'pm' => isset($pm) ? $pm : 0, 'repeat_dow' => $event->getRepeatDow(), 'repeat_wnum' => $event->getRepeatWnum(), 'repeat_mjump' => $event->getRepeatMjump()); // array } // if // I find all those related to the task to find out if the original $event_related = ProjectEvents::findByRelated($event->getObjectId()); if (!$event_related) { // is not the original as the original look plus other related if ($event->getOriginalEventId() != "0") { $event_related = ProjectEvents::findByEventAndRelated($event->getObjectId(), $event->getOriginalEventId()); } } if ($event_related) { tpl_assign('event_related', true); } else { tpl_assign('event_related', false); } tpl_assign('event_data', $event_data); tpl_assign('event', $event); if (is_array(array_var($_POST, 'event'))) { // MANAGE CONCURRENCE WHILE EDITING /* * FIXME or REMOVEME $upd = array_var($_POST, 'updatedon'); if ($upd && $event->getUpdatedOn()->getTimestamp() > $upd && !array_var($_POST,'merge-changes') == 'true') { ajx_current('empty'); evt_add("handle edit concurrence", array( "updatedon" => $event->getUpdatedOn()->getTimestamp(), "genid" => array_var($_POST,'genid') )); return; } if (array_var($_POST,'merge-changes') == 'true') { $this->setTemplate('view_event'); $editedEvent = ProjectEvents::findById($event->getId()); $this->view(); ajx_set_panel(lang ('tab name',array('name'=>$editedEvent->getTitle()))); ajx_extra_data(array("title" => $editedEvent->getTitle(), 'icon'=>'ico-event')); ajx_set_no_toolbar(true); ajx_set_panel(lang ('tab name',array('name'=>$editedEvent->getTitle()))); return; } */ try { $data = $this->getData($event_data); // run the query to set the event data $event->setFromAttributes($data); $this->registerInvitations($data, $event, false); if (isset($data['confirmAttendance'])) { $this->change_invitation_state($data['confirmAttendance'], $event->getId(), $user_filter); } DB::beginWork(); $event->save(); $member_ids = json_decode(array_var($_POST, 'members')); $object_controller = new ObjectController(); $object_controller->add_to_members($event, $member_ids); $object_controller->add_subscribers($event); $object_controller->link_to_new_object($event); $object_controller->add_custom_properties($event); $old_reminders = ObjectReminders::getByObject($event); if ($old_reminders != null) { $object_controller->add_reminders($event); // adding the new reminders, if any $object_controller->update_reminders($event, $old_reminders); // updating the old ones } else { if (user_config_option("add_event_autoreminder")) { $reminder = new ObjectReminder(); $def = explode(",", user_config_option("reminders_events")); $minutes = $def[2] * $def[1]; $reminder->setMinutesBefore($minutes); $reminder->setType($def[0]); $reminder->setContext("start"); $reminder->setObject($event); $reminder->setUserId(0); $date = $event->getStart(); if ($date instanceof DateTimeValue) { $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60); $reminder->setDate($rdate); } $reminder->save(); } } $event->resetIsRead(); DB::commit(); if ($event->getSpecialID() != "") { $externalCalendarController = new ExternalCalendarController(); $externalCalendarController->sync_event_on_extern_calendar($event); } $is_silent = false; if (isset($data['send_notification']) && $data['send_notification']) { $users_to_inv = array(); foreach ($data['users_to_invite'] as $us => $v) { if ($us != logged_user()->getId()) { $users_to_inv[] = Contacts::findById(array('id' => $us)); } } Notifier::notifEvent($event, $users_to_inv, 'modified', logged_user()); $is_silent = true; } ApplicationLogs::createLog($event, ApplicationLogs::ACTION_EDIT, false, $is_silent); $opt_rep_day = array(); if (array_var($event_data, 'repeat_saturdays')) { $opt_rep_day['saturday'] = true; } else { $opt_rep_day['saturday'] = false; } if (array_var($event_data, 'repeat_sundays')) { $opt_rep_day['sunday'] = true; } else { $opt_rep_day['sunday'] = false; } // $this->repetitive_event($event, $opt_rep_day); if ($_POST['type_related'] == "all" || $_POST['type_related'] == "news") { $data['members'] = json_decode(array_var($_POST, 'members')); $this->repetitive_event_related($event, "edit", $_POST['type_related'], $data); } flash_success(lang('success edit event', clean($event->getObjectName()))); if (array_var($_POST, 'popup', false)) { ajx_current("reload"); } else { ajx_current("back"); } ajx_add("overview-panel", "reload"); if (array_var($_REQUEST, 'modal')) { evt_add("reload current panel"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
function move() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_current("empty"); $id = get_id(); $to = array_var($_GET, 'to', 0); // TODO: check permissions $ws = Projects::findById($id); $parent = Projects::findById($to); if (isset($ws)) { if ($to == 0 || isset($parent)) { $ws->setParentId($to); $ws->save(); evt_add('workspace_edited', array("is" => $ws->getId(), "name" => $ws->getId(), "color" => $ws->getId(), "parent" => $ws->getParentId())); } } }
function quick_config_filter_activity(){ $this->setLayout('empty'); $submited_values = array_var($_POST, 'filter'); $members = array_var($_GET, 'members'); tpl_assign('members', array_var($_GET, 'members')); $member_name = lang('view'); $obj_member = Members::findById($members); if($obj_member){ $type_obj = ObjectTypes::findById($obj_member->getObjectTypeId()); if($obj_member){ $member_name = lang($type_obj->getName()); } } tpl_assign('dim_name', $member_name); $filters_default = ContactConfigOptions::getFilterActivity(); $filters = ContactConfigOptionValues::getFilterActivityMember($filters_default->getId(),$members); if(!$filters){ $filters = ContactConfigOptions::getFilterActivity(); $filter_value = $filters->getDefaultValue(); tpl_assign('id', $filters->getId()); }else{ $filter_value = $filters->getValue(); tpl_assign('id', ''); } $filters_def = explode(",",$filter_value); // if($filters_def[0] == 1){ // tpl_assign('checked_dimension_yes', 'checked="checked"'); // }else{ // tpl_assign('checked_dimension_no', 'checked="checked"'); // } if($filters_def[1] == 1){ tpl_assign('timeslot', 'checked="checked"'); }else{ tpl_assign('timeslot', ''); } tpl_assign('show', $filters_def[2]); // if($filters_def[3] == 1){ // tpl_assign('checked_view_downloads_yes', 'checked="checked"'); // }else{ // tpl_assign('checked_view_downloads_no', 'checked="checked"'); // } if(is_array($submited_values)) { $members = array_var($submited_values,"members"); $new_value = array_var($submited_values,"dimension",0) . "," . array_var($submited_values,"timeslot",0) . "," . array_var($submited_values,"show",10). "," . array_var($submited_values,"view_downloads",0); $filters_default = ContactConfigOptions::getFilterActivity(); if(array_var($submited_values,"apply_everywhere") == 1){ $filters_default->setDefaultValue($new_value); $filters_default->save(); $filters = ContactConfigOptionValues::getFilterActivityDelete($filters_default->getId()); }else{ $filters = ContactConfigOptionValues::getFilterActivityMember($filters_default->getId(),$members); // update cache if available if (GlobalCache::isAvailable()) { GlobalCache::delete('user_config_option_'.logged_user()->getId().'_'.$filters_default->getName()."_".$members); } if(!$filters){ $filter_opt = new ContactConfigOptionValue(); $filter_opt->setOptionId($filters_default->getId()); $filter_opt->setContactId(logged_user()->getId()); $filter_opt->setValue($new_value); $filter_opt->setMemberId($members); $filter_opt->save(); }else{ $filters->setValue($new_value); $filters->save(); } evt_add("user preference changed", array('name' => $filters_default->getName()."_".$members, 'value' => $new_value)); } ajx_current("reload"); } }
function dimension_options_submit() { ajx_current("empty"); if (!can_manage_dimensions(logged_user())) { flash_error(lang('no access permissions')); return; } $folder_ots = ObjectTypes::findAll(array('id' => true, 'conditions' => "name IN ('folder','project_folder','customer_folder')")); $data = array_var($_POST, 'enabled_dots'); $names_data = array_var($_POST, 'custom_names'); if (is_array($data) || is_array($names_data)) { try { DB::beginWork(); // enabled dimension object types foreach ($data as $dim_id => $ots_info) { foreach ($ots_info as $ot_id => $enabled) { DB::execute("UPDATE " . TABLE_PREFIX . "dimension_object_types SET enabled=" . DB::escape($enabled) . " \r\n\t\t\t\t\t\t\tWHERE dimension_id=" . DB::escape($dim_id) . " AND object_type_id=" . DB::escape($ot_id)); // if object type is folder, set the same configuration to all folder types if (in_array($ot_id, $folder_ots)) { DB::execute("UPDATE " . TABLE_PREFIX . "dimension_object_types SET enabled=" . DB::escape($enabled) . "\r\n\t\t\t\t\t\t\t\tWHERE dimension_id=" . DB::escape($dim_id) . " AND object_type_id IN (" . implode(',', $folder_ots) . ")"); } } } // custom dimension names foreach ($names_data as $dim_id => $custom_name) { $cname = trim($custom_name); $dimension = Dimensions::getDimensionById($dim_id); if ($dimension instanceof Dimension) { $dimension->setOptionValue('custom_dimension_name', $cname); } } DB::commit(); flash_success(lang("success edit dimension options")); evt_add('tabs changed'); //ajx_current("back"); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } } }
function core_dim_add_new_contact_to_person_dimension($object) { /* @var $object Contact */ $person_ot = ObjectTypes::findOne(array("conditions" => "`name` = 'person'")); $company_ot = ObjectTypes::findOne(array("conditions" => "`name` = 'company'")); $person_dim = Dimensions::findOne(array("conditions" => "`code` = 'feng_persons'")); if ($person_ot instanceof ObjectType && $person_dim instanceof Dimension) { $oid = $object->isCompany() ? $company_ot->getId() : $person_ot->getId(); $tmp_mem = Members::findOne(array("conditions" => "`dimension_id` = " . $person_dim->getId() . " AND `object_type_id` = {$oid} AND `object_id` = " . $object->getId())); $reload_dimension = true; if ($tmp_mem instanceof Member) { $member = $tmp_mem; $reload_dimension = false; } else { $member = new Member(); $member->setName($object->getObjectName()); $member->setDimensionId($person_dim->getId()); $parent_member_id = 0; $depth = 1; if ($object->isCompany()) { $member->setObjectTypeId($company_ot->getId()); } else { $member->setObjectTypeId($person_ot->getId()); if ($object->getCompanyId() > 0) { $pmember = Members::findOne(array('conditions' => '`object_id` = ' . $object->getCompanyId() . ' AND `object_type_id` = ' . $company_ot->getId() . ' AND `dimension_id` = ' . $person_dim->getId())); if ($pmember instanceof Member) { $parent_member_id = $pmember->getId(); $depth = $pmember->getDepth() + 1; } } } $member->setParentMemberId($parent_member_id); $member->setDepth($depth); $member->setObjectId($object->getId()); $member->save(); } $sql = "INSERT INTO `" . TABLE_PREFIX . "contact_dimension_permissions` (`permission_group_id`, `dimension_id`, `permission_type`)\n\t\t\t\t SELECT `c`.`permission_group_id`, " . $person_dim->getId() . ", 'check'\n\t\t\t\t FROM `" . TABLE_PREFIX . "contacts` `c` \n\t\t\t\t WHERE `c`.`is_company`=0 AND `c`.`user_type`!=0 AND `c`.`disabled`=0 AND `c`.`object_id`=" . $object->getId() . "\n\t\t\t\t ON DUPLICATE KEY UPDATE `dimension_id`=`dimension_id`;"; DB::execute($sql); $sql = "INSERT INTO `" . TABLE_PREFIX . "contact_member_permissions` (`permission_group_id`, `member_id`, `object_type_id`, `can_write`, `can_delete`)\n\t\t\t\t SELECT `c`.`permission_group_id`, " . $member->getId() . ", `ot`.`id`, (`c`.`object_id` = " . $object->getId() . ") as `can_write`, (`c`.`object_id` = " . $object->getId() . ") as `can_delete`\n\t\t\t\t FROM `" . TABLE_PREFIX . "contacts` `c` JOIN `" . TABLE_PREFIX . "object_types` `ot` \n\t\t\t\t WHERE `c`.`is_company`=0 AND `c`.`object_id`=" . $object->getId() . "\n\t\t\t\t \tAND `c`.`user_type`!=0 AND `c`.`disabled`=0\n\t\t\t\t\tAND `ot`.`type` IN ('content_object', 'comment')\n\t\t\t\t ON DUPLICATE KEY UPDATE `member_id`=`member_id`;"; DB::execute($sql); DB::execute("DELETE FROM `" . TABLE_PREFIX . "contact_member_permissions` WHERE `permission_group_id` = 0;"); // NEW! Add contact to its own member to be searchable if (logged_user() instanceof Contact) { $ctrl = new ObjectController(); $ctrl->add_to_members($object, array($member->getId())); } else { $object->addToMembers(array($member)); $object->addToSharingTable(); } // add permission to creator if ($object->getCreatedBy() instanceof Contact) { DB::execute("INSERT INTO `" . TABLE_PREFIX . "contact_member_permissions` (`permission_group_id`, `member_id`, `object_type_id`, `can_write`, `can_delete`)\n\t\t\t\t SELECT " . $object->getCreatedBy()->getPermissionGroupId() . ", " . $member->getId() . ", `ot`.`id`, 1, 1\n\t\t\t\t FROM `" . TABLE_PREFIX . "object_types` `ot` \n\t\t\t\t WHERE `ot`.`type` IN ('content_object', 'comment')\n\t\t\t\t ON DUPLICATE KEY UPDATE `member_id`=`member_id`;"); } if ($reload_dimension) { evt_add("reload dimension tree", $member->getDimensionId()); } } }
function save_presentation() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_current("empty"); $postFile = array_var($_POST, 'file'); $fileid = array_var($postFile, 'id'); if($fileid > 0) { //edit presentation try { $file = ProjectFiles::findById($fileid); if (!$file->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if DB::beginWork(); $post_revision = array_var($_POST, 'new_revision_document') == 'checked'; // change file? $revision_comment = ''; $file_dt['name'] = $file->getFilename(); $file_content = unescapeSLIM(array_var($_POST, 'slimContent')); $file_dt['size'] = strlen($file_content); $file_dt['type'] = 'prsn'; $file_dt['tmp_name'] = ROOT . '/tmp/' . rand() ; $handler = fopen($file_dt['tmp_name'], 'w'); fputs($handler,$file_content); fclose($handler); $file->setFilename(array_var($postFile, 'name')); $file->save(); $file->handleUploadedFile($file_dt, $post_revision, $revision_comment); if (array_var($_POST, 'checkin', false)) { $file->checkIn(); ajx_current("back"); } ApplicationLogs::createLog($file, ApplicationLogs::ACTION_EDIT); DB::commit(); unlink($file_dt['tmp_name']); flash_success(lang('success save file', $file->getFilename())); evt_add("presentation saved", array("id" => $file->getId())); ajx_add("overview-panel", "reload"); } catch(Exception $e) { DB::rollback(); unlink($file_dt['tmp_name']); flash_error(lang('error while saving')); } // try } else { // new presentation $notAllowedMember = ''; if (!ProjectFile::canAdd(logged_user(), active_context(), $notAllowedMember)) { if (str_starts_with($notAllowedMember, '-- req dim --')) flash_error(lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in))); else flash_error(lang('no context permissions to add',lang("presentations"),$notAllowedMember)); $this->redirectToReferer(get_url('files')); return ; } // if // prepare the file object $file = new ProjectFile(); $file->setFilename(array_var($postFile, 'name')); $file->setIsVisible(true); //seteo esto para despues setear atributos $file_content = unescapeSLIM(array_var($_POST, 'slimContent')); $file_dt['name'] = array_var($postFile, 'name'); $file_dt['size'] = strlen($file_content); $file_dt['type'] = 'prsn'; $file->setCreatedOn(new DateTimeValue(time()) ); try { DB::beginWork(); $file_dt['tmp_name'] = ROOT . '/tmp/' . rand (); $handler = fopen($file_dt['tmp_name'], 'w'); fputs($handler, unescapeSLIM(array_var($_POST, 'slimContent'))); fclose($handler); $file->save(); $file->subscribeUser(logged_user()); $revision = $file->handleUploadedFile($file_dt, true); if (config_option('checkout_for_editing_online')) { $file->checkOut(true, logged_user()); } ApplicationLogs::createLog($file, ApplicationLogs::ACTION_ADD); $object_controller = new ObjectController(); // file is added to current context members $member_ids = array(); $selection = active_context(); foreach ($selection as $member) { if ($member instanceof Member) $member_ids[] = $member->getId(); } $object_controller->add_to_members($file, $member_ids); DB::commit(); flash_success(lang('success save file', $file->getFilename())); evt_add("presentation saved", array("id" => $file->getId())); unlink($file_dt['tmp_name']); } catch(Exception $e) { DB::rollback(); tpl_assign('file', new ProjectFile()); // reset file unlink($file_dt['tmp_name']); // if we uploaded the file remove it from repository if (isset($revision) && ($revision instanceof ProjectFileRevision) && FileRepository::isInRepository($revision->getRepositoryId())) { FileRepository::deleteFile($revision->getRepositoryId()); } flash_error(lang('error while saving').": ".$e->getMessage()); } // try } }
/** * Edit specific message * * @access public * @param void * @return null */ function edit() { $this->setTemplate('add_message'); if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current('empty'); return; } $message = ProjectMessages::findById(get_id()); if (!$message instanceof ProjectMessage) { flash_error(lang('message dnx')); ajx_current("empty"); return; } // if if (!$message->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $message_data = array_var($_POST, 'message'); if (!is_array($message_data)) { $message_data = array('name' => $message->getObjectName(), 'text' => $message->getText(), 'type_content' => $message->getTypeContent()); // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } } // if tpl_assign('message', $message); tpl_assign('message_data', $message_data); if (is_array(array_var($_POST, 'message'))) { foreach ($message_data as $k => &$v) { $v = remove_scripts($v); } try { //MANAGE CONCURRENCE WHILE EDITING /* FIXME or REMOVEME $upd = array_var($_POST, 'updatedon'); if ($upd && $message->getUpdatedOn()->getTimestamp() > $upd && !array_var($_POST,'merge-changes') == 'true') { ajx_current('empty'); evt_add("handle edit concurrence", array( "updatedon" => $message->getUpdatedOn()->getTimestamp(), "genid" => array_var($_POST,'genid') )); return; } if (array_var($_POST,'merge-changes') == 'true') { $this->setTemplate('view'); $edited_note = ProjectMessages::findById($message->getId()); tpl_assign('message', $edited_note); tpl_assign('subscribers', $edited_note->getSubscribers()); ajx_extra_data(array("name" => $edited_note->getObjectName(), 'icon'=>'ico-message')); ajx_set_no_toolbar(true); ajx_set_panel(lang ('tab name',array('name'=>$edited_note->getObjectName()))); return; } */ if (config_option("wysiwyg_messages")) { $message_data['type_content'] = "html"; $message_data['text'] = preg_replace("/[\n|\r|\n\r]/", '', array_var($message_data, 'text')); } else { $message_data['type_content'] = "text"; } $message->setFromAttributes($message_data); DB::beginWork(); $message->save(); $object_controller = new ObjectController(); $member_ids = json_decode(array_var($_POST, 'members')); $object_controller->add_to_members($message, $member_ids); $object_controller->link_to_new_object($message); $object_controller->add_subscribers($message); $object_controller->add_custom_properties($message); $message->resetIsRead(); DB::commit(); ApplicationLogs::createLog($message, ApplicationLogs::ACTION_EDIT); flash_success(lang('success edit message', $message->getObjectName())); if (array_var($_POST, 'popup', false)) { ajx_current("reload"); } else { ajx_current("back"); } if (array_var($_REQUEST, 'modal')) { evt_add("reload current panel"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
function complete() { if (!$this->canChangeStatus(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if try { $this->setCompletedOn(DateTimeValueLib::now()); $this->setCompletedById(logged_user()->getId()); DB::beginWork(); $this->save(); ApplicationLogs::createLog($this, null, ApplicationLogs::ACTION_ARCHIVE); DB::commit(); flash_success(lang('success archive objects', 1)); evt_add("workspace deleted", array("id" => $this->getId(), "name" => $this->getName())); ajx_current("reload"); } catch (Exception $e) { DB::rollback(); flash_error(lang('error archive objects')); ajx_current("empty"); } // try }
function configure_widgets_submit() { ajx_current("empty"); $widgets_data = array_var($_POST, 'widgets'); try { DB::beginWork(); foreach ($widgets_data as $name => $data) { $contact_widget = ContactWidgets::instance()->findOne(array('conditions' => array('contact_id = ? AND widget_name = ?', logged_user()->getId(), $name))); if (!$contact_widget instanceof ContactWidget) { $contact_widget = new ContactWidget(); $contact_widget->setContactId(logged_user()->getId()); $contact_widget->setWidgetName($name); } $contact_widget->setOrder($data['order']); $contact_widget->setSection($data['section']); $contact_widget->save(); if (isset($data['options']) && is_array($data['options'])) { foreach ($data['options'] as $opt_name => $opt_val) { $contact_widget_option = ContactWidgetOptions::instance()->findOne(array('conditions' => array('contact_id=? AND widget_name=? AND `option`=?', logged_user()->getId(), $name, $opt_name))); if (!$contact_widget_option instanceof ContactWidgetOption) { $contact_widget_option = new ContactWidgetOption(); $contact_widget_option->setContactId(logged_user()->getId()); $contact_widget_option->setWidgetName($name); $contact_widget_option->setMemberTypeId(0); $contact_widget_option->setOption($opt_name); } $contact_widget_option->setValue($opt_val); $contact_widget_option->save(); } } } DB::commit(); evt_add('reload tab panel', 'overview-panel'); ajx_current("back"); } catch (Exception $e) { flash_error($e->getMessage()); DB::rollback(); } }
function alert($text) { evt_add("popup", array('title' => "Debug", 'message' => $text)); }
function edit() { $this->setTemplate('add'); $billingCategory = BillingCategories::findById(get_id()); if (!$billingCategory instanceof BillingCategory) { flash_error(lang('billing category dnx')); ajx_current("empty"); return; } // if if (!can_manage_billing(logged_user())) { flash_error(lang("no access permissions")); ajx_current("empty"); return; } $billing_data = array_var($_POST, 'billing'); if (!is_array($billing_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } $billing_data = array('name' => $billingCategory->getName(), 'description' => $billingCategory->getDescription(), 'default_value' => $billingCategory->getDefaultValue(), 'report_name' => $billingCategory->getReportName()); } else { $billingCategory->setFromAttributes($billing_data); try { DB::beginWork(); $billingCategory->save(); DB::commit(); flash_success(lang("success edit billing category")); if (array_var($_REQUEST, 'modal')) { evt_add("reload current panel"); } else { ajx_current("back"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } } tpl_assign('billing', $billingCategory); tpl_assign('billing_data', $billing_data); }
function edit() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('event'); $event = ProjectEvents::findById(get_id()); $user_filter = isset($_GET['user_id']) ? $_GET['user_id'] : logged_user()->getId(); $inv = EventInvitations::findById(array('event_id' => $event->getId(), 'user_id' => $user_filter)); if ($inv != null) { $event->addInvitation($inv); } if (!$event->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } tpl_assign('active_projects', logged_user()->getActiveProjects()); $event_data = array_var($_POST, 'event'); if (!is_array($event_data)) { $tag_names = $event->getTagNames(); $setlastweek = false; $rsel1 = false; $rsel2 = false; $rsel3 = false; $forever = $event->getRepeatForever(); $occ = 1; if ($event->getRepeatD() > 0) { $occ = 2; $rjump = $event->getRepeatD(); } if ($event->getRepeatD() > 0 and $event->getRepeatD() % 7 == 0) { $occ = 3; $rjump = $event->getRepeatD() / 7; } if ($event->getRepeatM() > 0) { $occ = 4; $rjump = $event->getRepeatM(); } if ($event->getRepeatY() > 0) { $occ = 5; $rjump = $event->getRepeatY(); } if ($event->getRepeatH() > 0) { $occ = 6; } if ($event->getRepeatH() == 2) { $setlastweek = true; } if ($event->getRepeatEnd()) { $rend = $event->getRepeatEnd(); } if ($event->getRepeatNum() > 0) { $rnum = $event->getRepeatNum(); } if (!isset($rjump) || !is_numeric($rjump)) { $rjump = 1; } // decide which repeat type it is if ($forever) { $rsel1 = true; } else { if (isset($rnum) and $rnum > 0) { $rsel2 = true; } else { if (isset($rend) and $rend instanceof DateTimeValue) { $rsel3 = true; } } } //repeat until //if(isset($rend) AND $rend=="9999-00-00") $rend = ""; // organize the time and date data for the html select drop downs. $thetime = $event->getStart()->getTimestamp() + logged_user()->getTimezone() * 3600; $durtime = $event->getDuration()->getTimestamp() + logged_user()->getTimezone() * 3600 - $thetime; $hour = date('G', $thetime); // format time to 24-hour or 12-hour clock. if (!user_config_option('time_format_use_24')) { if ($hour >= 12) { $pm = 1; $hour = $hour - 12; } else { $pm = 0; } } $event_data = array('subject' => $event->getSubject(), 'description' => $event->getDescription(), 'name' => $event->getCreatedById(), 'username' => $event->getCreatedById(), 'typeofevent' => $event->getTypeId(), 'forever' => $event->getRepeatForever(), 'usetimeandduration' => $event->getTypeId() == 3 ? 0 : 1, 'occ' => $occ, 'rjump' => $rjump, 'setlastweek' => $setlastweek, 'rend' => isset($rend) ? $rend : NULL, 'rnum' => isset($rnum) ? $rnum : NULL, 'rsel1' => $rsel1, 'rsel2' => $rsel2, 'rsel3' => $rsel3, 'thetime' => $event->getStart()->getTimestamp(), 'hour' => $hour, 'minute' => date('i', $thetime), 'month' => date('n', $thetime), 'year' => date('Y', $thetime), 'day' => date('j', $thetime), 'durtime' => $event->getDuration()->getTimestamp() - $thetime, 'durationmin' => $durtime / 60 % 60, 'durationhour' => $durtime / 3600 % 24, 'durday' => floor($durtime / 86400), 'pm' => isset($pm) ? $pm : 0, 'tags' => is_array($tag_names) ? implode(', ', $tag_names) : '', 'repeat_dow' => $event->getRepeatDow(), 'repeat_wnum' => $event->getRepeatWnum(), 'repeat_mjump' => $event->getRepeatMjump()); // array } // if tpl_assign('event_data', $event_data); tpl_assign('event', $event); if (is_array(array_var($_POST, 'event'))) { // MANAGE CONCURRENCE WHILE EDITING $upd = array_var($_POST, 'updatedon'); if ($upd && $event->getUpdatedOn()->getTimestamp() > $upd && !array_var($_POST, 'merge-changes') == 'true') { ajx_current('empty'); evt_add("handle edit concurrence", array("updatedon" => $event->getUpdatedOn()->getTimestamp(), "genid" => array_var($_POST, 'genid'))); return; } if (array_var($_POST, 'merge-changes') == 'true') { $this->setTemplate('view_event'); $editedEvent = ProjectEvents::findById($event->getId()); $this->viewevent(); ajx_set_panel(lang('tab name', array('name' => $editedEvent->getTitle()))); ajx_extra_data(array("title" => $editedEvent->getTitle(), 'icon' => 'ico-event')); ajx_set_no_toolbar(true); ajx_set_panel(lang('tab name', array('name' => $editedEvent->getTitle()))); return; } try { $data = $this->getData($event_data); // run the query to set the event data $event->setFromAttributes($data); $this->registerInvitations($data, $event, false); if (isset($data['confirmAttendance'])) { $this->change_invitation_state($data['confirmAttendance'], $event->getId(), $user_filter); } if (isset($data['send_notification']) && $data['send_notification']) { $users_to_inv = array(); foreach ($data['users_to_invite'] as $us => $v) { if ($us != logged_user()->getId()) { $users_to_inv[] = Users::findById(array('id' => $us)); } } Notifier::notifEvent($event, $users_to_inv, 'modified', logged_user()); } foreach ($data['users_to_invite'] as $user_id => $v) { $user = Users::findById(array('id' => $user_id)); if ($user instanceof User) { $phone_num = Users::getPhoneNumberCustomProperty($user_id); $sms_obj = new SmsController(); $sms_obj->prepareEventInvitee($user->getDisplayName(), $event->getTitle(), get_class($event)); $sms_obj->sendSms($phone_num); } } if (!logged_user()->isMemberOfOwnerCompany()) { $event->setIsPrivate(false); } DB::beginWork(); $event->save(); $event->setTagsFromCSV(array_var($event_data, 'tags')); $object_controller = new ObjectController(); $object_controller->add_to_workspaces($event); $object_controller->link_to_new_object($event); $object_controller->add_subscribers($event); $object_controller->add_custom_properties($event); $object_controller->add_reminders($event); $event->resetIsRead(); ApplicationLogs::createLog($event, $event->getWorkspaces(), ApplicationLogs::ACTION_EDIT); DB::commit(); flash_success(lang('success edit event', clean($event->getObjectName()))); if (array_var($_POST, 'popup', false)) { ajx_current("reload"); } else { ajx_current("back"); } ajx_add("overview-panel", "reload"); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); //tpl_assign('error', $e); } // try } // if }
/** * Add comment * * Through this controller only logged users can post (no anonymous comments here) * * @param void * @return null */ function add() { $this->setTemplate('add_comment'); $object_id = get_id('object_id'); $object = Objects::findObject($object_id); if (!$object instanceof ContentDataObject) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $comment = new Comment(); $comment_data = array_var($_POST, 'comment'); tpl_assign('comment_form_object', $object); tpl_assign('comment', $comment); tpl_assign('comment_data', $comment_data); if (is_array($comment_data)) { try { try { $attached_files = ProjectFiles::handleHelperUploads(active_context()); } catch (Exception $e) { $attached_files = null; } // try $comment->setFromAttributes($comment_data); $comment->setRelObjectId($object_id); $comment->setObjectName(substr_utf($comment->getText(), 0, 250)); DB::beginWork(); $comment->save(); $comment->addToMembers($object->getMembers()); $comment->addToSharingTable(); if (is_array($attached_files)) { foreach ($attached_files as $attached_file) { $comment->attachFile($attached_file); } // foreach } // if // Subscribe user to object if (!$object->isSubscriber(logged_user())) { $object->subscribeUser(logged_user()); } // if if (strlen($comment->getText()) < 100) { $comment_head = $comment->getText(); } else { $lastpos = strpos($comment->getText(), " ", 100); if ($lastpos === false) { $comment_head = $comment->getText(); } else { $comment_head = substr($comment->getText(), 0, $lastpos) . "..."; } } $comment_head = html_to_text($comment_head); DB::commit(); ApplicationLogs::createLog($comment, ApplicationLogs::ACTION_COMMENT, false, false, true, $comment_head); flash_success(lang('success add comment')); evt_add("scroll to comment", array('comment_id' => $comment->getId())); ajx_current("reload"); } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } // try } // if }
function mark_dao_validation_error_fields($e) { if ($e instanceof DAOValidationError) { $obj = $e->getObject(); if (is_array($obj->getFieldsWithErrorsAfterValidation())) { foreach ($obj->getFieldsWithErrorsAfterValidation() as $f) { evt_add('mark_error_field', array('field' => $f)); } } } }
/** * Delete specific mail account * * @access public * @param void * @return null */ function delete_account() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $account = MailAccounts::findById(get_id()); if (!$account instanceof MailAccount) { flash_error(lang('error delete mail account')); ajx_current("empty"); return; } if (!$account->canDelete(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $deleteMails = array_var($_GET, 'deleteMails', false); try { $accId = $account->getId(); $accName = $account->getName(); $accEmail = $account->getEmail(); DB::beginWork(); $account->delete($deleteMails); DB::commit(); evt_add("mail account deleted", array("id" => $accId, "name" => $accName, "email" => $accEmail)); flash_success(lang('success delete mail account')); if (array_var($_GET, 'reload', false)) { ajx_current("reload"); } else { ajx_current("back"); } } catch (Exception $e) { DB::rollback(); flash_error(lang('error delete mail account')); ajx_current("empty"); } }
/** * Edit specific message * * @access public * @param void * @return null */ function edit() { $this->setTemplate('add_message'); if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current('empty'); return; } $message = ProjectMessages::findById(get_id()); if (!$message instanceof ProjectMessage) { flash_error(lang('message dnx')); ajx_current("empty"); return; } // if if (!$message->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $message_data = array_var($_POST, 'message'); if (!is_array($message_data)) { $tag_names = $message->getTagNames(); $message_data = array('milestone_id' => $message->getMilestoneId(), 'title' => $message->getTitle(), 'text' => $message->getText(), 'additional_text' => $message->getAdditionalText(), 'tags' => is_array($tag_names) ? implode(', ', $tag_names) : '', 'is_private' => $message->isPrivate(), 'is_important' => $message->getIsImportant(), 'comments_enabled' => $message->getCommentsEnabled(), 'anonymous_comments_enabled' => $message->getAnonymousCommentsEnabled()); // array } // if tpl_assign('message', $message); tpl_assign('message_data', $message_data); if (is_array(array_var($_POST, 'message'))) { try { //MANAGE CONCURRENCE WHILE EDITING $upd = array_var($_POST, 'updatedon'); if ($upd && $message->getUpdatedOn()->getTimestamp() > $upd && !array_var($_POST, 'merge-changes') == 'true') { ajx_current('empty'); evt_add("handle edit concurrence", array("updatedon" => $message->getUpdatedOn()->getTimestamp(), "genid" => array_var($_POST, 'genid'))); return; } if (array_var($_POST, 'merge-changes') == 'true') { $this->setTemplate('view'); $edited_note = ProjectMessages::findById($message->getId()); tpl_assign('message', $edited_note); tpl_assign('subscribers', $edited_note->getSubscribers()); ajx_extra_data(array("title" => $edited_note->getTitle(), 'icon' => 'ico-message')); ajx_set_no_toolbar(true); ajx_set_panel(lang('tab name', array('name' => $edited_note->getTitle()))); return; } $old_is_private = $message->isPrivate(); $old_is_important = $message->getIsImportant(); $old_comments_enabled = $message->getCommentsEnabled(); $old_anonymous_comments_enabled = $message->getAnonymousCommentsEnabled(); $message->setFromAttributes($message_data); // Options are reserved only for members of owner company if (!logged_user()->isMemberOfOwnerCompany()) { $message->setIsPrivate($old_is_private); $message->setIsImportant($old_is_important); $message->setCommentsEnabled($old_comments_enabled); $message->setAnonymousCommentsEnabled($old_anonymous_comments_enabled); } // if DB::beginWork(); $message->save(); $message->setTagsFromCSV(array_var($message_data, 'tags')); $object_controller = new ObjectController(); $object_controller->add_to_workspaces($message); $object_controller->link_to_new_object($message); $object_controller->add_subscribers($message); $object_controller->add_custom_properties($message); $message->resetIsRead(); ApplicationLogs::createLog($message, $message->getWorkspaces(), ApplicationLogs::ACTION_EDIT); DB::commit(); flash_success(lang('success edit message', $message->getTitle())); if (array_var($_POST, 'popup', false)) { ajx_current("reload"); } else { ajx_current("back"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
function save_presentation() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_current("empty"); $postFile = array_var($_POST, 'file'); $fileid = array_var($postFile, 'id'); if ($fileid > 0) { //edit presentation try { $file = ProjectFiles::findById($fileid); if (!$file->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if DB::beginWork(); $post_revision = array_var($_POST, 'new_revision_document') == 'checked'; // change file? $revision_comment = ''; $file_dt['name'] = $file->getFilename(); $file_content = unescapeSLIM(array_var($_POST, 'slimContent')); $file_dt['size'] = strlen($file_content); $file_dt['type'] = 'prsn'; $file_dt['tmp_name'] = ROOT . '/tmp/' . rand(); $handler = fopen($file_dt['tmp_name'], 'w'); fputs($handler, $file_content); fclose($handler); $file->setFilename(array_var($postFile, 'name')); $file->save(); $file->handleUploadedFile($file_dt, $post_revision, $revision_comment); if (array_var($_POST, 'checkin', false)) { $file->checkIn(); ajx_current("back"); } $ws = $file->getWorkspaces(); ApplicationLogs::createLog($file, $ws, ApplicationLogs::ACTION_EDIT); DB::commit(); unlink($file_dt['tmp_name']); flash_success(lang('success save file', $file->getFilename())); evt_add("presentation saved", array("id" => $file->getId())); //$this->redirectTo('files', 'add_presentation', array('id' => $file->getId())); ajx_add("overview-panel", "reload"); } catch (Exception $e) { DB::rollback(); unlink($file_dt['tmp_name']); flash_error(lang('error while saving')); //$this->redirectToUrl(get_url('files')); } // try } else { // new presentation if (!ProjectFile::canAdd(logged_user(), active_or_personal_project())) { flash_error(lang('no access permissions')); $this->redirectToReferer(get_url('files')); return; } // if // prepare the file object $file = new ProjectFile(); $file->setFilename(array_var($postFile, 'name')); $file->setIsVisible(true); $file->setIsPrivate(false); $file->setIsImportant(false); $file->setCommentsEnabled(true); $file->setAnonymousCommentsEnabled(false); //seteo esto para despues setear atributos $file_content = unescapeSLIM(array_var($_POST, 'slimContent')); $file_dt['name'] = array_var($postFile, 'name'); $file_dt['size'] = strlen($file_content); $file_dt['type'] = 'prsn'; $file->setCreatedOn(new DateTimeValue(time())); try { DB::beginWork(); $file_dt['tmp_name'] = ROOT . '/tmp/' . rand(); $handler = fopen($file_dt['tmp_name'], 'w'); fputs($handler, unescapeSLIM(array_var($_POST, 'slimContent'))); fclose($handler); $file->save(); $file->subscribeUser(logged_user()); $file->addToWorkspace(active_or_personal_project()); $revision = $file->handleUploadedFile($file_dt, true); if (config_option('checkout_for_editing_online')) { $file->checkOut(true, logged_user()); } $ws = $file->getWorkspaces(); ApplicationLogs::createLog($file, $ws, ApplicationLogs::ACTION_ADD); DB::commit(); flash_success(lang('success save file', $file->getFilename())); evt_add("presentation saved", array("id" => $file->getId())); unlink($file_dt['tmp_name']); //$this->redirectTo('files', 'add_presentation', array('id' => $file->getId())); } catch (Exception $e) { DB::rollback(); //tpl_assign('error', $e); tpl_assign('file', new ProjectFile()); // reset file unlink($file_dt['tmp_name']); // if we uploaded the file remove it from repository if (isset($revision) && $revision instanceof ProjectFileRevision && FileRepository::isInRepository($revision->getRepositoryId())) { FileRepository::deleteFile($revision->getRepositoryId()); } // if flash_error(lang('error while saving')); //$this->redirectToUrl(get_url('files')); } // try } }
/** * Edit task * * @access public * @param void * @return null */ function edit_task() { $isTemplateTask = false; if (array_var($_REQUEST, 'template_task') == true) { $isTemplateTask = true; } if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('add_task'); if (array_var($_REQUEST, "template_task")) { $task = TemplateTasks::findById(array_var($_REQUEST, "template_task_id", get_id())); $this->setTemplate(get_template_path('add_template_task', 'template_task')); if (array_var($_REQUEST, 'template_id')) { $template_id = array_var($_REQUEST, 'template_id'); } else { $template_id = $task->getTemplateId(); } tpl_assign('additional_tt_params', array_var($_REQUEST, 'additional_tt_params')); tpl_assign('template_id', $template_id); if (!$task instanceof TemplateTask) { flash_error(lang('task list dnx')); ajx_current("empty"); return; } // if } else { $task = ProjectTasks::findById(get_id()); if (!$task instanceof ProjectTask) { flash_error(lang('task list dnx')); ajx_current("empty"); return; } // if if (!$task->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if } if (array_var($_GET, 'replace')) { ajx_replace(true); } $task_data = array_var($_POST, 'task'); $time_estimate = array_var($_POST, 'hours', 0) * 60 + array_var($_POST, 'minutes', 0); if ($time_estimate > 0) { $estimatedTime = $time_estimate; } else { $estimatedTime = $task->getTimeEstimate(); } if (!is_array($task_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } $this->getRepeatOptions($task, $occ, $rsel1, $rsel2, $rsel3, $rnum, $rend, $rjump); $dd = $task->getDueDate() instanceof DateTimeValue ? $task->getDueDate() : null; if ($dd instanceof DateTimeValue && $task->getUseDueTime()) { $dd->advance(logged_user()->getTimezone() * 3600); } $sd = $task->getStartDate() instanceof DateTimeValue ? $task->getStartDate() : null; if ($sd instanceof DateTimeValue && $task->getUseStartTime()) { $sd->advance(logged_user()->getTimezone() * 3600); } $post_dd = null; if (array_var($_POST, 'task_due_date')) { $post_dd = getDateValue(array_var($_POST, 'task_due_date')); if ($post_dd instanceof DateTimeValue) { $duetime = getTimeValue(array_var($_POST, 'task_due_time')); if (is_array($duetime)) { $post_dd->setHour(array_var($duetime, 'hours')); $post_dd->setMinute(array_var($duetime, 'mins')); $post_dd->advance(logged_user()->getTimezone() * 3600); } } } $post_st = null; if (array_var($_POST, 'task_start_date')) { $post_st = getDateValue(array_var($_POST, 'task_start_date')); if ($post_st instanceof DateTimeValue) { $starttime = getTimeValue(array_var($_POST, 'task_start_time')); if (is_array($starttime)) { $post_st->setHour(array_var($starttime, 'hours')); $post_st->setMinute(array_var($starttime, 'mins')); $post_st->advance(logged_user()->getTimezone() * 3600); } } } if (config_option("wysiwyg_tasks")) { $text_post = preg_replace("/[\n|\r|\n\r]/", '', array_var($_POST, 'text', $task->getText())); } else { $text_post = array_var($_POST, 'text', $task->getText()); } $task_data = array('name' => array_var($_POST, 'name', $task->getObjectName()), 'text' => $text_post, 'milestone_id' => array_var($_POST, 'milestone_id', $task->getMilestoneId()), 'due_date' => getDateValue($post_dd, $dd), 'start_date' => getDateValue($post_st, $sd), 'parent_id' => $task->getParentId(), 'assigned_to_contact_id' => array_var($_POST, 'assigned_to_contact_id', $task->getAssignedToContactId()), 'selected_members_ids' => json_decode(array_var($_POST, 'members', null)), 'priority' => array_var($_POST, 'priority', $task->getPriority()), 'time_estimate' => $estimatedTime, 'percent_completed' => $task->getPercentCompleted(), 'forever' => $task->getRepeatForever(), 'rend' => $rend, 'rnum' => $rnum, 'rjump' => $rjump, 'rsel1' => $rsel1, 'rsel2' => $rsel2, 'rsel3' => $rsel3, 'occ' => $occ, 'repeat_by' => $task->getRepeatBy(), 'object_subtype' => array_var($_POST, "object_subtype", $task->getObjectSubtype() != 0 ? $task->getObjectSubtype() : config_option('default task co type')), 'type_content' => $task->getTypeContent(), 'multi_assignment' => $task->getColumnValue('multi_assignment', 0), 'send_notification_subscribers' => user_config_option("can notify subscribers")); // array //control dates of parent and subtasks $task_data['type_control'] = ""; $parent_data = $task->getParent(); if ($parent_data) { $task_data['type_control'] = "child"; $task_data['control_title'] = $parent_data->getObjectName(); $task_data['control_due_date'] = $parent_data->getDueDate() instanceof DateTimeValue ? $parent_data->getDueDate()->getTimestamp() + logged_user()->getTimezone() * 3600 : null; $task_data['control_start_date'] = $parent_data->getStartDate() instanceof DateTimeValue ? $parent_data->getStartDate()->getTimestamp() + logged_user()->getTimezone() * 3600 : null; } $subtask_data = $task->getAllSubTasks(); if ($subtask_data) { $task_data['type_control'] = "father"; $task_data['control_title'] = $task->getObjectName(); $task_data['control_due_date'] = getDateValue($post_dd, $dd) instanceof DateTimeValue ? getDateValue($post_dd, $dd)->getTimestamp() : null; $task_data['control_start_date'] = getDateValue($post_st, $sd) instanceof DateTimeValue ? getDateValue($post_st, $sd)->getTimestamp() : null; } } // if //I find all those related to the task to find out if the original $task_related = ProjectTasks::findByRelated($task->getObjectId()); if (!$task_related) { //is not the original as the original look plus other related if ($task->getOriginalTaskId() != "0") { $task_related = ProjectTasks::findByTaskAndRelated($task->getObjectId(), $task->getOriginalTaskId()); } } if ($task_related) { $pending_id = 0; foreach ($task_related as $t_rel) { if ($task->getStartDate() <= $t_rel->getStartDate() && $task->getDueDate() <= $t_rel->getDueDate() && !$t_rel->isCompleted()) { $pending_id = $t_rel->getId(); break; } } tpl_assign('pending_task_id', $pending_id); tpl_assign('task_related', true); } else { tpl_assign('pending_task_id', 0); tpl_assign('task_related', false); } tpl_assign('task', $task); tpl_assign('task_data', $task_data); if (is_array(array_var($_POST, 'task'))) { foreach ($task_data as $k => &$v) { $v = remove_scripts($v); } $send_edit = false; if ($task->getAssignedToContactId() == array_var($task_data, 'assigned_to_contact_id')) { $send_edit = true; } $old_owner = $task->getAssignedTo(); if (array_var($task_data, 'parent_id') == $task->getId()) { flash_error(lang("task own parent error")); ajx_current("empty"); return; } try { try { $task_data['due_date'] = getDateValue(array_var($_POST, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($_POST, 'task_start_date')); } catch (Exception $e) { throw new Exception(lang('date format error', date_format_tip(user_config_option('date_format')))); } if ($task_data['due_date'] instanceof DateTimeValue) { $duetime = getTimeValue(array_var($_POST, 'task_due_time')); if (is_array($duetime)) { $task_data['due_date']->setHour(array_var($duetime, 'hours')); $task_data['due_date']->setMinute(array_var($duetime, 'mins')); $task_data['due_date']->advance(logged_user()->getTimezone() * -3600); } $task_data['use_due_time'] = is_array($duetime); } if ($task_data['start_date'] instanceof DateTimeValue) { $starttime = getTimeValue(array_var($_POST, 'task_start_time')); if (is_array($starttime)) { $task_data['start_date']->setHour(array_var($starttime, 'hours')); $task_data['start_date']->setMinute(array_var($starttime, 'mins')); $task_data['start_date']->advance(logged_user()->getTimezone() * -3600); } $task_data['use_start_time'] = is_array($starttime); } //control date subtask whit parent if (array_var($_POST, 'control_dates') == "child") { $parent = $task->getParent(); if ($parent->getStartDate() instanceof DateTimeValue && $task_data['start_date'] instanceof DateTimeValue) { if ($task_data['start_date']->getTimestamp() < $parent->getStartDate()->getTimestamp()) { $parent->setStartDate($task_data['start_date']); $parent->setUseStartTime($task_data['use_start_time']); } } else { $parent->setStartDate($task_data['start_date']); $parent->setUseStartTime(array_var($task_data, 'use_start_time', 0)); } if ($parent->getDueDate() instanceof DateTimeValue && $task_data['due_date'] instanceof DateTimeValue) { if ($task_data['due_date']->getTimestamp() > $parent->getDueDate()->getTimestamp()) { $parent->setDueDate($task_data['due_date']); $parent->setUseDueTime($task_data['use_due_time']); } } else { $parent->setDueDate($task_data['due_date']); $parent->setUseDueTime(array_var($task_data, 'use_due_time', 0)); } // calculate and set estimated time $totalMinutes = array_var($task_data, 'time_estimate_hours') * 60 + array_var($task_data, 'time_estimate_minutes'); $parent->setTimeEstimate($totalMinutes); $parent->save(); } $err_msg = $this->setRepeatOptions($task_data); if ($err_msg) { throw new Exception($err_msg); } if (!isset($task_data['parent_id'])) { $task_data['parent_id'] = 0; } $member_ids = json_decode(array_var($_POST, 'members')); // keep old dates to check for subtasks $old_start_date = $task->getStartDate(); $old_due_date = $task->getDueDate(); if (config_option("wysiwyg_tasks")) { $task_data['type_content'] = "html"; $task_data['text'] = str_replace(array("\r", "\n", "\r\n"), array('', '', ''), array_var($task_data, 'text')); } else { $task_data['type_content'] = "text"; } $task->setFromAttributes($task_data); $totalMinutes = array_var($task_data, 'time_estimate_hours') * 60 + array_var($task_data, 'time_estimate_minutes'); $task->setTimeEstimate($totalMinutes); if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) { flash_error(lang('task child of child error')); ajx_current("empty"); return; } if (isset($task_data['percent_completed']) && $task_data['percent_completed'] >= 0 && $task_data['percent_completed'] <= 100) { $task->setPercentCompleted($task_data['percent_completed']); } DB::beginWork(); $task->save(); if (!isset($task_data['percent_completed'])) { $task->calculatePercentComplete(); } // dependencies if (config_option('use tasks dependencies')) { $previous_tasks = array_var($task_data, 'previous'); if (is_array($previous_tasks)) { foreach ($previous_tasks as $ptask) { if ($ptask == $task->getId()) { continue; } $dep = ProjectTaskDependencies::findById(array('previous_task_id' => $ptask, 'task_id' => $task->getId())); if (!$dep instanceof ProjectTaskDependency) { $dep = new ProjectTaskDependency(); $dep->setPreviousTaskId($ptask); $dep->setTaskId($task->getId()); $dep->save(); } } $saved_ptasks = ProjectTaskDependencies::findAll(array('conditions' => 'task_id = ' . $task->getId())); foreach ($saved_ptasks as $pdep) { if (!in_array($pdep->getPreviousTaskId(), $previous_tasks)) { $pdep->delete(); } } } else { ProjectTaskDependencies::delete('task_id = ' . $task->getId()); } } // Add assigned user to the subscibers list if ($task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())) { if (!isset($_POST['subscribers'])) { $_POST['subscribers'] = array(); } $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = '1'; } $object_controller = new ObjectController(); if ($isTemplateTask) { $object_controller->add_to_members($task, $member_ids, null, false); } else { $object_controller->add_to_members($task, $member_ids); } $is_template = $task instanceof TemplateTask; $object_controller->add_subscribers($task, null, !$is_template); $object_controller->link_to_new_object($task); $object_controller->add_custom_properties($task); if (!$task->isCompleted()) { //to make sure the task it is not completed yet, and that it has subscribed people $old_reminders = ObjectReminders::getByObject($task); $object_controller->add_reminders($task); //adding the new reminders, if any $object_controller->update_reminders($task, $old_reminders); //updating the old ones if (logged_user() instanceof Contact && (!is_array($old_reminders) || count($old_reminders) == 0) && (user_config_option("add_task_autoreminder") && logged_user()->getId() != $task->getAssignedToContactId() || user_config_option("add_self_task_autoreminder") && logged_user()->getId() == $task->getAssignedToContactId())) { //if there is no asignee, but it still has subscribers $reminder = new ObjectReminder(); $def = explode(",", user_config_option("reminders_tasks")); $minutes = $def[2] * $def[1]; $reminder->setMinutesBefore($minutes); $reminder->setType($def[0]); $reminder->setContext("due_date"); $reminder->setObject($task); $reminder->setUserId(0); $date = $task->getDueDate(); if ($date instanceof DateTimeValue) { $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60); $reminder->setDate($rdate); } $reminder->save(); } } if (!is_array($member_ids) || count($member_ids) == 0) { $member_ids = array(0); } $members = Members::findAll(array('conditions' => "id IN (" . implode(',', $member_ids) . ")")); $task->apply_members_to_subtasks($members, true); // apply values to subtasks $assigned_to = $task->getAssignedToContactId(); $subtasks = $task->getAllSubTasks(); $milestone_id = $task->getMilestoneId(); $apply_ms = array_var($task_data, 'apply_milestone_subtasks'); $apply_at = array_var($task_data, 'apply_assignee_subtasks', ''); foreach ($subtasks as $sub) { $modified = false; //if ($apply_at || !($sub->getAssignedToContactId() > 0)) { if ($apply_at) { $sub->setAssignedToContactId($assigned_to); $modified = true; } if ($apply_ms) { $sub->setMilestoneId($milestone_id); $modified = true; } if ($modified) { $sub->save(); } //control date parent whit subtask if ($_POST['control_dates'] == "father") { if ($sub->getStartDate() instanceof DateTimeValue) { if ($task->getStartDate() instanceof DateTimeValue) { if ($task->getStartDate()->getTimestamp() > $sub->getStartDate()->getTimestamp()) { $sub->setStartDate($task->getStartDate()); } } } else { if ($task->getStartDate() instanceof DateTimeValue) { $sub->setStartDate($task->getStartDate()); } } $sub->setUseStartTime($task->getUseStartTime()); if ($sub->getDueDate() instanceof DateTimeValue) { if ($task->getDueDate() instanceof DateTimeValue) { if ($task->getDueDate()->getTimestamp() < $sub->getDueDate()->getTimestamp()) { $sub->setDueDate($task->getDueDate()); } } } else { if ($task->getDueDate() instanceof DateTimeValue) { $sub->setDueDate($task->getDueDate()); } } $sub->setUseDueTime($task->getUseDueTime()); $sub->save(); } } $task->resetIsRead(); $log_info = ''; if ($send_edit == true) { $log_info = $task->getAssignedToContactId(); } else { if ($send_edit == false) { $task->setAssignedBy(logged_user()); $task->save(); } } if (config_option('repeating_task') == 1) { $opt_rep_day['saturday'] = false; $opt_rep_day['sunday'] = false; if (array_var($task_data, 'repeat_saturdays', false)) { $opt_rep_day['saturday'] = true; } if (array_var($task_data, 'repeat_sundays', false)) { $opt_rep_day['sunday'] = true; } $this->repetitive_task($task, $opt_rep_day); } if (isset($_POST['type_related'])) { if ($_POST['type_related'] == "all" || $_POST['type_related'] == "news") { $task_data['members'] = json_decode(array_var($_POST, 'members')); unset($task_data['due_date']); unset($task_data['use_due_time']); unset($task_data['start_date']); unset($task_data['use_start_time']); $this->repetitive_tasks_related($task, "edit", $_POST['type_related'], $task_data); } } if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) { if (array_var($task_data, 'multi_assignment_aplly_change') == 'subtask') { $null = null; Hook::fire('edit_subtasks', $task, $null); } } //for calculate member status we save de task again after the object have the members $task->save(); // save subtasks added in 'subtasks' tab $sub_tasks_to_log = $this->saveSubtasks($task, array_var($task_data, 'subtasks'), $member_ids); DB::commit(); foreach ($sub_tasks_to_log['add'] as $st_to_log) { ApplicationLogs::createLog($st_to_log, ApplicationLogs::ACTION_ADD); } foreach ($sub_tasks_to_log['edit'] as $st_to_log) { ApplicationLogs::createLog($st_to_log, ApplicationLogs::ACTION_EDIT); } foreach ($sub_tasks_to_log['trash'] as $st_to_log) { ApplicationLogs::createLog($st_to_log, ApplicationLogs::ACTION_TRASH); } //Send Template task to view if ($task instanceof TemplateTask) { $objectId = $task->getObjectId(); $id = $task->getId(); $objectTypeName = $task->getObjectTypeName(); $objectName = $task->getObjectName(); $manager = get_class($task->manager()); $milestoneId = $task instanceof TemplateTask ? $task->getMilestoneId() : '0'; $subTasks = $task->getSubTasks(); $parentId = $task->getParentId(); $ico = "ico-task"; $action = "edit"; $object = TemplateController::prepareObject($objectId, $id, $objectName, $objectTypeName, $manager, $action, $milestoneId, $subTasks, $parentId, $ico); $template_task_data = array('object' => $object); if (array_var($_REQUEST, 'additional_tt_params')) { $additional_tt_params = json_decode(str_replace("'", '"', array_var($_REQUEST, 'additional_tt_params')), true); foreach ($additional_tt_params as $k => $v) { $template_task_data[$k] = $v; } } if (!array_var($_REQUEST, 'modal')) { evt_add("template object added", $template_task_data); } } try { // notify asignee if (array_var($task_data, 'send_notification') && $task->getAssignedToContactId() != $task->getAssignedById()) { $new_owner = $task->getAssignedTo(); if ($new_owner instanceof Contact) { Notifier::taskAssigned($task); } // if } // if if (array_var($task_data, 'send_notification')) { foreach ($sub_tasks_to_log['assigned'] as $st_to_log) { Notifier::taskAssigned($st_to_log); } } } catch (Exception $e) { } // try //notify subscribers $isSilent = true; if (array_var($task_data, 'send_notification_subscribers')) { $isSilent = false; } ApplicationLogs::createLog($task, ApplicationLogs::ACTION_EDIT, false, false, true, $log_info); //flash_success(lang('success edit task list', $task->getObjectName())); if (array_var($_REQUEST, 'modal')) { if (array_var($_REQUEST, 'reload')) { evt_add("reload current panel"); } else { ajx_current("empty"); $this->setLayout("json"); $this->setTemplate(get_template_path("empty")); // reload task info because plugins may have updated some task info (for example: name prefix) if ($is_template) { $task = TemplateTasks::findById($task->getId()); } else { $task = ProjectTasks::findById($task->getId()); } $params = array('msg' => lang('success edit task list', $task->getObjectName()), 'task' => $task->getArrayInfo(), 'reload' => array_var($_REQUEST, 'reload')); if ($task instanceof TemplateTask) { //$params['msg'] = lang('success edit template', $task->getObjectName()); $params['object'] = $template_task_data['object']; } //print_modal_json_response($params, true, array_var($_REQUEST, 'use_ajx')); ajx_extra_data($params); } } else { ajx_current("back"); } // if has subtasks and dates were changed, ask the user if the subtasks dates should also be changed if ($task instanceof ProjectTask && $task->countOpenSubTasks() > 0) { // check if there was any due date changes $dd_advance_info = null; if ($task->getDueDate() instanceof DateTimeValue && $old_due_date instanceof DateTimeValue && $old_due_date->getTimestamp() != $task->getDueDate()->getTimestamp()) { $dd_to_advance_ts = $task->getDueDate()->getTimestamp() - $old_due_date->getTimestamp(); if ($dd_to_advance_ts != 0) { $dd_advance_info = get_time_info($dd_to_advance_ts); } } // check if there was any start date changes $sd_advance_info = null; if ($task->getStartDate() instanceof DateTimeValue && $old_start_date instanceof DateTimeValue && $old_start_date->getTimestamp() != $task->getStartDate()->getTimestamp()) { $sd_to_advance_ts = $task->getStartDate()->getTimestamp() - $old_start_date->getTimestamp(); if ($sd_to_advance_ts != 0) { $sd_advance_info = get_time_info($sd_to_advance_ts); } } if ($dd_advance_info != null || $sd_advance_info != null) { evt_add('ask to change subtasks dates', array('dd_diff' => $dd_advance_info, 'sd_diff' => $sd_advance_info, 'task_id' => $task->getId())); } } } catch (Exception $e) { DB::rollback(); if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); $this->setTemplate(get_template_path("empty")); print_modal_json_response(array('errorCode' => 1, 'errorMessage' => $e->getMessage(), 'showMessage' => 1), true, array_var($_REQUEST, 'use_ajx')); } else { flash_error($e->getMessage()); } ajx_current("empty"); } // try } // if }
function tabs_submit() { ajx_current("empty"); evt_add("tabs changed", null); if (!can_manage_configuration(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } foreach ($_POST['tabs'] as $id => $tab) { $ordering = (int) $tab['ordering']; $title = mysql_escape_string($tab['title']); $enabled = array_var($tab, 'enabled') == "on" ? 1 : 0; if ($tp = TabPanels::instance()->findById($id)) { $tp->setOrdering($ordering); $tp->setTitle($title); $tp->setEnabled($enabled); $tp->save(); } } }
/** * Update default user preferences * */ function update_default_user_preferences() { $category = ContactConfigCategories::findById(get_id()); if (!$category instanceof ContactConfigCategory) { flash_error(lang('config category dnx')); $this->redirectToReferer(get_url('user', 'card')); } // if if ($category->isEmpty()) { flash_error(lang('config category is empty')); $this->redirectToReferer(get_url('user', 'card')); } // if $options = $category->getContactOptions(false); $categories = ContactConfigCategories::getAll(false); tpl_assign('category', $category); tpl_assign('options', $options); tpl_assign('config_categories', $categories); $submited_values = array_var($_POST, 'options'); if (is_array($submited_values)) { try { DB::beginWork(); foreach ($options as $option) { // update global cache if available if (GlobalCache::isAvailable()) { GlobalCache::delete('user_config_option_def_' . $option->getName()); } $new_value = array_var($submited_values, $option->getName()); if (is_null($new_value) || $new_value == $option->getValue()) { continue; } $option->setValue($new_value); $option->save(); if (!user_has_config_option($option->getName())) { evt_add('user preference changed', array('name' => $option->getName(), 'value' => $new_value)); } } // foreach DB::commit(); flash_success(lang('success update config value', $category->getDisplayName())); ajx_current("back"); } catch (Exception $ex) { DB::rollback(); flash_success(lang('error update config value', $category->getDisplayName())); } } // if }
function popup_reminders() { ajx_current("empty"); // if no new popup reminders don't make useless queries if (GlobalCache::isAvailable()) { $check = GlobalCache::get('check_for_popup_reminders_' . logged_user()->getId(), $success); if ($success && $check == 0) { return; } } $reminders = ObjectReminders::getDueReminders("reminder_popup"); $popups = array(); foreach ($reminders as $reminder) { $object = $reminder->getObject(); $context = $reminder->getContext(); $type = $object->getObjectTypeName(); $date = $object->getColumnValue($reminder->getContext()); if (!$date instanceof DateTimeValue) { continue; } if ($object->isTrashed()) { $reminder->delete(); continue; } // convert time to the user's locale $timezone = logged_user()->getTimezone(); if ($date->getTimestamp() + 5 * 60 < DateTimeValueLib::now()->getTimestamp()) { // don't show popups older than 5 minutes $reminder->delete(); continue; } if ($reminder->getUserId() == 0) { if (!$object->isSubscriber(logged_user())) { // reminder for subscribers and user is not subscriber continue; } } else { if ($reminder->getUserId() != logged_user()->getId()) { continue; } } if ($context == "due_date" && $object instanceof ProjectTask) { if ($object->isCompleted()) { // don't show popups for completed tasks $reminder->delete(); continue; } } $url = $object->getViewUrl(); $link = '<a href="#" onclick="og.openLink(\'' . $url . '\');return false;">' . clean($object->getObjectName()) . '</a>'; evt_add("popup", array('title' => lang("{$context} {$type} reminder"), 'message' => lang("{$context} {$type} reminder desc", $link, format_datetime($date)), 'type' => 'reminder', 'sound' => 'info')); if ($reminder->getUserId() == 0) { // reminder is for all subscribers, so change it for one reminder per user (except logged_user) // otherwise if deleted it won't notify other subscribers and if not deleted it will keep notifying // logged user $subscribers = $object->getSubscribers(); foreach ($subscribers as $subscriber) { if ($subscriber->getId() != logged_user()->getId()) { $new = new ObjectReminder(); $new->setContext($reminder->getContext()); $new->setDate($reminder->getDate()); $new->setMinutesBefore($reminder->getMinutesBefore()); $new->setObject($object); $new->setUser($subscriber); $new->setType($reminder->getType()); $new->save(); } } } $reminder->delete(); } // popup reminders already checked for logged user if (GlobalCache::isAvailable()) { $today_next_reminders = ObjectReminders::findAll(array('conditions' => array("`date` > ? AND `date` < ?", DateTimeValueLib::now(), DateTimeValueLib::now()->endOfDay()), 'limit' => config_option('cron reminder limit', 100))); if (count($today_next_reminders) == 0) { GlobalCache::update('check_for_popup_reminders_' . logged_user()->getId(), 0, 60 * 30); } } }
function delete_tag_by_name() { if (!logged_user()->isAdministrator()) { flash_error(lang("no access permissions")); return; } ajx_current("empty"); $tag = array_var($_GET, 'tag'); if (is_null($tag)) { flash_error(lang("error must enter tag")); return; } Tags::deleteTagByName($tag); evt_add('tag delete', $tag); $this->redirectTo("tag", "list_tags"); }
function delete_user() { $user = Contacts::findById(get_id()); if (!($user instanceof Contact && $user->isUser())) { flash_error(lang('user dnx')); ajx_current("empty"); return; } if (!$user->canDelete(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } try { DB::beginWork(); $user->disable(); $ret = null; Hook::fire("user_disabled", $user, $ret); DB::commit(); ApplicationLogs::createLog($user, ApplicationLogs::ACTION_TRASH); flash_success(lang('success delete user', $user->getObjectName())); if (array_var($_GET, 'current') == "administration") { ajx_current("reload"); } else { evt_add('current panel back'); ajx_current("empty"); } } catch (Exception $e) { flash_error($e->getMessage()); DB::rollback(); ajx_current("empty"); } }
/** * Edit task * * @access public * @param void * @return null */ function edit_task() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('add_task'); $task = ProjectTasks::findById(get_id()); if (!$task instanceof ProjectTask) { flash_error(lang('task list dnx')); ajx_current("empty"); return; } // if if (!$task->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $task_data = array_var($_POST, 'task'); if (!is_array($task_data)) { $this->getRepeatOptions($task, $occ, $rsel1, $rsel2, $rsel3, $rnum, $rend, $rjump); $tag_names = $task->getTagNames(); $task_data = array('title' => array_var($_POST, 'title', $task->getTitle()), 'text' => $task->getText(), 'milestone_id' => array_var($_POST, 'milestone_id', $task->getMilestoneId()), 'due_date' => getDateValue(array_var($_POST, 'task_due_date'), $task->getDueDate()), 'start_date' => getDateValue(array_var($_POST, 'task_start_date', $task->getStartDate())), 'parent_id' => $task->getParentId(), 'project_id' => array_var($_POST, 'project_id', $task->getProjectId()), 'tags' => is_array($tag_names) && count($tag_names) ? implode(', ', $tag_names) : '', 'is_private' => $task->isPrivate(), 'assigned_to' => array_var($_POST, 'assigned_to', $task->getAssignedToCompanyId() . ':' . $task->getAssignedToUserId()), 'priority' => array_var($_POST, 'priority', $task->getPriority()), 'send_notification' => array_var($_POST, 'notify') == 'true', 'time_estimate' => $task->getTimeEstimate(), 'forever' => $task->getRepeatForever(), 'rend' => $rend, 'rnum' => $rnum, 'rjump' => $rjump, 'rsel1' => $rsel1, 'rsel2' => $rsel2, 'rsel3' => $rsel3, 'occ' => $occ, 'repeat_by' => $task->getRepeatBy(), 'object_subtype' => array_var($_POST, "object_subtype", $task->getObjectSubtype() != 0 ? $task->getObjectSubtype() : config_option('default task co type'))); // array $handins = ObjectHandins::getAllHandinsByObject($task); $id = 0; if ($handins) { foreach ($handins as $handin) { $task_data['handin' . $id] = array('title' => $handin->getTitle(), 'assigned_to' => $handin->getResponsibleCompanyId() . ':' . $handin->getResponsibleUserId()); // array $id = $id + 1; if ($id > 3) { break; } } // foreach } // if } // if tpl_assign('task', $task); tpl_assign('task_data', $task_data); if (is_array(array_var($_POST, 'task'))) { //MANAGE CONCURRENCE WHILE EDITING $upd = array_var($_POST, 'updatedon'); if ($upd && $task->getUpdatedOn()->getTimestamp() > $upd && !array_var($_POST, 'merge-changes') == 'true') { ajx_current('empty'); evt_add("handle edit concurrence", array("updatedon" => $task->getUpdatedOn()->getTimestamp(), "genid" => array_var($_POST, 'genid'))); return; } if (array_var($_POST, 'merge-changes') == 'true') { $this->setTemplate('view_list'); $edited_task = ProjectTasks::findById($task->getId()); ajx_set_no_toolbar(true); ajx_set_panel(lang('tab name', array('name' => $edited_task->getTitle()))); tpl_assign('task_list', $edited_task); ajx_extra_data(array("title" => $edited_task->getTitle(), 'icon' => 'ico-task')); return; } $old_owner = $task->getAssignedTo(); if (array_var($task_data, 'parent_id') == $task->getId()) { flash_error(lang("task own parent error")); ajx_current("empty"); return; } $old_is_private = $task->isPrivate(); $old_project_id = $task->getProjectId(); $project_id = array_var($_POST, 'ws_ids', 0); if ($old_project_id != $project_id) { $newProject = Projects::findById($project_id); if (!$newProject instanceof Project || !$task->canAdd(logged_user(), $newProject)) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } } $task_data['due_date'] = getDateValue(array_var($_POST, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($_POST, 'task_start_date')); try { $err_msg = $this->setRepeatOptions($task_data); if ($err_msg) { flash_error($err_msg); ajx_current("empty"); return; } if (!isset($task_data['parent_id'])) { $task_data['parent_id'] = 0; } $was_template = $task->getIsTemplate(); $task->setFromAttributes($task_data); $task->setIsTemplate($was_template); // is_template value must not be changed from ui // Set assigned to $assigned_to = explode(':', array_var($task_data, 'assigned_to', '')); $company_id = array_var($assigned_to, 0, 0); $user_id = array_var($assigned_to, 1, 0); $can_assign = can_assign_task_to_company_user(logged_user(), $task, $company_id, $user_id); if ($can_assign !== true) { flash_error($can_assign); return; } $task->setAssignedToCompanyId($company_id); $task->setAssignedToUserId($user_id); if (!logged_user()->isMemberOfOwnerCompany()) { $task->setIsPrivate($old_is_private); } $totalMinutes = array_var($task_data, 'time_estimate_hours') * 60 + array_var($task_data, 'time_estimate_minutes'); $task->setTimeEstimate($totalMinutes); //Add handins $handins = array(); for ($i = 0; $i < 4; $i++) { if (isset($task_data["handin{$i}"]) && is_array($task_data["handin{$i}"]) && trim(array_var($task_data["handin{$i}"], 'title')) != '') { $assigned_to = explode(':', array_var($task_data["handin{$i}"], 'assigned_to', '')); $handins[] = array('title' => array_var($task_data["handin{$i}"], 'title'), 'responsible_company_id' => array_var($assigned_to, 0, 0), 'responsible_user_id' => array_var($assigned_to, 1, 0)); // array } // if } // for if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) { flash_error(lang('task child of child error')); ajx_current("empty"); return; } DB::beginWork(); $task->save(); $task->setTagsFromCSV(array_var($task_data, 'tags')); $object_controller = new ObjectController(); $object_controller->add_to_workspaces($task, !$task->getIsTemplate()); $object_controller->link_to_new_object($task); $object_controller->add_subscribers($task); $object_controller->add_custom_properties($task); $object_controller->add_reminders($task); // apply values to subtasks $subtasks = $task->getAllSubTasks(); $project = $task->getProject(); $milestone_id = $task->getMilestoneId(); $apply_ws = array_var($task_data, 'apply_ws_subtasks') == "checked"; $apply_ms = array_var($task_data, 'apply_milestone_subtasks') == "checked"; $apply_at = array_var($task_data, 'apply_assignee_subtasks', '') == "checked"; foreach ($subtasks as $sub) { $modified = false; if ($apply_at || !$sub->getAssignedTo() instanceof ApplicationDataObject) { $sub->setAssignedToCompanyId($company_id); $sub->setAssignedToUserId($user_id); $modified = true; } if ($apply_ws) { $sub->setProject($project); $modified = true; } if ($apply_ms) { $sub->setMilestoneId($milestone_id); $modified = true; } if ($modified) { $sub->save(); } } $task->resetIsRead(); ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_EDIT); DB::commit(); try { if (array_var($task_data, 'send_notification') == 'checked') { $new_owner = $task->getAssignedTo(); if ($new_owner instanceof User) { Notifier::taskAssigned($task); } // if } // if } catch (Exception $e) { } // try flash_success(lang('success edit task list', $task->getTitle())); ajx_current("back"); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
/** * Add new task * * @access public * @param void * @return null */ function add_task() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $notAllowedMember = ''; if (!ProjectTask::canAdd(logged_user(), active_context(), $notAllowedMember)) { if (str_starts_with($notAllowedMember, '-- req dim --')) { flash_error(lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in))); } else { flash_error(lang('no context permissions to add', lang("tasks"), $notAllowedMember)); } ajx_current("empty"); return; } // if $task = new ProjectTask(); $task_data = array_var($_POST, 'task'); if (!is_array($task_data)) { $dd = getDateValue(array_var($_POST, 'task_due_date', '')); if ($dd instanceof DateTimeValue) { $duetime = getTimeValue(array_var($_POST, 'task_due_time')); if (is_array($duetime)) { $dd->setHour(array_var($duetime, 'hours')); $dd->setMinute(array_var($duetime, 'mins')); } $task->setUseDueTime(is_array($duetime)); } $sd = getDateValue(array_var($_POST, 'task_start_date', '')); if ($sd instanceof DateTimeValue) { $starttime = getTimeValue(array_var($_POST, 'task_start_time')); if (is_array($starttime)) { $sd->setHour(array_var($starttime, 'hours')); $sd->setMinute(array_var($starttime, 'mins')); } $task->setUseStartTime(is_array($starttime)); } $time_estimate = array_var($_POST, 'hours', 0) * 60 + array_var($_POST, 'minutes', 0); $task_data = array('milestone_id' => array_var($_POST, 'milestone_id', 0), 'project_id' => 1, 'name' => array_var($_POST, 'name', ''), 'assigned_to_contact_id' => array_var($_POST, 'assigned_to_contact_id', '0'), 'parent_id' => array_var($_POST, 'parent_id', 0), 'priority' => array_var($_POST, 'priority', ProjectTasks::PRIORITY_NORMAL), 'text' => array_var($_POST, 'text', ''), 'start_date' => $sd, 'due_date' => $dd, 'time_estimate' => $time_estimate, 'is_template' => array_var($_POST, "is_template", array_var($_GET, "is_template", false)), 'percent_completed' => array_var($_POST, "percent_completed", ''), 'object_subtype' => array_var($_POST, "object_subtype", config_option('default task co type')), 'send_notification' => array_var($_POST, 'notify') && array_var($_POST, 'notify') == 'true'); // array if (Plugins::instance()->isActivePlugin('mail')) { $from_email = array_var($_GET, 'from_email'); $email = MailContents::findById($from_email); if ($email instanceof MailContent) { $task_data['name'] = $email->getSubject(); $task_data['text'] = lang('create task from email description', $email->getSubject(), $email->getFrom(), $email->getTextBody()); tpl_assign('from_email', $email); } } } // if if (array_var($_GET, 'replace')) { ajx_replace(true); } tpl_assign('task_data', $task_data); tpl_assign('task', $task); tpl_assign('pending_task_id', 0); $subtasks = array(); if (array_var($_POST, 'multi_assignment')) { $json_subtasks = json_decode(array_var($_POST, 'multi_assignment')); $line = 0; if (count($json_subtasks) > 0) { foreach ($json_subtasks as $json_subtask) { $subtasks[$line]['assigned_to_contact_id'] = $json_subtask->assigned_to_contact_id; $subtasks[$line]['name'] = $json_subtask->name; $subtasks[$line]['time_estimate_hours'] = $json_subtask->time_estimate_hours; $subtasks[$line]['time_estimate_minutes'] = $json_subtask->time_estimate_minutes; $line++; } } } tpl_assign('multi_assignment', $subtasks); if (is_array(array_var($_POST, 'task'))) { // order $task->setOrder(ProjectTasks::maxOrder(array_var($task_data, "parent_id", 0), array_var($task_data, "milestone_id", 0))); $task_data['due_date'] = getDateValue(array_var($_POST, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($_POST, 'task_start_date')); if ($task_data['due_date'] instanceof DateTimeValue) { $duetime = getTimeValue(array_var($_POST, 'task_due_time')); if (is_array($duetime)) { $task_data['due_date']->setHour(array_var($duetime, 'hours')); $task_data['due_date']->setMinute(array_var($duetime, 'mins')); } $task_data['due_date']->advance(logged_user()->getTimezone() * -3600); $task_data['use_due_time'] = is_array($duetime); } if ($task_data['start_date'] instanceof DateTimeValue) { $starttime = getTimeValue(array_var($_POST, 'task_start_time')); if (is_array($starttime)) { $task_data['start_date']->setHour(array_var($starttime, 'hours')); $task_data['start_date']->setMinute(array_var($starttime, 'mins')); } $task_data['start_date']->advance(logged_user()->getTimezone() * -3600); $task_data['use_start_time'] = is_array($starttime); } try { $err_msg = $this->setRepeatOptions($task_data); if ($err_msg) { flash_error($err_msg); ajx_current("empty"); return; } if (config_option("wysiwyg_tasks")) { $task_data['type_content'] = "html"; $task_data['text'] = preg_replace("/[\n|\r|\n\r]/", '', array_var($task_data, 'text')); } else { $task_data['type_content'] = "text"; } $task_data['object_type_id'] = $task->getObjectTypeId(); $member_ids = json_decode(array_var($_POST, 'members')); $task->setFromAttributes($task_data); if (!can_task_assignee(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $totalMinutes = array_var($task_data, 'time_estimate_hours', 0) * 60 + array_var($task_data, 'time_estimate_minutes', 0); $task->setTimeEstimate($totalMinutes); $id = array_var($_GET, 'id', 0); $parent = ProjectTasks::findById($id); if ($parent instanceof ProjectTask) { $task->setParentId($id); $member_ids = $parent->getMemberIds(); if ($parent->getIsTemplate()) { $task->setIsTemplate(true); } } if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) { flash_error(lang('task child of child error')); ajx_current("empty"); return; } DB::beginWork(); $task->save(); // dependencies if (config_option('use tasks dependencies')) { $previous_tasks = array_var($task_data, 'previous'); if (is_array($previous_tasks)) { foreach ($previous_tasks as $ptask) { if ($ptask == $task->getId()) { continue; } $dep = ProjectTaskDependencies::findById(array('previous_task_id' => $ptask, 'task_id' => $task->getId())); if (!$dep instanceof ProjectTaskDependency) { $dep = new ProjectTaskDependency(); $dep->setPreviousTaskId($ptask); $dep->setTaskId($task->getId()); $dep->save(); } } } } if (array_var($_GET, 'copyId', 0) > 0) { // copy remaining stuff from the task with id copyId $toCopy = ProjectTasks::findById(array_var($_GET, 'copyId')); if ($toCopy instanceof ProjectTask) { ProjectTasks::copySubTasks($toCopy, $task, array_var($task_data, 'is_template', false)); } } // if task is added from task view -> add subscribers if (array_var($task_data, 'inputtype') == 'taskview') { if (!isset($_POST['subscribers'])) { $_POST['subscribers'] = array(); } $_POST['subscribers']['user_' . logged_user()->getId()] = 'checked'; if ($task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())->getUserType()) { $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = 'checked'; } } // Add assigned user to the subscibers list if (isset($_POST['subscribers']) && $task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())) { $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = 'checked'; } //Link objects $object_controller = new ObjectController(); $object_controller->add_to_members($task, $member_ids); $object_controller->add_subscribers($task); $object_controller->link_to_new_object($task); $object_controller->add_custom_properties($task); $object_controller->add_reminders($task); ApplicationLogs::createLog($task, ApplicationLogs::ACTION_ADD); if (config_option('repeating_task') == 1) { $opt_rep_day['saturday'] = false; $opt_rep_day['sunday'] = false; if (array_var($task_data, 'repeat_saturdays', false)) { $opt_rep_day['saturday'] = true; } if (array_var($task_data, 'repeat_sundays', false)) { $opt_rep_day['sunday'] = true; } $this->repetitive_task($task, $opt_rep_day); } if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) { $subtasks = array_var($_POST, 'multi_assignment'); Hook::fire('save_subtasks', $task, $subtasks); } DB::commit(); // notify asignee if (array_var($task_data, 'send_notification') == 'checked') { try { Notifier::taskAssigned($task); } catch (Exception $e) { evt_add("debug", $e->getMessage()); } // try } if ($task->getIsTemplate()) { flash_success(lang('success add template', $task->getObjectName())); } else { flash_success(lang('success add task list', $task->getObjectName())); } if (array_var($task_data, 'inputtype') != 'taskview') { ajx_current("back"); } else { ajx_current("reload"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
/** * Edit weblink properties * * @access public * @param void * @return null */ function edit_weblink() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('add_weblink'); $file = ProjectFiles::findById(get_id()); if (!$file instanceof ProjectFile) { flash_error(lang('file dnx')); ajx_current("empty"); return; } // if if (!$file->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $file_data = array_var($_POST, 'webpage'); if (!is_array($file_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } $file_data = array('description' => $file->getDescription(), 'name' => $file->getFilename(), 'url' => $file->getUrl(), 'attach_to_notification' => $file->getAttachToNotification(), 'default_subject' => $file->getDefaultSubject(), 'file_id' => get_id()); // array } // if tpl_assign('file', $file); tpl_assign('file_data', $file_data); //******************* if (is_array(array_var($_POST, 'webpage'))) { try { $file->setFilename(array_var($file_data, 'name')); $file->setFromAttributes($file_data); $url = array_var($file_data, 'url', ''); if ($url && strpos($url, ':') === false) { $url = $this->protocol . "://" . $url; $file->setUrl($url); } DB::beginWork(); $file->save(); $member_ids = json_decode(array_var($_POST, 'members')); //link it! $member_ids = json_decode(array_var($_POST, 'members')); $object_controller = new ObjectController(); $object_controller->add_to_members($file, $member_ids); $object_controller->link_to_new_object($file); $object_controller->add_subscribers($file); $object_controller->add_custom_properties($file); $file->resetIsRead(); DB::commit(); ApplicationLogs::createLog($file, ApplicationLogs::ACTION_EDIT); flash_success(lang('success edit webpage', $file->getObjectName())); ajx_current("back"); if (array_var($_REQUEST, 'modal')) { evt_add("reload current panel"); } // Error... } catch (Exception $e) { DB::rollback(); if (array_var($_REQUEST, 'modal')) { ajx_extra_data(array('error' => $e->getMessage())); } else { flash_error($e->getMessage()); } ajx_current("empty"); } } }
function unarchive() { if (!can_manage_dimension_members(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $member = Members::findById(get_id()); if (!$member instanceof Member) { flash_error(lang('member dnx')); ajx_current("empty"); return; } if (get_id('user')) { $user = Contacts::findById($get_id('user')); } else { $user = logged_user(); } if (!$user instanceof Contact) { ajx_current("empty"); return; } try { DB::beginWork(); set_time_limit(0); $count = $member->unarchive($user); evt_add("reload dimension tree", $member->getDimensionId()); ajx_current("back"); flash_success(lang('success unarchive member', $member->getName(), $count)); DB::commit(); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } }
function add() { if (!can_manage_templates(logged_user())) { flash_error(lang("no access permissions")); ajx_current("empty"); return; } $template = new COTemplate(); $template_data = array_var($_POST, 'template'); if (!is_array($template_data)) { $template_data = array('name' => '', 'description' => ''); } else { //No le agrego miembros // $member_ids = json_decode(array_var($_POST, 'members')); // $context = active_context(); // $member_ids = array(); // foreach ($context as $selection) { // if ($selection instanceof Member) $member_ids[] = $selection->getId(); // } // if(count($selected_members)==0){ // $member_ids=$object->getMemberIds(); // } // $controller->add_to_members($copy, $selected_members); $cotemplate = new COTemplate(); $cotemplate->setFromAttributes($template_data); $object_ids = array(); try { DB::beginWork(); $cotemplate->save(); $objects = array_var($_POST, 'objects'); foreach ($objects as $objid) { $object = Objects::findObject($objid); $oid = $cotemplate->addObject($object); $object_ids[$objid] = $oid; // COTemplates::validateObjectContext($object, $member_ids); } $objectPropertyValues = array_var($_POST, 'propValues'); $propValueParams = array_var($_POST, 'propValueParam'); $propValueOperation = array_var($_POST, 'propValueOperation'); $propValueAmount = array_var($_POST, 'propValueAmount'); $propValueUnit = array_var($_POST, 'propValueUnit'); if (is_array($objectPropertyValues)) { foreach ($objectPropertyValues as $objInfo => $propertyValues) { foreach ($propertyValues as $property => $value) { $split = explode(":", $objInfo); $object_id = $split[1]; $templateObjPropValue = new TemplateObjectProperty(); $templateObjPropValue->setTemplateId($cotemplate->getId()); $templateObjPropValue->setObjectId($object_ids[$objInfo]); //$templateObjPropValue->setObjectManager($split[0]); $templateObjPropValue->setProperty($property); $propValue = ''; if (isset($propValueParams[$objInfo][$property])) { $param = $propValueParams[$objInfo][$property]; $operation = $propValueOperation[$objInfo][$property]; $amount = $propValueAmount[$objInfo][$property]; $unit = $propValueUnit[$objInfo][$property]; $propValue = '{' . $param . '}' . $operation . $amount . $unit; } else { if (is_array($value)) { $propValue = $value[0]; } else { $propValue = $value; } } $templateObjPropValue->setValue($propValue); $templateObjPropValue->save(); } } } $parameters = array_var($_POST, 'parameters'); if (is_array($parameters)) { foreach ($parameters as $parameter) { $newTemplateParameter = new TemplateParameter(); $newTemplateParameter->setTemplateId($cotemplate->getId()); $newTemplateParameter->setName($parameter['name']); $newTemplateParameter->setType($parameter['type']); $newTemplateParameter->save(); } } // $object_controller = new ObjectController(); // $object_controller->add_to_members($cotemplate, $member_ids); evt_add('reload tab panel', 'tasks-panel'); DB::commit(); ApplicationLogs::createLog($cotemplate, ApplicationLogs::ACTION_ADD); flash_success(lang("success add template")); if (array_var($_POST, "add_to")) { ajx_current("start"); } else { ajx_current("back"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } } $objects = array(); if (array_var($_GET, 'id')) { /* TODO: Feng 2 $object = Objects::findObject(array_var($_GET, 'id')); if ($object instanceof ProjectDataObject) { $objects[] = $object; tpl_assign('add_to', true); } */ } tpl_assign('objects', $objects); tpl_assign('cotemplate', $template); tpl_assign('template_data', $template_data); }
/** * Set tags for specific object * * @access public * @param array $tags Array of tags... Can be NULL or empty * @param ProjectDataObject $object * @param string $manager_class * @return null */ function setObjectTags($tags, ProjectDataObject $object, $manager_class) { self::clearObjectTags($object, $manager_class); if (is_array($tags) && count($tags)) { foreach ($tags as $tag_name) { if (trim($tag_name) != '') { $tag = new Tag(); $tag->setTag($tag_name); $tag->setRelObjectId($object->getId()); $tag->setRelObjectManager($manager_class); $tag->setIsPrivate($object->isPrivate()); $tag->save(); evt_add("tag added", array("name" => $tag_name)); } // if } // foreach } // if return true; }
function quick_config_filter_activity() { $this->setLayout('empty'); $submited_values = array_var($_POST, 'filter'); $members = array_var($_GET, 'members'); tpl_assign('members', array_var($_GET, 'members')); $filters_default = ContactConfigOptions::getFilterActivity(); $filters = ContactConfigOptionValues::getFilterActivityMember($filters_default->getId(), $members); if (!$filters) { $filters = ContactConfigOptions::getFilterActivity(); $filter_value = $filters->getDefaultValue(); tpl_assign('id', $filters->getId()); } else { $filter_value = $filters->getValue(); } $filters_def = explode(",", $filter_value); if ($filters_def[0] == 1) { tpl_assign('checked_dimension_yes', 'checked="checked"'); } else { tpl_assign('checked_dimension_no', 'checked="checked"'); } if ($filters_def[1] == 1) { tpl_assign('checked_timeslot_yes', 'checked="checked"'); } else { tpl_assign('checked_timeslot_no', 'checked="checked"'); } tpl_assign('show', $filters_def[2]); if ($filters_def[3] == 1) { tpl_assign('checked_view_downloads_yes', 'checked="checked"'); } else { tpl_assign('checked_view_downloads_no', 'checked="checked"'); } if (is_array($submited_values)) { $members = array_var($submited_values, "members"); $filters_default = ContactConfigOptions::getFilterActivity(); $filters = ContactConfigOptionValues::getFilterActivityMember($filters_default->getId(), $members); // update cache if available if (GlobalCache::isAvailable()) { GlobalCache::delete('user_config_option_' . logged_user()->getId() . '_' . $filters_default->getName() . "_" . $members); } $new_value = array_var($submited_values, "dimension") . "," . array_var($submited_values, "timeslot") . "," . array_var($submited_values, "show") . "," . array_var($submited_values, "view_downloads"); if (!$filters) { $filter_opt = new ContactConfigOptionValue(); $filter_opt->setOptionId($filters_default->getId()); $filter_opt->setContactId(logged_user()->getId()); $filter_opt->setValue($new_value); $filter_opt->setMemberId($members); $filter_opt->save(); } else { $filters->setValue($new_value); $filters->save(); } evt_add("user preference changed", array('name' => $filters_default->getName() . "_" . $members, 'value' => $new_value)); redirect_to("index.php?c=dashboard&a=main_dashboard"); } }