static function getWorkspaces($limit = 10) { $ws_dim = Dimensions::findByCode('workspaces'); $ws_object_type = self::instance()->getObjectTypeId(); $sql = "dimension_id = " . $ws_dim->getId() . " AND object_type_id = {$ws_object_type}"; $allowed_members = array(); $add_ctx_members = true; $context = active_context(); foreach ($context as $selection) { if ($selection instanceof Dimension && $selection->getCode() == 'workspaces') { $add_ctx_members = false; } else { if ($selection instanceof Member && $selection->getObjectTypeId() == $ws_object_type) { $allowed_members[] = $selection->getId(); } } } if ($add_ctx_members && count($allowed_members) > 0) { $sql .= " AND parent_member_id IN (" . implode(",", $allowed_members) . ")"; } else { $sql .= " AND parent_member_id = 0"; } $members = Members::findAll(array('conditions' => $sql, 'order' => 'name')); $res = array(); foreach ($members as $mem) { // controlar permissos para cada f*****g miembro } return $members; }
function workspaces_total_task_timeslots_group_by_criterias($args, &$ret) { $wdimension = Dimensions::findByCode('workspaces'); $tdimension = Dimensions::findByCode('tags'); $ret[] = array('val' => 'dim_' . $wdimension->getId(), 'name' => $wdimension->getName()); $ret[] = array('val' => 'dim_' . $tdimension->getId(), 'name' => $tdimension->getName()); }
function workspaces_update_5_6() { // create associations DB::execute("\n\t\t\tINSERT INTO `" . TABLE_PREFIX . "dimension_member_associations` (`dimension_id`,`object_type_id`,`associated_dimension_id`, `associated_object_type_id`, `is_required`,`is_multiple`, `keeps_record`) VALUES\n\t\t\t((SELECT id from " . TABLE_PREFIX . "dimensions WHERE code = 'workspaces'),(SELECT id FROM " . TABLE_PREFIX . "object_types WHERE name = 'workspace'),(SELECT id from " . TABLE_PREFIX . "dimensions WHERE code = 'feng_persons'),(SELECT id FROM " . TABLE_PREFIX . "object_types WHERE name = 'person' LIMIT 1),0,1,0),\n\t\t\t((SELECT id from " . TABLE_PREFIX . "dimensions WHERE code = 'workspaces'),(SELECT id FROM " . TABLE_PREFIX . "object_types WHERE name = 'workspace'),(SELECT id from " . TABLE_PREFIX . "dimensions WHERE code = 'feng_persons'),(SELECT id FROM " . TABLE_PREFIX . "object_types WHERE name = 'company' LIMIT 1),0,1,0);\n\t\t"); // instantiate actual associations $ws_dim = Dimensions::findByCode('workspaces'); $ws_ot = ObjectTypes::findByName('workspace'); $ws_members = Members::findAll(array('conditions' => 'dimension_id = ' . $ws_dim->getId() . ' AND object_type_id = ' . $ws_ot->getId())); foreach ($ws_members as $ws_mem) { // after saving permissions the associations are instantiated by 'core_dimensions' plugin save_member_permissions($ws_mem); } }
function mail_allowed_subscribers($object, &$contacts) { if ($object instanceof MailContent) { $person_dim = Dimensions::findByCode('feng_persons'); $person_dim_id = $person_dim instanceof Dimension ? $person_dim->getId() : "0"; $sql = "SELECT member_id FROM ".TABLE_PREFIX."object_members om INNER JOIN ".TABLE_PREFIX."members m ON m.id=om.member_id WHERE om.object_id = ".$object->getId()." AND om.is_optimization=0 AND m.dimension_id NOT IN (".$person_dim_id.")"; $member_ids_res = DB::executeAll($sql); $member_ids = array(); foreach ($member_ids_res as $row) { if (trim($row['member_id']) != "") $member_ids[] = $row['member_id']; } if (!$member_ids || count($member_ids) == 0) { $contacts = array(logged_user()); } } }
function list_all() { ajx_current("empty"); // Get all variables from request $start = array_var($_GET, 'start', 0); $limit = array_var($_GET, 'limit', config_option('files_per_page')); $order = 'name'; $order_dir = array_var($_GET, 'dir'); $action = array_var($_GET, 'action'); $attributes = array("ids" => explode(',', array_var($_GET, 'ids'))); if (!$order_dir) { switch ($order) { case 'name': $order_dir = 'ASC'; break; default: $order_dir = 'DESC'; } } $dim_controller = new DimensionController(); $members = $dim_controller->initial_list_dimension_members(Dimensions::findByCode('workspaces')->getId(), ObjectTypes::findByName('workspace')->getId(), $context, true); $ids = array(); foreach ($members as $m) { $ids[] = $m['object_id']; } $members = active_context_members(false); // Context Members Ids $members_sql = ""; if (count($members) > 0) { $members_sql .= " AND parent_member_id IN (" . implode(',', $members) . ")"; } else { $members_sql .= " AND parent_member_id = 0"; } $res = Members::findAll(array("conditions" => "object_id IN (" . implode(',', $ids) . ") " . $members_sql, 'offset' => $start, 'limit' => $limit, 'order' => "{$order} {$order_dir}")); $object = $this->prepareObject($res, $start, $limit, count($res)); ajx_extra_data($object); tpl_assign("listing", $object); }
function workspaces_quickadd_extra_fields($parameters) { if (array_var($parameters, 'dimension_id') == Dimensions::findByCode("workspaces")->getId()) { $parent_member = Members::findById(array_var($parameters, 'parent_id')); if ($parent_member instanceof Member && $parent_member->getObjectId() > 0) { $dimension_object = Objects::findObject($parent_member->getObjectId()); $fields = $dimension_object->manager()->getPublicColumns(); $color_columns = array(); foreach ($fields as $f) { if ($f['type'] == DATA_TYPE_WSCOLOR) { $color_columns[] = $f['col']; } } foreach ($color_columns as $col) { foreach ($fields as &$f) { if ($f['col'] == $col && $dimension_object->columnExists($col)) { $color_code = $dimension_object->getColumnValue($col); echo '<input type="hidden" name="dim_obj['.$col.']" value="'.$color_code.'" />'; } } } } } }
static function reloadPersonsDimension() { if (Plugins::instance()->isActivePlugin('core_dimensions')) { $person_dim = Dimensions::findByCode('feng_persons'); if ($person_dim instanceof Dimension) { evt_add('reload dimension tree', $person_dim->getId()); } } }
function modifyMemberValidations($member) { if ($member instanceof Member) { $member->add_skip_validation('uniqueness of parent - name'); } else { if ($this->getId() > 0 && Plugins::instance()->isActivePlugin('core_dimensions')) { $dim = Dimensions::findByCode('feng_persons'); if ($dim instanceof Dimension) { $m = Members::findByObjectId($this->getId(), $dim->getId()); if ($m instanceof Member) { $m->add_skip_validation('uniqueness of parent - name'); } } } } }
if (value) { var parent = 0 ; var create_user = ( container.find('input[name="contact[user][create-user]"]').is(':checked') ) ?'on':'' ; //var password = container.find('input[name="contact[user][password]"]').val(); //var password_a =container.find('input[name="contact[user][password_a]"]').val(); var mail = container.find('input[name="contact[email]"]').val(); var user_type = container.find('select[name="contact[user][type]"] option:selected').val(); var company_id = container.find('select[name="contact[user][company_id]"] option:selected').val(); var postVars = { 'member[object_type_id]': <?php echo ObjectTypes::findByName('person')->getId()?> , 'member[name]': value, 'member[parent_member_id]' : parent, 'member[dimension_id]': <?php echo Dimensions::findByCode('feng_persons')->getId()?>, 'contact[email]': mail, 'contact[user][create-user]' : create_user, 'contact[user][type]': user_type, 'contact[user][company_id]': company_id }; var firstName = ''; var surname = ''; var nameParts = value.split(' '); if (nameParts && nameParts.length > 1) { for ( var i in nameParts ){ if (i == "remove") continue; var word = $.trim(nameParts[i]); if (word ) { if (!firstName) {
'date_format': <?php echo json_encode(user_config_option('date_format')) ?>, 'date_format_tip': <?php echo json_encode(date_format_tip(user_config_option('date_format'))) ?>, 'start_monday': <?php echo user_config_option('start_monday') ? '1' : '0' ?>, 'draft_autosave_timeout': <?php echo json_encode(user_config_option('draft_autosave_timeout')) ?>, 'drag_drop_prompt': <?php echo json_encode(user_config_option('drag_drop_prompt')) ?>, 'mail_drag_drop_prompt': <?php echo json_encode(user_config_option('mail_drag_drop_prompt')) ?>, 'access_member_after_add': <?php echo user_config_option('access_member_after_add') ? '1' : '0' ?>, 'access_member_after_add_remember': <?php echo user_config_option('access_member_after_add_remember') ? '1' : '0' ?>, 'listing_preferences': [] }; <?php $listing_preferences = ContactConfigOptions::getOptionsByCategoryName('listing preferences'); foreach ($listing_preferences as $lp) { if (str_starts_with($lp->getName(), 'lp_dim_')) { $dcode = str_replace('lp_dim_', '', str_replace('_show_as_column', '', $lp->getName())); $dim = Dimensions::findByCode($dcode); ?>og.preferences['listing_preferences']['<?php echo 'lp_dim_'.$dim->getId().'_show_as_column' ?>'] = <?php echo user_config_option($lp->getName()) ? '1' : '0'?>;<?php } } ?> og.breadcrumbs_skipped_dimensions = []; Ext.Ajax.timeout = <?php echo get_max_execution_time()*1100 // give a 10% margin to PHP's timeout ?>; og.musicSound = new Sound(); og.systemSound = new Sound(); var quickAdd = new og.QuickAdd({renderTo:'quickAdd'}); <?php if (!defined('DISABLE_JS_POLLING') || !DISABLE_JS_POLLING) { ?> setInterval(function() { og.openLink(og.getUrl('object', 'popup_reminders'), {
function core_dimensions_quickadd_extra_fields($parameters) { if (array_var($parameters, 'dimension_id') == Dimensions::findByCode("feng_persons")->getId()) { tpl_display(PLUGIN_PATH."/core_dimensions/templates/quickadd_extra_fields.php"); } }
private function list_members($request) { $service = $request['srv']; $members = array(); $type = ObjectTypes::instance()->findByName($service); $typeId = $type->getId(); $ids = array(); $dimensionController = new DimensionController(); foreach ($dimensionController->initial_list_dimension_members(Dimensions::findByCode('customer_project')->getId(), $typeId) as $member) { $ids[] = $member['object_id']; } if (count($ids)) { $args['conditions'] = " `object_id` IN (" . implode(",", $ids) . ") AND object_type_id = {$typeId}"; foreach (Members::instance()->findAll($args) as $member) { /* @var $member Member */ $memberInfo = array('id' => $member->getId(), 'name' => $member->getName(), 'type' => $service, 'path' => $member->getPath()); $members[] = $memberInfo; } } return $this->response('json', $members); }
/** * Returns true if $user can delete this email * * @param Contact $user * @return boolean */ function canDelete(Contact $user) { $account = $this->getAccount(); $members = $this->getMembers(); $persons_dim = Dimensions::findByCode('feng_persons'); $tmp = array(); foreach ($members as $m) { if (!$persons_dim instanceof Dimension || $m->getDimensionId() != $persons_dim->getId()) { $tmp[] = $m; } } $members = $tmp; if ($account instanceof MailAccount) { // if classified if (count($members) > 0) { return $account->getContactId() == logged_user()->getId() || can_delete($user, $members, $this->getObjectTypeId()); } else { $macs = MailAccountContacts::instance()->count(array('`account_id` = ? AND `contact_id` = ? AND `can_edit` = 1', $account->getId(), $user->getId())); return $account->getContactId() == logged_user()->getId() || $macs > 0; } } else { // if classified return can_delete($user, $members, $this->getObjectTypeId()); } }
/** * Returns a list of emails according to the requested parameters * * @param string $tag * @param array $attributes * @param Project $project * @return array */ function getEmails($account_id = null, $state = null, $read_filter = "", $classif_filter = "", $context = null, $start = null, $limit = null, $order_by = 'received_date', $dir = 'ASC', $join_params = null, $archived = false, $conversation_list = null, $only_count_result = false) { $mailTablePrefix = "e"; if (!$limit) { $limit = user_config_option('mails_per_page') ? user_config_option('mails_per_page') : config_option('files_per_page'); } $accountConditions = ""; // Check for accounts $accountConditions = ''; if (isset($account_id) && $account_id > 0) { //Single account $accountConditions = " AND {$mailTablePrefix}.account_id = " . DB::escape($account_id); } else { // show mails for all visible accounts and classified mails where logged_user has permissions so we don't filter by account_id /*// show emails from other accounts $macs = MailAccountContacts::instance()->getByContact(logged_user()); $acc_ids = array(0); foreach ($macs as $mac) $acc_ids[] = $mac->getAccountId(); // permission conditions $pgs = ContactPermissionGroups::getPermissionGroupIdsByContactCSV(logged_user()->getId()); if (trim($pgs == '')) $pgs = '0'; $perm_sql = "(SELECT count(*) FROM ".TABLE_PREFIX."sharing_table st WHERE st.object_id = $mailTablePrefix.object_id AND st.group_id IN ($pgs)) > 0"; // show mails for all visible accounts and classified mails where logged_user has permissions $accountConditions = " AND ($mailTablePrefix.account_id IN (" . implode(",", $acc_ids) . ") OR $perm_sql)";*/ } // Check for unclassified emails $classified = ''; if ($classif_filter != '' && $classif_filter != 'all') { $persons_dim = Dimensions::findByCode('feng_persons'); $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : "0"; $classified = "AND " . ($classif_filter == 'unclassified' ? "NOT " : ""); $classified .= "o.id IN (SELECT om.object_id FROM " . TABLE_PREFIX . "object_members om INNER JOIN " . TABLE_PREFIX . "members m ON m.id=om.member_id WHERE m.dimension_id<>{$persons_dim_id})"; } // if not filtering by account or classification then check that emails are classified or from one of my accounts if ($classified == '' && $accountConditions == '') { $macs = MailAccountContacts::instance()->getByContact(logged_user()); $acc_ids = array(0); foreach ($macs as $mac) { $acc_ids[] = $mac->getAccountId(); } $accountConditions = " AND ({$mailTablePrefix}.account_id IN (" . implode(',', $acc_ids) . ") OR EXISTS (\r\n\t\t\t\t\tSELECT om1.object_id FROM " . TABLE_PREFIX . "object_members om1 \r\n\t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "members m1 ON m1.id=om1.member_id \r\n\t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "dimensions d1 ON d1.id=m1.dimension_id \r\n\t\t\t\t\tWHERE om1.object_id={$mailTablePrefix}.object_id AND d1.is_manageable=1) ) "; } // Check for draft, junk, etc. emails if ($state == "draft") { $stateConditions = " {$mailTablePrefix}.state = '2'"; } else { if ($state == "sent") { $stateConditions = " {$mailTablePrefix}.state IN ('1','3','5')"; } else { if ($state == "received") { $stateConditions = " {$mailTablePrefix}.state IN ('0','5')"; } else { if ($state == "junk") { $stateConditions = " {$mailTablePrefix}.state = '4'"; } else { if ($state == "outbox") { $stateConditions = " {$mailTablePrefix}.state >= 200"; } else { $stateConditions = ""; } } } } } // Check read emails if ($read_filter != "" && $read_filter != "all") { if ($read_filter == "unread") { $read = "AND NOT "; $subread = "AND NOT mc."; } else { $read = "AND "; $subread = "AND mc."; } $read2 = "id IN (SELECT rel_object_id FROM " . TABLE_PREFIX . "read_objects t WHERE contact_id = " . logged_user()->getId() . " AND id = t.rel_object_id AND t.is_read = '1')"; $read .= $read2; $subread .= $read2; } else { $read = ""; $subread = ""; } $conversation_cond = ""; $box_cond = "AND {$stateConditions}"; if (isset($conversation_list) && $conversation_list > 0) { $conversation_cond = "AND e.conversation_last = 1"; } $extra_conditions = "{$accountConditions} {$classified} {$read} {$conversation_cond} {$box_cond}"; Hook::fire("listing_extra_conditions", null, $extra_conditions); return self::instance()->listing(array('limit' => $limit, 'start' => $start, 'order' => $order_by, 'order_dir' => $dir, 'extra_conditions' => $extra_conditions, 'count_results' => false, 'only_count_results' => $only_count_result, 'join_params' => $join_params)); }
function quick_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; } ajx_current("empty"); $task = new ProjectTask(); $task_data = array_var($_POST, 'task'); $parent_id = array_var($task_data, 'parent_id', 0); $parent = ProjectTasks::findById($parent_id); if (is_array($task_data)) { $task_data['due_date'] = getDateValue(array_var($task_data, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($task_data, 'task_start_date')); if ($task_data['due_date'] instanceof DateTimeValue) { $duetime = getTimeValue(array_var($task_data, '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($task_data, '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); } 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(); $task->setFromAttributes($task_data); if (array_var($task_data, 'is_completed', false) == 'true') { $task->setCompletedOn(DateTimeValueLib::now()); $task->setCompletedById(logged_user()->getId()); } try { DB::beginWork(); $task->save(); $totalMinutes = array_var($task_data, 'hours') * 60 + array_var($task_data, 'minutes'); $task->setTimeEstimate($totalMinutes); $task->save(); $gb_member_id = array_var($task_data, 'member_id'); $member_ids = array(); $persons_dim = Dimensions::findByCode('feng_persons'); $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : 0; if ($parent) { if (count($parent->getMembers()) > 0) { foreach ($parent->getMembers() as $member) { if ($member->getDimensionId() != $persons_dim_id) { $member_ids[] = $member->getId(); } } } $task->setMilestoneId($parent->getMilestoneId()); $task->save(); } if (count($member_ids) == 0) { $member_ids = active_context_members(false); } if ($gb_member_id && is_numeric($gb_member_id)) { $member_ids[] = $gb_member_id; } $object_controller = new ObjectController(); $object_controller->add_to_members($task, $member_ids); //Add new work timeslot for this task // if (array_var($task_data,'hours') != '' && array_var($task_data,'hours') > 0){ // $hours = array_var($task_data, 'hours'); // $hours = - $hours; // // $timeslot = new Timeslot(); // $dt = DateTimeValueLib::now(); // $dt2 = DateTimeValueLib::now(); // $timeslot->setEndTime($dt); // $dt2 = $dt2->add('h', $hours); // $timeslot->setStartTime($dt2); // $timeslot->setContactId(logged_user()->getId()); // $timeslot->setObjectId($task->getId()); // $timeslot->save(); // } ApplicationLogs::createLog($task, ApplicationLogs::ACTION_ADD); $assignee = $task->getAssignedToContact(); if ($assignee instanceof Contact) { $task->subscribeUser($assignee); } // create default reminder $reminder = new ObjectReminder(); $reminder->setMinutesBefore(1440); $reminder->setType("reminder_email"); $reminder->setContext("due_date"); $reminder->setObject($task); $reminder->setUserId(0); $date = $task->getDueDate(); if (!isset($minutes)) { $minutes = 0; } if ($date instanceof DateTimeValue) { $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60); $reminder->setDate($rdate); } $reminder->save(); $subs = array(); if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) { $json_subtasks = json_decode(array_var($_POST, 'multi_assignment')); $line = 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++; } Hook::fire('save_subtasks', $task, $subtasks); $subtasks = ProjectTasks::findAll(array('conditions' => '`parent_id` = ' . DB::escape($task->getId()))); // findAll foreach ($subtasks as $sub) { $subs[] = $sub->getArrayInfo(); } } // subscribe $task->subscribeUser(logged_user()); DB::commit(); // notify asignee if (array_var($task_data, 'notify') == 'true') { try { Notifier::taskAssigned($task); } catch (Exception $e) { } // try } ajx_extra_data(array("task" => $task->getArrayInfo(), 'subtasks' => $subs)); flash_success(lang('success add task', $task->getObjectName())); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // try } // if }
function get_dimensions_for_properties() { if (!can_manage_dimension_members(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $dim_id = get_id(); $obj_type = get_id('otype'); $parent_id = get_id('parent'); if ($parent_id == 0) { $dim_obj_type = DimensionObjectTypes::findById(array('dimension_id' => $dim_id, 'object_type_id' => $obj_type)); if (!$dim_obj_type->getIsRoot()) { flash_error(lang('parent member must be selected to set properties')); ajx_current("empty"); return; } } $dimensions = array(); $associations_info = array(); $associations_info_tmp = array(); $member_parents = array(); $associations = DimensionMemberAssociations::getAssociatations($dim_id, $obj_type); foreach ($associations as $assoc) { if (Plugins::instance()->isActivePlugin('core_dimensions') && config_option('hide_people_vinculations')) { $persons_dim = Dimensions::findByCode('feng_persons'); if ($assoc->getAssociatedDimensionMemberAssociationId() == $persons_dim->getId()) { continue; } } $assoc_info = array('id' => $assoc->getId(), 'required' => $assoc->getIsRequired(), 'multi' => $assoc->getIsMultiple(), 'ot' => $assoc->getAssociatedObjectType()); $assoc_info['members'] = Members::getByDimensionObjType($assoc->getAssociatedDimensionMemberAssociationId(), $assoc->getAssociatedObjectType()); $ot = ObjectTypes::findById($assoc->getAssociatedObjectType()); $assoc_info['ot_name'] = $ot->getName(); if (!isset($associations_info_tmp[$assoc->getAssociatedDimensionMemberAssociationId()])) { $associations_info_tmp[$assoc->getAssociatedDimensionMemberAssociationId()] = array(); $dimensions[] = Dimensions::getDimensionById($assoc->getAssociatedDimensionMemberAssociationId()); } $associations_info_tmp[$assoc->getAssociatedDimensionMemberAssociationId()][] = $assoc_info; } // check for restrictions if ($parent_id > 0) { $parent = Members::findById($parent_id); $all_parents = $parent->getAllParentMembersInHierarchy(); $all_parent_ids = array($parent_id); foreach ($all_parents as $p) { $all_parent_ids[] = $p->getId(); } } else { $all_parent_ids = array(0); } $all_property_members = array(); foreach ($associations_info_tmp as $assoc_dim => $ot_infos) { foreach ($ot_infos as $info) { $restriction_defs = DimensionMemberRestrictionDefinitions::findAll(array("conditions" => "`dimension_id` = {$dim_id} AND `restricted_dimension_id` = {$assoc_dim} \r\n\t\t\t\t\tAND `restricted_object_type_id` = " . $info['ot'])); if (!is_array($restriction_defs) || count($restriction_defs) == 0) { // no restriction definitions => include all members $associations_info[$assoc_dim][] = $info; $restricted_dimensions[$assoc_dim] = false; } else { // restriction definition found => filter members $restricted_dimensions[$assoc_dim] = true; $restrictions = array(); $rest_members = array(); $conditions = ""; foreach ($restriction_defs as $rdef) { $conditions = "`restricted_member_id` IN (SELECT `id` FROM " . Members::instance()->getTableName(true) . " WHERE \r\n\t\t\t\t\t\t\t`object_type_id` = " . $rdef->getRestrictedObjectTypeId() . " AND `dimension_id` = {$assoc_dim}) AND `member_id` IN (" . implode(",", $all_parent_ids) . ")"; $restrictions[] = MemberRestrictions::findAll(array("conditions" => $conditions)); } $to_intersect = array(); foreach ($restrictions as $k => $rests) { $to_intersect[$k] = array(); foreach ($rests as $rest) { $to_intersect[$k][] = $rest->getRestrictedMemberId(); } if (count($to_intersect[$k]) == 0) { unset($to_intersect[$k]); } } $apply_filter = true; $intersection = array_var($to_intersect, 0, array()); if (count($to_intersect) > 1) { $k = 1; while ($k < count($to_intersect)) { $intersection = array_intersect($intersection, $to_intersect[$k++]); } } else { if (count($to_intersect) == 0) { // no restrictions found for members $apply_filter = false; } } if ($apply_filter) { $rest_members = Members::findAll(array("conditions" => "`id` IN (" . implode(",", $intersection) . ")")); } else { $rest_members = $info['members']; } $new_info = $info; $new_info['members'] = $rest_members; $associations_info[$assoc_dim][] = $new_info; foreach ($rest_members as $member) { if (!isset($member_parents[$assoc_dim])) { $member_parents[$assoc_dim] = array(); } if ($member->getParentMemberId() > 0) { $member_parents[$assoc_dim][$member->getId()] = $member->getParentMemberId(); } } } } } foreach ($associations_info as $assoc_dim => $ot_infos) { foreach ($ot_infos as $info) { foreach ($info['members'] as $mem) { $all_property_members[] = $mem->getId(); } } } // para cada $info['ot'] ver si en el resultado hay miembros que los restringen foreach ($associations_info as $assoc_dim => &$ot_infos) { foreach ($ot_infos as &$info) { $restriction_defs = DimensionMemberRestrictionDefinitions::findAll(array("conditions" => "`restricted_dimension_id` = {$assoc_dim} \r\n\t\t\t\t\tAND `restricted_object_type_id` = " . $info['ot'])); $restrictions = array(); foreach ($restriction_defs as $rdef) { $restrictions_tmp = MemberRestrictions::findAll(array("conditions" => "`member_id` IN (\r\n\t\t\t\t\t\tSELECT `id` FROM " . Members::instance()->getTableName(true) . " WHERE `dimension_id` = " . $rdef->getDimensionId() . " AND `object_type_id` = " . $rdef->getObjectTypeId() . " AND `id` IN (" . implode(",", $all_property_members) . "))")); $restrictions = array_merge($restrictions, $restrictions_tmp); } $restricted_ids = array(); if (count($restrictions) == 0) { continue; } foreach ($restrictions as $rest) { $restricted_ids[] = $rest->getRestrictedMemberId(); } $tmp = array(); foreach ($info['members'] as $rmem) { if (in_array($rmem->getId(), $restricted_ids)) { $tmp[] = $rmem; } } $info['members'] = $tmp; } } $req_dimensions = array(); foreach ($associations_info as $assoc_dim => &$ot_infos) { $required_count = 0; foreach ($ot_infos as &$info) { if ($info['required']) { $required_count++; } } $req_dimensions[$assoc_dim] = $required_count > 0; } $member_id = get_id('mem_id'); $actual_associations_info = array(); if ($member_id > 0) { // actual associations $actual_associations = MemberPropertyMembers::getAssociatedPropertiesForMember($member_id); foreach ($actual_associations as $actual_assoc) { $actual_associations_info[$actual_assoc->getPropertyMemberId()] = true; } } tpl_assign('genid', array_var($_GET, 'genid')); tpl_assign('dimensions', $dimensions); tpl_assign('associations', $associations_info); tpl_assign('actual_associations', $actual_associations_info); tpl_assign('req_dimensions', $req_dimensions); tpl_assign('restricted_dimensions', isset($restricted_dimensions) ? $restricted_dimensions : array()); ajx_extra_data(array('parents' => $member_parents, 'genid' => array_var($_GET, 'genid'))); $this->setTemplate('dim_properties'); }
/** * @abstract Archives the member and its submembers (including content objects) * @param user Contact * @return Returns the total number of archived objects * @author Alvaro Torterola - alvaro.torterola@fengoffice.com */ function archive($user) { if (!$user instanceof Contact) { return 0; } $person_dim = Dimensions::findByCode('feng_persons'); $person_dim_cond = $person_dim instanceof Dimension ? " AND m2.dimension_id<>" . $person_dim->getId() : ""; // archive objects that dont belong to other unarchived members $sql = "SELECT om.object_id FROM " . TABLE_PREFIX . "object_members om INNER JOIN " . TABLE_PREFIX . "objects o ON o.id=om.object_id \n\t\t\t\tWHERE om.member_id=" . $this->getId() . " AND o.archived_by_id=0 AND NOT EXISTS (\n\t\t\t\t SELECT member_id FROM " . TABLE_PREFIX . "object_members om2 INNER JOIN " . TABLE_PREFIX . "members m2 ON m2.id=om2.member_id\n\t\t\t\t WHERE m2.archived_by_id=0 AND om2.object_id=om.object_id AND om2.member_id<>om.member_id" . $person_dim_cond . "\n\t\t\t\t);"; $object_ids = DB::executeAll($sql); $count = 0; foreach ($object_ids as $row) { $content_object = Objects::findObject($row['object_id']); if ($content_object instanceof ContentDataObject) { $content_object->archive(); $count++; } } // Log archived objects DB::execute("INSERT INTO " . TABLE_PREFIX . "application_logs (taken_by_id, rel_object_id, object_name, created_on, created_by_id, action, is_private, is_silent, log_data)\n\t\t\tVALUES (" . $user->getId() . "," . $this->getId() . "," . DB::escape($this->getName()) . ",NOW()," . $user->getId() . ",'archive',0,1,'" . implode(',', array_flat($object_ids)) . "')"); $this->setArchivedById($user->getId()); $this->setArchivedOn(DateTimeValueLib::now()); $this->save(); $sub_members = $this->getAllChildren(); foreach ($sub_members as $sub_member) { if ($sub_member->getArchivedById() == 0) { $count += $sub_member->archive($user); } } return $count; }
/** * Lists all contacts and clients * */ function list_all() { ajx_current("empty"); // Get all variables from request $start = array_var($_GET, 'start', 0); $limit = array_var($_GET, 'limit', config_option('files_per_page')); $page = 1; if ($start > 0) { $page = $start / $limit + 1; } $order = array_var($_GET, 'sort'); $order_dir = array_var($_GET, 'dir'); $action = array_var($_GET, 'action'); $attributes = array("ids" => explode(',', array_var($_GET, 'ids')), "types" => explode(',', array_var($_GET, 'types')), "accountId" => array_var($_GET, 'account_id'), "viewType" => array_var($_GET, 'view_type')); //Resolve actions to perform $actionMessage = array(); if (isset($action)) { $actionMessage = $this->resolveAction($action, $attributes); if ($actionMessage["errorCode"] == 0) { flash_success($actionMessage["errorMessage"]); } else { flash_error($actionMessage["errorMessage"]); } } $extra_conditions = ""; if ($attributes['viewType'] == 'contacts') { $extra_conditions = 'AND `is_company` = 0'; } else { if ($attributes['viewType'] == 'companies') { $extra_conditions = 'AND `is_company` = 1'; } } $extra_conditions .= " AND disabled = 0 "; switch ($order) { case 'updatedOn': $order = '`updated_on`'; break; case 'createdOn': $order = '`created_on`'; break; case 'name': $order = ' concat(surname, first_name) '; break; default: $order = '`name`'; break; } if (!$order_dir) { switch ($order) { case 'name': $order_dir = 'ASC'; break; default: $order_dir = 'DESC'; } } $context = active_context(); if (context_type() == 'mixed') { // There are members selected //$content_objects = Contacts::getContentObjects($context, ObjectTypes::findById(Contacts::instance()->getObjectTypeId()), $order, $order_dir, $extra_conditions, null, false,false, $start, $limit); $content_objects = Contacts::instance()->listing(array("order" => $order, "order_dir" => $order_dir, "extra_conditions" => $extra_conditions, "start" => $start, "limit" => $limit)); } else { // Estoy parado en 'All'. Filtro solo por permisos TODO: Fix this ! $conditions = "archived_on = '0000-00-00 00:00:00' AND trashed_on = '0000-00-00 00:00:00' {$extra_conditions}"; $content_objects = new stdClass(); $content_objects->objects = Contacts::instance()->findAll(array("conditions" => $conditions, "order" => "{$order} {$order_dir}", "offset" => $start, "limit" => $limit)); $content_objects->total = Contacts::instance()->count(array("conditions" => $conditions)); foreach ($content_objects->objects as $k => $contact) { /* @var $contact Contact */ if (Plugins::instance()->isActivePlugin("core_dimensions")) { $m = array_var(Members::instance()->findByObjectId($contact->getId(), Dimensions::findByCode("feng_persons")->getId()), 0); if ($m instanceof Member) { $mid = $m->getId(); if (!ContactMemberPermissions::instance()->contactCanReadMember(logged_user()->getPermissionGroupId(), $mid, logged_user())) { unset($content_objects->objects[$k]); $content_objects->total--; } } } } $content_objects->objects = array_values($content_objects->objects); } // Prepare response object $object = $this->newPrepareObject($content_objects->objects, $content_objects->total, $start, $attributes); ajx_extra_data($object); tpl_assign("listing", $object); }
private function getMailProperties($msg, $i = 0) { $text = $msg->getTextBody(); // plain body is already converted to UTF-8 (when mail was saved) if (strlen_utf($text) > 150) { $text = substr_utf($text, 0, 150) . "..."; } $show_as_conv = user_config_option('show_emails_as_conversations'); if ($show_as_conv) { $conv_total = MailContents::countMailsInConversation($msg); $conv_unread = MailContents::countUnreadMailsInConversation($msg); $conv_hasatt = MailContents::conversationHasAttachments($msg); } //if the variable is not set, make the query and set it. //seba // Comented by php TODO: Feng 2 context/members /* if(!isset($this->user_workspaces_ids)){ $sql = logged_user()->getWorkspacesQuery(); $rows = DB::executeAll($sql); if (count($rows)== 0) $this->user_workspaces_ids = "0"; else{ foreach ($rows as $row){ if ($this->user_workspaces_ids != "") $this->user_workspaces_ids .= ","; $this->user_workspaces_ids .= $row['project_id']; } } }*/ /* @var $msg MailContent */ $persons_dim = Dimensions::findByCode('feng_persons'); $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : "0"; $mail_member_ids = array_flat(DB::executeAll("SELECT om.member_id FROM " . TABLE_PREFIX . "object_members om\r\n\t\t\t\tINNER JOIN " . TABLE_PREFIX . "members m ON m.id=om.member_id \r\n\t\t\t\tWHERE om.object_id = '" . $msg->getId() . "' AND om.is_optimization = 0 AND m.dimension_id<>{$persons_dim_id}")); $properties = array("id" => $msg->getId(), "ix" => $i, "object_id" => $msg->getId(), "ot_id" => $msg->getObjectTypeId(), "type" => 'email', "hasAttachment" => $msg->getHasAttachments(), "accountId" => $msg->getAccountId(), "accountName" => $msg->getAccount() instanceof MailAccount ? $msg->getAccount()->getName() : lang('n/a'), "subject" => $msg->getSubject(), "text" => $text, "date" => $msg->getReceivedDate() instanceof DateTimeValue ? $msg->getReceivedDate()->isToday() ? format_time($msg->getReceivedDate()) : format_datetime($msg->getReceivedDate()) : lang('n/a'), "userId" => $msg->getAccount() instanceof MailAccount && $msg->getAccount()->getOwner() instanceof Contact ? $msg->getAccount()->getOwner()->getId() : 0, "userName" => $msg->getAccount() instanceof MailAccount && $msg->getAccount()->getOwner() instanceof Contact ? $msg->getAccount()->getOwner()->getObjectName() : lang('n/a'), "isRead" => $show_as_conv ? $conv_unread == 0 : $msg->getIsRead(logged_user()->getId()), "from" => $msg->getFromName() != '' ? $msg->getFromName() : $msg->getFrom(), "from_email" => $msg->getFrom(), "isDraft" => $msg->getIsDraft(), "isSent" => $msg->getIsSent(), "folder" => $msg->getImapFolderName(), "to" => $msg->getTo(), "memPath" => json_encode($msg->getMembersIdsToDisplayPath()), "memberIds" => implode(",", $mail_member_ids)); if ($show_as_conv) { $properties["conv_total"] = $conv_total; $properties["conv_unread"] = $conv_unread; $properties["conv_hasatt"] = $conv_hasatt; } return $properties; }
function core_dimensions_quickadd_extra_fields($dimId) { if ($dimId == Dimensions::findByCode("feng_persons")->getId()) { tpl_display(PLUGIN_PATH . "/core_dimensions/templates/quickadd_extra_fields.php"); } }
function import_google_calendar() { $users_cal = ExternalCalendarUsers::findAll(); if (count($users_cal) > 0) { foreach ($users_cal as $users) { $contact = Contacts::findById($users->getContactId()); $calendars = ExternalCalendars::findByExtCalUserId($users->getId()); require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata'); Zend_Loader::loadClass('Zend_Gdata_AuthSub'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $user = $users->getAuthUser(); $pass = $users->getAuthPass(); $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; try { $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service); $gdataCal = new Zend_Gdata_Calendar($client); //update or insert events for calendars foreach ($calendars as $calendar) { //check the deleted calendars $delete_calendar = true; $calFeed = $gdataCal->getCalendarListFeed(); foreach ($calFeed as $calF) { $cal_src = explode("/", $calF->content->src); array_pop($cal_src); $calendar_visibility = end($cal_src); array_pop($cal_src); $calendar_user = end($cal_src); if ($calendar_user == $calendar->getCalendarUser()) { $delete_calendar = false; } } if (!$delete_calendar) { $calendar_user = $calendar->getCalendarUser(); $calendar_visibility = $calendar->getCalendarVisibility(); $query = $gdataCal->newEventQuery(); $query->setUser($calendar_user); $query->setVisibility($calendar_visibility); $query->setSingleEvents(true); $query->setProjection('full'); // execute and get results $event_list = $gdataCal->getCalendarEventFeed($query); $array_events_google = array(); foreach ($event_list as $event) { $event_id = explode("/", $event->id->text); $special_id = end($event_id); $event_name = lang("untitle event"); if ($event->title->text != "") { $event_name = $event->title->text; } $array_events_google[] = $special_id; $new_event = ProjectEvents::findBySpecialId($special_id); if ($new_event) { if ($new_event->getUpdateSync() instanceof DateTimeValue && strtotime(ProjectEvents::date_google_to_sql($event->updated)) > $new_event->getUpdateSync()->getTimestamp()) { $start = strtotime(ProjectEvents::date_google_to_sql($event->when[0]->startTime)); $fin = strtotime(ProjectEvents::date_google_to_sql($event->when[0]->endTime)); if ($fin - $start == 86400) { $new_event->setStart(date("Y-m-d H:i:s", $start)); $new_event->setDuration(date("Y-m-d H:i:s", $start)); $new_event->setTypeId(2); } elseif ($fin - $start > 86400) { $t_s = explode(' ', date("Y-m-d H:i:s", $start)); $t_f = explode(' ', date("Y-m-d H:i:s", $fin)); $date_s = new DateTimeValue(strtotime($t_s[0] . "00:00:00") - $contact->getTimezone() * 3600); $date_f = new DateTimeValue(strtotime($t_f[0] . "23:59:59 -1 day") - $contact->getTimezone() * 3600); $new_event->setStart(date("Y-m-d H:i:s", $date_s->getTimestamp())); $new_event->setDuration(date("Y-m-d H:i:s", $date_f->getTimestamp())); $new_event->setTypeId(2); } else { $new_event->setStart(ProjectEvents::date_google_to_sql($event->when[0]->startTime)); $new_event->setDuration(ProjectEvents::date_google_to_sql($event->when[0]->endTime)); } $new_event->setObjectName($event_name); $new_event->setDescription($event->content->text); $new_event->setUpdateSync(ProjectEvents::date_google_to_sql($event->updated)); $new_event->setExtCalId($calendar->getId()); $new_event->save(); } } else { $new_event = new ProjectEvent(); $start = strtotime(ProjectEvents::date_google_to_sql($event->when[0]->startTime)); $fin = strtotime(ProjectEvents::date_google_to_sql($event->when[0]->endTime)); if ($fin - $start == 86400) { $new_event->setStart(date("Y-m-d H:i:s", $start)); $new_event->setDuration(date("Y-m-d H:i:s", $start)); $new_event->setTypeId(2); } elseif ($fin - $start > 86400) { $t_s = explode(' ', date("Y-m-d H:i:s", $start)); $t_f = explode(' ', date("Y-m-d H:i:s", $fin)); $date_s = new DateTimeValue(strtotime($t_s[0] . "00:00:00") - $contact->getTimezone() * 3600); $date_f = new DateTimeValue(strtotime($t_f[0] . "23:59:59 -1 day") - $contact->getTimezone() * 3600); $new_event->setStart(date("Y-m-d H:i:s", $date_s->getTimestamp())); $new_event->setDuration(date("Y-m-d H:i:s", $date_f->getTimestamp())); $new_event->setTypeId(2); } else { $new_event->setStart(ProjectEvents::date_google_to_sql($event->when[0]->startTime)); $new_event->setDuration(ProjectEvents::date_google_to_sql($event->when[0]->endTime)); $new_event->setTypeId(1); } $new_event->setObjectName($event_name); $new_event->setDescription($event->content->text); $new_event->setSpecialID($special_id); $new_event->setUpdateSync(ProjectEvents::date_google_to_sql($event->updated)); $new_event->setExtCalId($calendar->getId()); $new_event->save(); $conditions = array('event_id' => $new_event->getId(), 'contact_id' => $contact->getId()); //insert only if not exists if (EventInvitations::findById($conditions) == null) { $invitation = new EventInvitation(); $invitation->setEventId($new_event->getId()); $invitation->setContactId($contact->getId()); $invitation->setInvitationState($contact instanceof Contact && $contact->getId() == $contact->getId() ? 1 : 0); $invitation->save(); } //insert only if not exists if (ObjectSubscriptions::findBySubscriptions($new_event->getId(), $contact) == null) { $subscription = new ObjectSubscription(); $subscription->setObjectId($new_event->getId()); $subscription->setContactId($contact->getId()); $subscription->save(); } if ($users->getRelatedTo()) { $member = array(); $member_ids = explode(",", $users->getRelatedTo()); foreach ($member_ids as $member_id) { $member[] = $member_id; } $object_controller = new ObjectController(); $object_controller->add_to_members($new_event, $member); } else { $member_ids = array(); $context = active_context(); if (count($context) > 0) { foreach ($context as $selection) { if ($selection instanceof Member) { $member_ids[] = $selection->getId(); } } } if (count($member_ids) == 0 && $contact instanceof Contact) { $m = Members::findById($contact->getPersonalMemberId()); if (!$m instanceof Member) { $person_dim = Dimensions::findByCode('feng_persons'); if ($person_dim instanceof Dimension) { $member_ids = Members::findAll(array('id' => true, 'conditions' => array("object_id = ? AND dimension_id = ?", $contact->getId(), $person_dim->getId()))); } } else { $member_ids[] = $m->getId(); } } $object_controller = new ObjectController(); $object_controller->add_to_members($new_event, $member_ids, $contact); } } } // foreach event list //check the deleted events $events_delete = ProjectEvents::findByExtCalId($calendar->getId()); if ($events_delete) { foreach ($events_delete as $event_delete) { if (!in_array($event_delete->getSpecialID(), $array_events_google)) { $event_delete->trash(); $event_delete->setSpecialID(""); $event_delete->setExtCalId(0); $event_delete->save(); } } } } else { $events = ProjectEvents::findByExtCalId($calendar->getId()); if ($calendar->delete()) { if ($events) { foreach ($events as $event) { $event->trash(); $event->setSpecialID(""); $event->setExtCalId(0); $event->save(); } } } } } //foreach calendars } catch (Exception $e) { //Logger::log($e->getMessage()); } } } }
private function list_latest_active_members($request) { $service = $request['srv']; $members = array(); $type = ObjectTypes::instance()->findByName($service); $typeId = $type->getId(); if ($service == "workspace") { $dimension_id = Dimensions::findByCode('workspaces')->getId(); } else { $dimension_id = Dimensions::findByCode('customer_project')->getId(); } $ids = array(); $dimensionController = new DimensionController(); foreach ($dimensionController->latest_active_dimension_members($dimension_id, $typeId, null, user_config_option("mobile_logs_amount_to_search"), user_config_option("mobile_minimum_display_dimension_members"), user_config_option("mobile_maximum_display_dimension_members")) as $member) { $ids[] = $member['object_id']; } if (count($ids)) { $args['conditions'] = " `object_id` IN (" . implode(",", $ids) . ") AND object_type_id = {$typeId}"; $args['order'] = " name ASC"; foreach (Members::instance()->findAll($args) as $member) { /* @var $member Member */ $memberInfo = array('id' => $member->getId(), 'name' => $member->getName(), 'type' => $service, 'path' => $member->getPath()); $members[] = $memberInfo; } } return $this->response('json', $members); }
"); return; } var user_type = container.find('select[name="contact[user][type]"] option:selected').val(); var company_id = container.find('select[name="contact[user][company_id]"] option:selected').val(); var postVars = { 'member[object_type_id]': <?php echo ObjectTypes::findByName('person')->getId(); ?> , 'member[name]': value, 'member[parent_member_id]' : parent, 'member[dimension_id]': <?php echo Dimensions::findByCode('feng_persons')->getId(); ?> , 'contact[email]': mail, 'contact[user][create-user]' : create_user, 'contact[user][type]': user_type, 'contact[user][company_id]': company_id }; var firstName = ''; var surname = ''; var nameParts = value.split(' '); if (nameParts && nameParts.length > 1) { for ( var i in nameParts ){ if (i == "remove") continue; var word = $.trim(nameParts[i]);
<?php $limit = 5; $genid = gen_id(); $ws_dimension = Dimensions::findByCode('workspaces'); $dim_controller = new DimensionController(); $selected_ws = '0'; $allowed_members = array(); $add_ctx_members = true; $show_widget = true; $context = active_context(); if (isset($context)) { foreach ($context as $selection) { if ($selection instanceof Dimension && $selection->getCode() == 'workspaces') { $add_ctx_members = false; } else { if ($selection instanceof Member) { if ($selection->getObjectTypeId() == Workspaces::instance()->getObjectTypeId()) { $allowed_members[] = $selection->getId(); $selected_ws = $selection->getId(); } else { $show_widget = false; } } } } } if ($show_widget) { $extra_conditions = " AND parent_member_id " . ($add_ctx_members && count($allowed_members) > 0 ? "IN (" . implode(",", $allowed_members) . ")" : "=0"); $parent = null; $context = active_context();
function quick_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 { trim($notAllowedMember) == "" ? flash_error(lang('you must select where to keep', lang('the task'))) : flash_error(lang('no context permissions to add', lang("tasks"), $notAllowedMember)); } ajx_current("empty"); return; } ajx_current("empty"); $task = new ProjectTask(); $task_data = array_var($_POST, 'task'); $parent_id = array_var($task_data, 'parent_id', 0); $parent = ProjectTasks::findById($parent_id); if (is_array($task_data)) { $task_data['due_date'] = getDateValue(array_var($task_data, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($task_data, 'task_start_date')); if ($task_data['due_date'] instanceof DateTimeValue) { $duetime = getTimeValue(array_var($task_data, '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($task_data, '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); } 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_data['object_type_id'] = $task->getObjectTypeId(); $task->setFromAttributes($task_data); if (array_var($task_data, 'is_completed', false) == 'true') { $task->setCompletedOn(DateTimeValueLib::now()); $task->setCompletedById(logged_user()->getId()); } try { DB::beginWork(); $task->save(); $totalMinutes = array_var($task_data, 'hours') * 60 + array_var($task_data, 'minutes'); $task->setTimeEstimate($totalMinutes); $task->save(); $gb_member_ids = array_var($task_data, 'members'); $member_ids = array(); $persons_dim = Dimensions::findByCode('feng_persons'); $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : 0; if ($parent) { if (count($parent->getMembers()) > 0) { foreach ($parent->getMembers() as $member) { if ($member->getDimensionId() != $persons_dim_id) { $member_ids[] = $member->getId(); } } } $task->setMilestoneId($parent->getMilestoneId()); $task->save(); } if (count($member_ids) == 0) { $member_ids = active_context_members(false); } // get member ids if ($gb_member_ids && !empty($gb_member_ids)) { $member_ids = json_decode(array_var($task_data, 'members')); } $object_controller = new ObjectController(); $object_controller->add_to_members($task, $member_ids); $assignee = $task->getAssignedToContact(); $assignee_to_me = false; if ($assignee instanceof Contact) { $task->subscribeUser($assignee); //do not notify my self if ($assignee->getId() == logged_user()->getId()) { $assignee_to_me = true; } } // create default reminder by user config option if ($task->getDueDate() != null && user_config_option("add_task_default_reminder")) { $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(); } $subs = array(); if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) { $json_subtasks = json_decode(array_var($_POST, 'multi_assignment'), true); $subtasks = array(); $line = 0; if (is_array($json_subtasks)) { 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++; } } Hook::fire('save_subtasks', $task, $subtasks); $subtasks = ProjectTasks::findAll(array('conditions' => '`parent_id` = ' . DB::escape($task->getId()))); // findAll foreach ($subtasks as $sub) { $subs[] = $sub->getArrayInfo(); } } // subscribe $task->subscribeUser(logged_user()); //for calculate member status we save de task again after the object have the members $task->save(); DB::commit(); $isSailent = true; // notify asignee if ((array_var($task_data, 'notify') == 'true' || user_config_option("can notify from quick add") && !user_config_option("show_notify_checkbox_in_quick_add")) && !$assignee_to_me) { $isSailent = false; try { Notifier::taskAssigned($task); } catch (Exception $e) { Logger::log($e->getMessage()); Logger::log($e->getTraceAsString()); } // try } ApplicationLogs::createLog($task, ApplicationLogs::ACTION_ADD, null, $isSailent); ajx_extra_data(array("task" => $task->getArrayInfo(), 'subtasks' => $subs)); flash_success(lang('success add task', $task->getObjectName())); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // try } // if }
function getIconClass() { $d = Dimensions::findByCode('workspaces'); $m = Members::findOneByObjectId($this->getId(), $d->getId()); return "ico-color" . ($m instanceof Member ? $m->getColor() : '0'); }
function workspaces_additional_dashboard_actions($ignored, &$actions) { $ws_dim = Dimensions::findByCode('workspaces'); $wot = ObjectTypes::findByName('workspace'); $wdot = DimensionObjectTypes::findOne(array('conditions' => 'dimension_id=' . $ws_dim->getId() . ' AND object_type_id=' . $wot->getId())); if ($wdot instanceof DimensionObjectType && $wdot->getEnabled()) { if (active_context_can_contain_member_type($ws_dim->getId(), $wot->getId())) { $actions[] = array('id' => 'workspaces-list', 'assoc_ot' => $wot->getId(), 'assoc_dim' => $ws_dim->getId(), 'name' => lang('workspaces list'), 'class' => 'link-ico ico-workspace', 'onclick' => "og.openLink(og.getUrl('member', 'init', {dim_id:" . $ws_dim->getId() . ", type_id:" . $wot->getId() . "}), {caller:'" . $ws_dim->getCode() . "'}); return false;"); } } $tags_dim = Dimensions::findByCode('tags'); $tot = ObjectTypes::findByName('tag'); $tdot = DimensionObjectTypes::findOne(array('conditions' => 'dimension_id=' . $tags_dim->getId() . ' AND object_type_id=' . $tot->getId())); if ($tdot instanceof DimensionObjectType && $tdot->getEnabled()) { if (active_context_can_contain_member_type($tags_dim->getId(), $tot->getId())) { $actions[] = array('id' => 'tags-list', 'assoc_ot' => $tot->getId(), 'assoc_dim' => $tags_dim->getId(), 'name' => lang('tags list'), 'class' => 'link-ico ico-tag', 'onclick' => "og.openLink(og.getUrl('member', 'init', {dim_id:" . $tags_dim->getId() . ", type_id:" . $tot->getId() . "}), {caller:'" . $tags_dim->getCode() . "'}); return false;"); } } }