/** * Delete specific message * * @access public * @param void * @return null */ function delete() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current('empty'); return; } ajx_current("empty"); $message = ProjectMessages::findById(get_id()); if (!$message instanceof ProjectMessage) { flash_error(lang('message dnx')); ajx_current("empty"); return; } // if if (!$message->canDelete(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if try { DB::beginWork(); $message->trash(); DB::commit(); ApplicationLogs::createLog($message, ApplicationLogs::ACTION_TRASH); flash_success(lang('success deleted message', $message->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(lang('error delete message')); ajx_current("empty"); } // try }
/** * Edit logged user profile. * Called with different POST format from "administration/users/edit user profile " and from "profile/edit my profile" * * @access public * @param void * @return null */ function edit_profile() { ajx_set_panel(""); $user = Contacts::findById(get_id()); if (!($user instanceof Contact && $user->isUser()) || $user->getDisabled()) { flash_error(lang('user dnx')); ajx_current("empty"); return; } // if $company = $user->getCompany(); /*if(!($company instanceof Contact)) { flash_error(lang('company dnx')); ajx_current("empty"); return; } // if */ if (!$user->canUpdateProfile(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $redirect_to = array_var($_GET, 'redirect_to'); if (trim($redirect_to) == '' || !is_valid_url($redirect_to)) { $redirect_to = $user->getCardUserUrl(); } // if tpl_assign('redirect_to', null); $user_data = array_var($_POST, 'user'); if (!is_array($user_data)) { $user_data = array('username' => $user->getUsername(), 'email' => $user->getEmailAddress(), 'display_name' => $user->getObjectName(), 'timezone' => $user->getTimezone(), 'company_id' => $user->getCompanyId(), 'is_admin' => $user->isAdministrator(), 'type' => $user->getUserType()); // array } // if tpl_assign('user', $user); tpl_assign('company', $company); tpl_assign('user_data', $user_data); tpl_assign('billing_categories', BillingCategories::findAll()); // Permission Groups $groups = PermissionGroups::getNonPersonalSameLevelPermissionsGroups('`parent_id`,`id` ASC'); tpl_assign('groups', $groups); $roles = SystemPermissions::getAllRolesPermissions(); tpl_assign('roles', $roles); $tabs = TabPanelPermissions::getAllRolesModules(); tpl_assign('tabs_allowed', $tabs); // Submit user if (is_array(array_var($_POST, 'user'))) { $company_id = array_var($user_data, 'company_id'); if ($company_id && !Contacts::findById($company_id) instanceof Contact) { ajx_current("empty"); flash_error(lang("company dnx")); return; } try { DB::beginWork(); $user->setUserType(array_var($user_data, 'type')); $user->setTimezone(array_var($user_data, 'timezone')); $user->setDefaultBillingId(array_var($user_data, 'default_billing_id')); $user->setUpdatedOn(DateTimeValueLib::now()); if (logged_user()->isAdministrator()) { //if ($user->getId() != 2) { // System admin cannot change it's company (from Feng 2.0 onwards administrador has id = 2) // $user->setCompanyId(array_var($user_data,'company_id')); //} $user->setUsername(array_var($user_data, 'username')); } else { $user->setCompanyId(array_var($user_data, 'company_id')); } if (!isset($_POST['sys_perm'])) { $rol_permissions = SystemPermissions::getRolePermissions(array_var($user_data, 'type')); $_POST['sys_perm'] = array(); $not_rol_permissions = SystemPermissions::getNotRolePermissions(array_var($user_data, 'type')); foreach ($not_rol_permissions as $npr) { $_POST['sys_perm'][$npr] = 0; } foreach ($rol_permissions as $pr) { $_POST['sys_perm'][$pr] = 1; } } if (!isset($_POST['mod_perm'])) { $tabs_permissions = TabPanelPermissions::getRoleModules(array_var($user_data, 'type')); $_POST['mod_perm'] = array(); foreach ($tabs_permissions as $pr) { $_POST['mod_perm'][$pr] = 1; } } $user->save(); $autotimezone = array_var($user_data, 'autodetect_time_zone', null); if ($autotimezone !== null) { set_user_config_option('autodetect_time_zone', $autotimezone, $user->getId()); } $object_controller = new ObjectController(); $object_controller->add_custom_properties($user); $ret = null; Hook::fire('after_edit_profile', $user, $ret); $pg_id = $user->getPermissionGroupId(); save_permissions($pg_id, $user->isGuest()); DB::commit(); flash_success(lang('success update profile')); ajx_current("back"); ajx_add("overview-panel", "reload"); } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } // try } // if }
function set_getting_started_step() { ajx_current("empty"); if (!logged_user()->isAdminGroup()) { ajx_current("empty"); return; } $step = array_var($_REQUEST, 'step'); $current_step = config_option('getting_started_step'); if ($current_step < $step) { set_config_option('getting_started_step', $step); // change tab title and icon if ($step >= 99) { DB::execute("UPDATE " . TABLE_PREFIX . "tab_panels SET title='settings', icon_cls='ico-administration' WHERE id='more-panel';"); } } if (array_var($_REQUEST, 'reload_panel')) { ajx_add('more-panel', 'reload'); } }
/** * Resolve action to perform * * @param string $action * @param array $attributes * @return string $message */ private function resolveAction($action, $attributes) { $resultMessage = ""; $resultCode = 0; switch ($action) { case "delete": $err = 0; $succ = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email) && $email->canDelete(logged_user())) { if ($email->getState() == 2) { // we are deleting a draft email $emails_in_conversation = array($email); } else { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } } foreach ($emails_in_conversation as $email) { if ($email->canDelete(logged_user())) { try { $email->trash(); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TRASH); $succ++; } catch (Exception $e) { $err++; } } else { $err++; } } } else { $err++; } break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error delete objects", $err) . "<br />" . ($succ > 0 ? lang("success delete objects", $succ) : ""); } else { $resultMessage = lang("success delete objects", $succ); } ajx_add("overview-panel", "reload"); break; case "tag": $tag = $attributes["tag"]; if (!trim($tag)) { break; } for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { Tags::addObjectTag($tag, $email); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TAG, false, null, true, $tag); } } $resultMessage = lang("success tag objects", ''); } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for break; case "untag": $tag = $attributes["tag"]; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { if ($tag != '') { $email->deleteTag($tag); } else { $email->clearTags(); } } } //ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TAG,false,null,true,$tag); $resultMessage = lang("success untag objects", ''); } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for break; case "unclassify": for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email) && !$email->isDeleted() && $email->canEdit(logged_user())) { $this->do_unclassify($email); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TAG, false, null, true, $tag); $resultMessage = lang("success unclassify emails", count($attributes["ids"])); } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for break; case "move": $wsid = $attributes["moveTo"]; $destination = Projects::findById($wsid); if (!$destination instanceof Project) { $resultMessage = lang('project dnx'); $resultCode = 1; } else { if (!can_add(logged_user(), $destination, 'MailContents')) { $resultMessage = lang('no access permissions'); $resultCode = 1; } else { $count = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $conversation = MailContents::getMailsFromConversation($email); } else { $conversation = array($email); } foreach ($conversation as $conv_email) { $this->addEmailToWorkspace($conv_email->getId(), $destination, array_var($attributes, "mantainWs", true)); if (array_var($attributes, 'classify_atts') && $conv_email->getHasAttachments()) { MailUtilities::parseMail($conv_email->getContent(), $decoded, $parsedEmail, $warnings); $classification_data = array(); for ($j = 0; $j < count(array_var($parsedEmail, "Attachments", array())); $j++) { $classification_data["att_" . $j] = true; } $tags = implode(",", $conv_email->getTagNames()); $this->classifyFile($classification_data, $conv_email, $parsedEmail, array($destination), array_var($attributes, "mantainWs", true), $tags); } } $count++; break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for $resultMessage = lang("success move objects", $count); $resultCode = 0; } } break; case "checkmail": $resultCheck = MailController::checkmail(); $resultMessage = $resultCheck[1]; // if $resultCode = $resultCheck[0]; ajx_add("overview-panel", "reload"); break; case "markAsRead": case "markAsUnRead": for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { $email->setIsRead(logged_user()->getId(), $action == 'markAsRead'); } } } break; default: $resultMessage = lang("Unimplemented type: '" . $type . "'"); // if $resultCode = 2; break; } // switch } // for ajx_add("overview-panel", "reload"); break; case "archive": $err = 0; $succ = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { try { $email->archive(null); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_ARCHIVE); $succ++; } catch (Exception $e) { $err++; } } } } else { $err++; } break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error archive objects", $err) . "<br />" . ($succ > 0 ? lang("success archive objects", $succ) : ""); } else { $resultMessage = lang("success archive objects", $succ); } ajx_add("overview-panel", "reload"); break; default: if ($action) { $resultMessage = lang("Unimplemented action: '" . $action . "'"); // if $resultCode = 2; } break; } // switch return array("errorMessage" => $resultMessage, "errorCode" => $resultCode); }
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)) { $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(); if($event->getSpecialID() != ""){ $this->sync_calendar_extern($event); } $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(); $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"); } catch(Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if } // edit
function edit_timeslot() { if (!can_add(logged_user(), active_context(), Timeslots::instance()->getObjectTypeId())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_current("empty"); $timeslot_data = array_var($_POST, 'timeslot'); $timeslot = Timeslots::findById(array_var($timeslot_data, 'id', 0)); if (!$timeslot instanceof Timeslot) { flash_error(lang('timeslot dnx')); return; } try { $hoursToAdd = array_var($timeslot_data, 'hours', 0); $minutes = array_var($timeslot_data, 'minutes', 0); if (strpos($hoursToAdd, ',') && !strpos($hoursToAdd, '.')) { $hoursToAdd = str_replace(',', '.', $hoursToAdd); } if (strpos($hoursToAdd, ':') && !strpos($hoursToAdd, '.')) { $pos = strpos($hoursToAdd, ':') + 1; $len = strlen($hoursToAdd) - $pos; $minutesToAdd = substr($hoursToAdd, $pos, $len); if (!strlen($minutesToAdd) <= 2 || !strlen($minutesToAdd) > 0) { $minutesToAdd = substr($minutesToAdd, 0, 2); } $mins = $minutesToAdd / 60; $hours = substr($hoursToAdd, 0, $pos - 1); $hoursToAdd = $hours + $mins; } if ($minutes) { $min = str_replace('.', '', $minutes / 6); $hoursToAdd = $hoursToAdd + ("0." . $min); } if ($hoursToAdd <= 0) { flash_error(lang('time has to be greater than 0')); return; } $startTime = getDateValue(array_var($timeslot_data, 'date')); $startTime = $startTime->add('h', 8 - logged_user()->getTimezone()); $endTime = getDateValue(array_var($timeslot_data, 'date')); $endTime = $endTime->add('h', 8 - logged_user()->getTimezone() + $hoursToAdd); $timeslot_data['start_time'] = $startTime; $timeslot_data['end_time'] = $endTime; $timeslot_data['name'] = $timeslot_data['description']; //Only admins can change timeslot user if (array_var($timeslot_data, 'contact_id', false) && !logged_user()->isAdministrator()) { $timeslot_data['contact_id'] = $timeslot->getContactId(); } $timeslot->setFromAttributes($timeslot_data); $user = Contacts::findById($timeslot_data['contact_id']); $billing_category_id = $user->getDefaultBillingId(); $bc = BillingCategories::findById($billing_category_id); if ($bc instanceof BillingCategory) { $timeslot->setBillingId($billing_category_id); $hourly_billing = $bc->getDefaultValue(); $timeslot->setHourlyBilling($hourly_billing); $timeslot->setFixedBilling($hourly_billing * $hoursToAdd); $timeslot->setIsFixedBilling(false); } DB::beginWork(); $timeslot->save(); $member_ids = json_decode(array_var($_POST, 'members', '')); if ($member_ids && count($member_ids)) { ajx_add("time-panel", "reload"); } else { foreach (active_context() as $dimension) { $names[] = $dimension->getName(); } flash_error(lang('select member to add timeslots', implode(", ", $names))); //flash_error(lang('must choose at least one member')); DB::rollback(); return; } $object_controller = new ObjectController(); $object_controller->add_to_members($timeslot, $member_ids); DB::commit(); ajx_extra_data(array("timeslot" => $timeslot->getArrayInfo())); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // try }
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 }
/** * Resolve action to perform * * @param string $action * @param array $attributes * @return string $message */ private function resolveAction($action, $attributes) { $resultMessage = ""; $resultCode = 0; switch ($action) { case "delete": $err = 0; $succ = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if ($email instanceof MailContent && $email->canDelete(logged_user())) { if ($email->getState() == 2) { // we are deleting a draft email $emails_in_conversation = array($email); } else { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } } foreach ($emails_in_conversation as $email) { if ($email->canDelete(logged_user())) { try { $email->trash(); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TRASH); $succ++; } catch (Exception $e) { $err++; } } else { $err++; } } } else { $err++; } break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error delete objects", $err) . "<br />" . ($succ > 0 ? lang("success delete objects", $succ) : ""); } else { $resultMessage = lang("success delete objects", $succ); } ajx_add("overview-panel", "reload"); break; case "unclassify": for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email) && !$email->isDeleted() && $email->canEdit(logged_user())) { $this->do_unclassify($email); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_TAG, false, null, true, $tag); $resultMessage = lang("success unclassify emails", count($attributes["ids"])); } break; default: $resultMessage = "Unimplemented type: '" . $type . "'"; $resultCode = 2; break; } // switch } // for break; case "checkmail": $resultCheck = MailController::checkmail(); $resultMessage = $resultCheck[1]; // if $resultCode = $resultCheck[0]; ajx_add("overview-panel", "reload"); break; case "markAsRead": case "markAsUnRead": for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { $email->setIsRead(logged_user()->getId(), $action == 'markAsRead'); } } } break; default: $resultMessage = "Unimplemented type: '" . $type . "'"; $resultCode = 2; break; } // switch } // for ajx_add("overview-panel", "reload"); break; case "archive": $err = 0; $succ = 0; for ($i = 0; $i < count($attributes["ids"]); $i++) { $id = $attributes["ids"][$i]; $type = $attributes["types"][$i]; switch ($type) { case "email": $email = MailContents::findById($id); if (isset($email)) { if (user_config_option('show_emails_as_conversations', true, logged_user()->getId())) { $emails_in_conversation = MailContents::getMailsFromConversation($email); } else { $emails_in_conversation = array($email); } foreach ($emails_in_conversation as $email) { if ($email->canEdit(logged_user())) { try { $email->archive(null); ApplicationLogs::createLog($email, $email->getWorkspaces(), ApplicationLogs::ACTION_ARCHIVE); $succ++; } catch (Exception $e) { $err++; } } } } else { $err++; } break; default: $err++; break; } // switch } // for if ($err > 0) { $resultCode = 2; $resultMessage = lang("error archive objects", $err) . "<br />" . ($succ > 0 ? lang("success archive objects", $succ) : ""); } else { $resultMessage = lang("success archive objects", $succ); } ajx_add("overview-panel", "reload"); break; default: if ($action) { $resultMessage = "Unimplemented action: '" . $action . "'"; $resultCode = 2; } break; } // switch return array("errorMessage" => $resultMessage, "errorCode" => $resultCode); }
/** * Edit logged user profile. * Called with different POST format from "administration/users/edit user profile " and from "profile/edit my profile" * * @access public * @param void * @return null */ function edit_profile() { $user = Users::findById(get_id()); if (!$user instanceof User) { flash_error(lang('user dnx')); ajx_current("empty"); return; } // if $company = $user->getCompany(); if (!$company instanceof Company) { flash_error(lang('company dnx')); ajx_current("empty"); return; } // if if (!$user->canUpdateProfile(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $redirect_to = array_var($_GET, 'redirect_to'); if (trim($redirect_to) == '' || !is_valid_url($redirect_to)) { $redirect_to = $user->getCardUrl(); } // if tpl_assign('redirect_to', null); $user_data = array_var($_POST, 'user'); if (!is_array($user_data)) { $user_data = array('username' => $user->getUsername(), 'email' => $user->getEmail(), 'display_name' => $user->getDisplayName(), 'title' => $user->getTitle(), 'timezone' => $user->getTimezone(), 'auto_assign' => $user->getAutoAssign(), 'company_id' => $user->getCompanyId(), 'is_admin' => $user->isAdministrator(), 'type' => $user->getType()); // array } // if tpl_assign('user', $user); tpl_assign('company', $company); tpl_assign('user_data', $user_data); tpl_assign('billing_categories', BillingCategories::findAll()); if (is_array(array_var($_POST, 'user'))) { if (array_var($user_data, 'company_id') && !Companies::findById(array_var($user_data, 'company_id')) instanceof Company) { ajx_current("empty"); flash_error(lang("company dnx")); return; } try { DB::beginWork(); $user->setDisplayName(array_var($user_data, 'display_name')); $user->setEmail(array_var($user_data, 'email')); $user->setType(array_var($user_data, 'type')); $user->setTimezone(array_var($user_data, 'timezone')); $user->setTitle(array_var($user_data, 'title')); $user->setUpdatedOn(DateTimeValueLib::now()); if (logged_user()->isAdministrator()) { if ($user->getId() != 1) { // System admin cannot change it's company $user->setCompanyId(array_var($user_data, 'company_id')); } $user->setDefaultBillingId(array_var($user_data, 'default_billing_id')); $user->setUsername(array_var($user_data, 'username')); $project = Projects::findById(array_var($user_data, 'personal_project_id')); if ($project instanceof Project && $user->getPersonalProjectId() != $project->getId()) { $user->setPersonalProjectId($project->getId()); $project_user = ProjectUsers::findById(array('project_id' => $project->getId(), 'user_id' => $user->getId())); if (!$project_user) { $project_user = new ProjectUser(); $project_user->setUserId($user->getId()); $project_user->setProjectId($project->getId()); } $project_user->setAllPermissions(true); $project_user->save(); } } $user->save(); $autotimezone = array_var($user_data, 'autodetect_time_zone', null); if ($autotimezone !== null) { set_user_config_option('autodetect_time_zone', $autotimezone, $user->getId()); } $object_controller = new ObjectController(); $object_controller->add_custom_properties($user); if ($user->getId() != 1) { //System admin cannot change its own admin status if ($user->getType() == 'admin') { if ($user->getCompanyId() != owner_company()->getId()) { // external users can't be admins => set as Normal $user->setType('normal'); $user->setAsAdministrator(false); } else { $user->setAsAdministrator(true); } } else { $user->setAsAdministrator(false); } } DB::commit(); flash_success(lang('success update profile')); ajx_current("back"); ajx_add("overview-panel", "reload"); } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } // try } // if }