function add_to_members($object, $member_ids, $user = null, $check_allowed_members = true) { if (!$user instanceof Contact) $user = logged_user(); // clean member_ids $tmp_mids = array(); foreach ($member_ids as $mid) { if (!is_null($mid) && trim($mid) != "") $tmp_mids[] = $mid; } $member_ids = $tmp_mids; if ($user->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } if (isset($_POST['trees_not_loaded']) && $_POST['trees_not_loaded'] > 0) return; $required_dimension_ids = array(); $dimension_object_types = $object->getDimensionObjectTypes(); foreach($dimension_object_types as $dot){ if ($dot->getIsRequired()){ $required_dimension_ids[] = $dot->getDimensionId(); } } $required_dimensions = Dimensions::findAll(array("conditions" => "id IN (".implode(",",$required_dimension_ids).") OR is_required=1")); // If not entered members if (count($member_ids) <= 0){ $throw_error = true; if (Plugins::instance()->isActivePlugin('core_dimensions')) { $personal_member = Members::findById($user->getPersonalMemberId()); if ($personal_member instanceof Member) { $member_ids[] = $user->getPersonalMemberId(); } } } if (count($member_ids) > 0) { $enteredMembers = Members::findAll(array('conditions' => 'id IN ('.implode(",", $member_ids).')')); } else { $enteredMembers = array(); } $object->removeFromMembers($user, $enteredMembers); /* @var $object ContentDataObject */ $validMembers = $check_allowed_members ? $object->getAllowedMembersToAdd($user,$enteredMembers) : $enteredMembers; foreach($required_dimensions as $rdim){ $exists = false; foreach ($validMembers as $m){ if ($m->getDimensionId() == $rdim->getId()) { $exists = true; break; } } if (!$exists){ throw new Exception(lang('must choose at least one member of',$rdim->getName())); } } $object->addToMembers($validMembers, true); Hook::fire ('after_add_to_members', $object, $validMembers); $object->addToSharingTable(); // add timeslots to members if ($object->allowsTimeslots()) { $timeslots = $object->getTimeslots(); foreach ($timeslots as $timeslot) { $ts_mids = ObjectMembers::getMemberIdsByObject($timeslot->getId()); // if classified then reclassify if (count($ts_mids) > 0) { ObjectMembers::delete('`object_id` = ' . $timeslot->getId()); if (count($validMembers) > 0) { $timeslot->addToMembers($validMembers); $timeslot->addToSharingTable(); } } } } return $validMembers; }
/** * Returns an array with the ids of the members that this object belongs to * */ function getMemberIds() { if (is_null($this->memberIds)) { $this->memberIds = ObjectMembers::getMemberIdsByObject($this->getRelObjectId() > 0 ? $this->getRelObjectId() : $this->getId()); } return $this->memberIds ; //return ObjectMembers::getMemberIdsByObject($this->getId()); }
/** * Used for Drag & Drop, adds objects to a member * @author alvaro */ function add_objects_to_member() { $ids = json_decode(array_var($_POST, 'objects')); $mem_id = array_var($_POST, 'member'); if (!is_array($ids) || count($ids) == 0) { ajx_current("empty"); return; } $member = Members::findById($mem_id); try { DB::beginWork(); $objects = array(); $from = array(); foreach ($ids as $oid) { /* @var $obj ContentDataObject */ $obj = Objects::findObject($oid); if ($obj instanceof ContentDataObject && $obj->canAddToMember(logged_user(), $member, active_context())) { $dim_obj_type_content = DimensionObjectTypeContents::findOne(array('conditions' => array('`dimension_id`=? AND `dimension_object_type_id`=? AND `content_object_type_id`=?', $member->getDimensionId(), $member->getObjectTypeId(), $obj->getObjectTypeId()))); if (!($dim_obj_type_content instanceof DimensionObjectTypeContent)) continue; if (!$dim_obj_type_content->getIsMultiple() || array_var($_POST, 'remove_prev')) { $db_res = DB::execute("SELECT group_concat(om.member_id) as old_members FROM ".TABLE_PREFIX."object_members om INNER JOIN ".TABLE_PREFIX."members m ON om.member_id=m.id WHERE m.dimension_id=".$member->getDimensionId()." AND om.object_id=".$obj->getId()); $row = $db_res->fetchRow(); if (array_var($row, 'old_members') != "") $from[$obj->getId()] = $row['old_members']; // remove from previous members ObjectMembers::delete('`object_id` = ' . $obj->getId() . ' AND `member_id` IN (SELECT `m`.`id` FROM `'.TABLE_PREFIX.'members` `m` WHERE `m`.`dimension_id` = '.$member->getDimensionId().')'); } $obj->addToMembers(array($member)); $obj->addToSharingTable(); $objects[] = $obj; if ($obj->allowsTimeslots()) { $timeslots = $obj->getTimeslots(); foreach ($timeslots as $timeslot) { $ts_mids = ObjectMembers::getMemberIdsByObject($timeslot->getId()); // if classified then reclassify if (count($ts_mids)) { if (array_var($_POST, 'remove_prev')) { ObjectMembers::delete('`object_id` = ' . $timeslot->getId() . ' AND `member_id` IN (SELECT `m`.`id` FROM `'.TABLE_PREFIX.'members` `m` WHERE `m`.`dimension_id` = '.$member->getDimensionId().')'); } $timeslot->addToMembers(array($member)); $timeslot->addToSharingTable(); $objects[] = $timeslot; } } } if ($obj instanceof MailContent) { $conversation = MailContents::getMailsFromConversation($obj); foreach ($conversation as $conv_email) { if (array_var($_POST, 'attachment') && $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; } MailController::classifyFile($classification_data, $conv_email, $parsedEmail, array($member), array_var($_POST, 'remove_prev')); } } } } else { throw new Exception(lang('you dont have permissions to classify object in member', $obj->getName(), $member->getName())); } } Hook::fire('after_dragdrop_classify', $objects, $member); DB::commit(); // add to application logs foreach ($objects as $object) { $action = array_var($from, $obj->getId()) ? ApplicationLogs::ACTION_MOVE : ApplicationLogs::ACTION_COPY; $log_data = (array_var($from, $obj->getId()) ? "from:" . array_var($from, $obj->getId()) . ";" : "") . "to:" . $member->getId(); ApplicationLogs::instance()->createLog($object, $action, false, true, true, $log_data); } $lang_key = count($ids)>1 ? 'objects moved to member success' : 'object moved to member success'; flash_success(lang($lang_key, $member->getName())); if (array_var($_POST, 'reload')) ajx_current('reload'); else ajx_current('empty'); } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } }
function getMembersToDisplayPath() { $members_info = array(); $member_ids = ObjectMembers::getMemberIdsByObject($this->getId()); if (count($member_ids) == 0) { $member_ids[] = 0; } $db_res = DB::execute("SELECT id, name, dimension_id, object_type_id FROM " . TABLE_PREFIX . "members WHERE id IN (" . implode(",", $member_ids) . ")"); $members = $db_res->fetchAll(); $dimension_options = array(); if (count($members) > 0) { foreach ($members as $mem) { $options = Dimensions::getDimensionById($mem['dimension_id'])->getOptions(true); if (isset($options->showInPaths) && $options->showInPaths) { if (!isset($members_info[$mem['dimension_id']])) { $members_info[$mem['dimension_id']] = array(); } $members_info[$mem['dimension_id']][$mem['id']] = array('ot' => $mem['object_type_id'], 'c' => Members::findById($mem['id'])->getMemberColor(), 'name' => $mem['name']); } } } return $members_info; }
function getMembersToDisplayPath($member_ids = null, $show_all_members = false, $show_active_context_members = true) { $members_info = array(); if (is_null($member_ids)) { $member_ids = ObjectMembers::getMemberIdsByObject($this->getId()); } $members = $this->manager()->getCachedMembersInfo($member_ids); $dimension_options = array(); $member_count = array(); $active_context_ids = active_context_members(false); $to_display = user_config_option('breadcrumb_member_count'); if (count($members) > 0) { foreach ($members as $mem) { $dimension = Dimensions::getDimensionById($mem['dimension_id']); if (intval($dimension->getOptionValue('showInPaths'))) { if (!isset($members_info[$mem['dimension_id']])) { $members_info[$mem['dimension_id']] = array(); } $active_context_condition = true; if (!$show_active_context_members) { $active_context_condition = !in_array($mem['id'], $active_context_ids); } if (!$show_all_members && count($members_info[$mem['dimension_id']]) < $to_display && $active_context_condition) { $members_info[$mem['dimension_id']][$mem['id']] = array('ot' => $mem['object_type_id'], 'c' => Members::getMemberById($mem['id'])->getMemberColor(), 'name' => $mem['name']); } if (!isset($member_count[$mem['dimension_id']])) { $member_count[$mem['dimension_id']] = 1; } else { $member_count[$mem['dimension_id']]++; } } } } foreach ($member_count as $did => $cant) { $members_info[$did]['total'] = $cant; } return $members_info; }
function getMembersToDisplayPath($member_ids = null, $show_all_members = false) { $members_info = array(); if (is_null($member_ids)) { $member_ids = ObjectMembers::getMemberIdsByObject($this->getId()); } $members = $this->manager()->getCachedMembersInfo($member_ids); $dimension_options = array(); $member_count = array(); $active_context_ids = active_context_members(false); if(count($members) > 0){ foreach ($members as $mem) { $options = Dimensions::getDimensionById($mem['dimension_id'])->getOptions(true); if (isset($options->showInPaths) && $options->showInPaths) { if (!isset($members_info[$mem['dimension_id']])) $members_info[$mem['dimension_id']] = array(); if (!$show_all_members && count($members_info[$mem['dimension_id']]) < 2 && !in_array($mem['id'], $active_context_ids)) { $members_info[$mem['dimension_id']][$mem['id']] = array( 'ot' => $mem['object_type_id'], 'c' => Members::getMemberById($mem['id'])->getMemberColor(), 'name' => $mem['name'], ); } if (!isset($member_count[$mem['dimension_id']])) $member_count[$mem['dimension_id']] = 1; else $member_count[$mem['dimension_id']]++; } } } foreach ($member_count as $did => $cant) { $members_info[$did]['total'] = $cant; } return $members_info; }