/** * Add permissions for a contact on members * @param array $members_id Array with the ids of members * @param array $rol_permissions Array with the permissions for the user type of the contact * @return null */ function addPermissions($members_id, $rol_permissions) { //permissions $permissions = ""; foreach ($rol_permissions as $permission) { if ($permissions != "") { $permissions .= ','; } $permissions .= '{"pg":"' . $this->getId() . '","o":' . $permission['object_type_id'] . ',"d":' . $permission['can_delete'] . ',"w":' . $permission['can_write'] . ',"r":1}'; } $permissions = "[" . $permissions . "]"; //members $members = array(); foreach ($members_id as $member_id) { $mem = Members::findById($member_id); if (!$mem instanceof Member) { continue; } $members[] = $mem; } //save permissions foreach ($members as $member) { save_member_permissions_background(logged_user(), $member, $permissions); } }
static function getMemberById($id) { $m = array_var(self::$members_cache, $id); if (!$m instanceof Member) { $m = Members::findById($id); if ($m instanceof Member) { self::$members_cache[$id] = $m; } } return $m; }
/** * Removes the object from those members where the user can see the object(and its corresponding parents) * */ static function removeObjectFromMembers(ContentDataObject $object, Contact $contact, $context_members, $members_to_remove = null, $check_permissions = true) { if (is_null($members_to_remove)) { $member_ids = array_flat(DB::executeAll("SELECT om.member_id FROM " . TABLE_PREFIX . "object_members om\r\n \t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "members m ON m.id=om.member_id\r\n \t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "dimensions d On d.id=m.dimension_id \r\n \t\t\t\t\t\tWHERE d.is_manageable=1 AND om.object_id = " . $object->getId())); } else { $member_ids = $members_to_remove; } $memebers_deleted_ids = array(); foreach ($member_ids as $id) { $member = Members::findById($id); if (!$member instanceof Member) { continue; } if ($check_permissions) { //can write this object type in the member $can_write = $object->canAddToMember($contact, $member, $context_members); } else { $can_write = true; } if ($can_write) { $om = self::findById(array('object_id' => $object->getId(), 'member_id' => $id)); if ($om instanceof ObjectMember) { $om->delete(); $memebers_deleted_ids[] = $id; } $stop = false; while ($member->getParentMember() != null && !$stop) { $member = $member->getParentMember(); $obj_member = ObjectMembers::findOne(array("conditions" => array("`object_id` = ? AND `member_id` = ? AND \r\n\t\t\t\t\t\t\t\t\t`is_optimization` = 1", $object->getId(), $member->getId()))); if (!is_null($obj_member)) { $obj_member->delete(); } else { $stop = true; } } } } return $memebers_deleted_ids; }
/** * Removes the object from those members where the user can see the object(and its corresponding parents) * */ static function removeObjectFromMembers(ContentDataObject $object, Contact $contact, $context_members, $members_to_remove = null){ if (is_null($members_to_remove)) { $member_ids = array_flat(DB::executeAll("SELECT member_id FROM ".TABLE_PREFIX."object_members WHERE object_id = " . $object->getId())); } else { $member_ids = $members_to_remove; } foreach($member_ids as $id){ $member = Members::findById($id); if (!$member instanceof Member) continue; //can write this object type in the member $can_write = $object->canAddToMember($contact, $member, $context_members); if ($can_write){ $om = self::findById(array('object_id' => $object->getId(), 'member_id' => $id)); if ($om instanceof ObjectMember) { $om->delete(); } $stop = false; while ($member->getParentMember() != null && !$stop){ $member = $member->getParentMember(); $obj_member = ObjectMembers::findOne(array("conditions" => array("`object_id` = ? AND `member_id` = ? AND `is_optimization` = 1", $object->getId(),$member->getId()))); if (!is_null($obj_member)) { $obj_member->delete(); } else $stop = true; } } } }
/** * Removes the object from those members where the user can see the object(and its corresponding parents) * */ static function removeObjectFromMembers(ContentDataObject $object, Contact $contact, $context_members) { $object_type_id = $object->getObjectTypeId(); $member_ids = self::getMemberIdsbyObject($object->getId()); foreach ($member_ids as $id) { $member = Members::findById($id); //can write this object type in the member $can_write = $object->canAddToMember($contact, $member, $context_members); if ($can_write) { $om = self::findById(array('object_id' => $object->getId(), 'member_id' => $id)); $om->delete(); $stop = false; while ($member->getParentMember() != null && !$stop) { $member = $member->getParentMember(); $obj_member = ObjectMembers::findOne(array("conditions" => array("`object_id` = ? AND `member_id` = ? AND \n\t\t\t\t\t\t\t\t\t`is_optimization` = 1", $object->getId(), $member->getId()))); if (!is_null($obj_member)) { $obj_member->delete(); } else { $stop = true; } } } } }
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.'" />'; } } } } } }
function unarchive() { if (!can_manage_dimension_members(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $member = Members::findById(get_id()); if (!$member instanceof Member) { flash_error(lang('member dnx')); ajx_current("empty"); return; } if (get_id('user')) { $user = Contacts::findById($get_id('user')); } else { $user = logged_user(); } if (!$user instanceof Contact) { ajx_current("empty"); return; } try { DB::beginWork(); set_time_limit(0); $count = $member->unarchive($user); evt_add("reload dimension tree", $member->getDimensionId()); ajx_current("back"); flash_success(lang('success unarchive member', $member->getName(), $count)); DB::commit(); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } }
/** * * Fires AFTER User is deleted - Contact.class.php * Deletes All members associated with that user * @param Contact $user */ function core_dimensions_after_user_deleted(Contact $user, $null) { $uid = $user->getId(); //Delete MyStuff if ($myStuff = Members::findById($user->getPersonalMemberId())) { $myStuff->delete(); } // Delete All members $members = Members::instance()->findByObjectId($uid); if (count($members)) { foreach ($members as $member) { $member->delete(); evt_add("reload dimension tree", $member->getDimensionId()); } } }
function add_to_members($object, $member_ids, $user = null, $check_allowed_members = true) { if (!$user instanceof Contact) { $user = logged_user(); } 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) . ")")); // 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); Hook::fire('after_add_to_members', $object, $null); $object->addToSharingTable(); return $validMembers; }
function allowed_users_to_assign_all_mobile($member_id = null) { if ($member_id == null) { $context = active_context(); }else{ $member = Members::findById($member_id); if ($member instanceof Member){ $context[] = $member; } } // only companies with users $companies = Contacts::findAll(array("conditions" => "is_company = 1 AND object_id IN (SELECT company_id FROM ".TABLE_PREFIX."contacts WHERE user_type>0 AND disabled=0)", "order" => "first_name ASC")); $comp_ids = array("0"); $comp_array = array("0" => array('id' => "0", 'name' => lang('without company'), 'users' => array() )); foreach ($companies as $company) { $comp_ids[] = $company->getId(); $comp_array[$company->getId()] = array('id' => $company->getId(), 'name' => $company->getObjectName(), 'users' => array() ); } if(!can_manage_tasks(logged_user()) && can_task_assignee(logged_user())) { $contacts = array(logged_user()); } else if (can_manage_tasks(logged_user())) { $contacts = allowed_users_in_context(ProjectTasks::instance()->getObjectTypeId(), $context, ACCESS_LEVEL_READ, "AND `is_company`=0 AND `company_id` IN (".implode(",", $comp_ids).")"); } else { $contacts = array(); } foreach ($contacts as $contact) { /* @var $contact Contact */ if ( TabPanelPermissions::instance()->count( array( "conditions" => "permission_group_id = ".$contact->getPermissionGroupId(). " AND tab_panel_id = 'tasks-panel' " ))){ $comp_array[$contact->getCompanyId()]['users'][] = array('id' => $contact->getId(), 'name' => $contact->getObjectName(), 'isCurrent' => $contact->getId() == logged_user()->getId()); } } foreach ($comp_array as $company_id => &$comp_data) { if (count($comp_data['users']) == 0) { unset($comp_array[$company_id]); } } return array_values($comp_array); }
function getActivityDataView($user,$object,$made_several_changes = false) { if (!$user) return false; $icon_class = ""; if ($object instanceof ProjectFile) { $path = explode("-", str_replace(".", "_", str_replace("/", "-", $object->getTypeString()))); $acc = ""; foreach ($path as $p) { $acc .= $p; $icon_class .= ' ico-' . $acc; $acc .= "-"; } } // Build data depending on type if ($object instanceof ContentDataObject){ if ($object instanceof Contact && $object->isUser()) { $type = "user" ; }else{ $type = $object->getObjectTypeName() ; } if (($type != 'Time') || ($type == 'Time' && $object->getRelObjectId() != 0)){ $object_link = '<a style="font-weight:bold" href="' . $object->getObjectUrl() . '"> '. '<span style="padding: 1px 0 3px 18px;" class="db-ico ico-unknown ico-' . $type . $icon_class . '"/>'.clean($object->getObjectName()).'</a>'; } else { //if it is a general timeslot $object_link = '<span style="padding: 1px 0 3px 18px; font-weight:bold;" class="db-ico ico-unknown ico-' . $type . $icon_class . '"/>'.clean($object->getObjectName()); } } else { $object_link = clean($this->getObjectName()).' '.lang('object is deleted'); return lang('activity ' . $this->getAction(), "", $user->getObjectName(), $object_link); } if($made_several_changes){ $this->setAction(ApplicationLogs::ACTION_MADE_SEVERAL_CHANGES); } switch ($this->getAction()) { case ApplicationLogs::ACTION_MADE_SEVERAL_CHANGES : $object_history = '<a style="font-weight:bold" href="' . $object->getViewHistoryUrl() . '"> '. '<span style="padding: 1px 0 3px 18px;" class="db-ico ico-unknown ico-history"/>'.lang('view history').'</a>'; return lang('activity ' . $this->getAction(), lang('the ' .$type. ' activity', $object_link), $user->getObjectName()," -" .$object_history); case ApplicationLogs::ACTION_EDIT : case ApplicationLogs::ACTION_ADD : case ApplicationLogs::ACTION_DELETE : case ApplicationLogs::ACTION_TRASH : case ApplicationLogs::ACTION_UNTRASH : case ApplicationLogs::ACTION_OPEN : case ApplicationLogs::ACTION_CLOSE : case ApplicationLogs::ACTION_ARCHIVE : case ApplicationLogs::ACTION_UNARCHIVE : case ApplicationLogs::ACTION_READ : case ApplicationLogs::ACTION_DOWNLOAD : case ApplicationLogs::ACTION_CHECKIN : case ApplicationLogs::ACTION_CHECKOUT : if ($object instanceof ContentDataObject) { return lang('activity ' . $this->getAction(), lang('the '.$type," "), $user->getObjectName(), $object_link); } case ApplicationLogs::ACTION_SUBSCRIBE : case ApplicationLogs::ACTION_UNSUBSCRIBE : $user_ids = explode(",", $this->getLogData()); if (count($user_ids) < 8) { $users_str = ""; foreach ($user_ids as $usid) { $su = Contacts::findById($usid); if ($su instanceof Contact) { $users_str .= '<a style="font-weight:bold" href="'.$su->getObjectUrl().'"> <span style="padding: 0 0 3px 18px;" class="db-ico ico-unknown ico-user"/>'.clean($su->getObjectName()).'</a>, '; } } if (count($user_ids) == 1) { $users_text = substr(trim($users_str), 0, -1); } else { $users_text = lang('x users', count($user_ids), ": $users_str"); } } else { $users_text = lang('x users', count($user_ids), ""); } if ($object instanceof ContentDataObject) { return lang('activity ' . $this->getAction(), lang('the '.$object->getObjectTypeName()," "), $user->getObjectName(), $object_link, $users_text); } case ApplicationLogs::ACTION_COMMENT : if ($object instanceof ContentDataObject) { $rel_object = Objects::findObject($this->getRelObjectId()); $commented_object = null; if ($rel_object instanceof Comment) { $commented_object = $rel_object->getRelObject(); } $obj_type_name = $commented_object instanceof ContentDataObject ? $commented_object->getObjectTypeName() : $rel_object->getObjectTypeName(); return lang('activity ' . $this->getAction(), lang('the '.$obj_type_name," "), $user->getObjectName(), $object_link, $this->getLogData()); } case ApplicationLogs::ACTION_LINK : case ApplicationLogs::ACTION_UNLINK : $linked_object_link = ''; $linked_object = Objects::findObject($this->getLogData()); if ($linked_object instanceof ApplicationDataObject ) { $icon_class = ""; if ($linked_object instanceof ProjectFile) { $path = explode("-", str_replace(".", "_", str_replace("/", "-", $linked_object->getTypeString()))); $acc = ""; foreach ($path as $p) { $acc .= $p; $icon_class .= ' ico-' . $acc; $acc .= "-"; } } $linked_object_link = '<a style="font-weight:bold" href="' . $linked_object->getObjectUrl() . '"> <span style="padding: 1px 0 3px 18px;" class="db-ico ico-unknown ico-'.$linked_object->getObjectTypeName() . $icon_class . '"/>'.clean($linked_object->getObjectName()).'</a>'; } if ($object instanceof ContentDataObject) { return lang('activity ' . $this->getAction(), lang('the '.$object->getObjectTypeName()," "), $user->getObjectName(), $object_link, $linked_object instanceof ApplicationDataObject ? lang('the '.$linked_object->getObjectTypeName()) : '', $linked_object_link); } case ApplicationLogs::ACTION_LOGIN : case ApplicationLogs::ACTION_LOGOUT : return lang('activity ' . $this->getAction(), $user->getObjectName()); case ApplicationLogs::ACTION_COPY : $to_str = ""; $to_str_member = ""; $members_ids_csv = str_replace("to:", "", $this->getLogData()); $mem_ids = explode(",", $members_ids_csv); if (is_array($mem_ids) && count($mem_ids) > 0) { foreach($mem_ids as $mem_id){ $member = Members::findById($mem_id); if($member){ $to_str_member .= $member->getName() . ", "; } } if($to_str_member != ""){ $to_str_member = substr($to_str_member , 0, -2); $to_str .= $to_str_member; } } if($object instanceof ContentDataObject){ if ($to_str != "") { return lang('activity ' . $this->getAction() . ' to', lang('the '.$object->getObjectTypeName()), $user->getObjectName(), $object_link, $to_str); } }else{ if ($to_str != "") { return lang('activity ' . $this->getAction() . ' to', lang('the '.$this->getRelObjectManager()), $user->getObjectName(), $object_link, $to_str); } } default: return false; } return false; }
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()); } } } }
function do_member_parent_changed_refresh_object_permisssions($member_id, $old_parent_id) { $member = Members::findById($member_id); if (!$member instanceof Member) { return; } $sql = "SELECT om.object_id FROM " . TABLE_PREFIX . "object_members om WHERE om.member_id=" . $member->getId(); $object_ids = DB::executeAll($sql); $ids_str = ""; if (!is_array($object_ids)) { $object_ids = array(); } foreach ($object_ids as $row) { $content_object = Objects::findObject($row['object_id']); if (!$content_object instanceof ContentDataObject) { continue; } $parent_ids = array(); if ($old_parent_id > 0) { $all_parents = Members::findById($old_parent_id)->getAllParentMembersInHierarchy(true); foreach ($all_parents as $p) { $parent_ids[] = $p->getId(); } if (count($parent_ids) > 0) { DB::execute("DELETE FROM " . TABLE_PREFIX . "object_members WHERE object_id=" . $content_object->getId() . " AND member_id IN (" . implode(",", $parent_ids) . ")"); } } $content_object->addToMembers(array($member)); $content_object->addToSharingTable(); $ids_str .= ($ids_str == "" ? "" : ",") . $content_object->getId(); } //add_multilple_objects_to_sharing_table($ids_str, logged_user()); }
/** * * */ function list_dimension_members($member_id, $context_dimension_id, $object_type_id, $allowed_member_type_ids) { if ($member_id != 0) { $contact_pg_ids = ContactPermissionGroups::getPermissionGroupIdsByContactCSV(logged_user()->getId(), false); $member = members::findById($member_id); $dimension = Dimensions::getDimensionById($context_dimension_id); if ($object_type_id != null) { $dimension_object_type_contents = $dimension->getObjectTypeContent($object_type_id); foreach ($dimension_object_type_contents as $dotc) { $dot_id = $dotc->getDimensionObjectTypeId(); if (is_null($allowed_member_type_ids) || in_array($dot_id, $allowed_member_type_ids)) { $allowed_object_type_ids[] = $dot_id; } } } if ($dimension instanceof Dimension && $member instanceof Member) { if (!$dimension->getDefinesPermissions() || $dimension->hasAllowAllForContact($contact_pg_ids)) { $dimension_members = $dimension->getAllMembers(false, "parent_member_id, name", true); } else { if ($dimension->hasCheckForContact($contact_pg_ids)) { $member_list = $dimension->getAllMembers(false, "parent_member_id, name", true); $allowed_members = array(); foreach ($member_list as $dim_member) { if (ContactMemberPermissions::instance()->contactCanReadMemberAll($contact_pg_ids, $dim_member->getId(), logged_user())) { $allowed_members[] = $dim_member; } } $dimension_members = $allowed_members; } } $members_to_retrieve = array(); $association_ids = DimensionMemberAssociations::getAllAssociationIds($member->getDimensionId(), $context_dimension_id); if (count($association_ids) > 0) { $associated_members_ids_csv = ''; foreach ($association_ids as $id) { $association = DimensionMemberAssociations::findById($id); $children = $member->getAllChildrenInHierarchy(); if ($association->getDimensionId() == $context_dimension_id) { $new_csv = MemberPropertyMembers::getAllMemberIds($id, $member_id); $associated_members_ids_csv .= $new_csv != '' ? $new_csv . "," : ''; foreach ($children as $child) { $new_csv = MemberPropertyMembers::getAllMemberIds($id, $child->getId()); $associated_members_ids_csv .= $new_csv != '' ? $new_csv . "," : ''; } } else { $new_csv = MemberPropertyMembers::getAllPropertyMemberIds($id, $member_id) . ","; $associated_members_ids_csv .= $new_csv != '' ? $new_csv . "," : ''; foreach ($children as $child) { $new_csv = MemberPropertyMembers::getAllPropertyMemberIds($id, $child->getId()); $associated_members_ids_csv .= $new_csv != '' ? $new_csv . "," : ''; } } } $associated_members_ids = explode(',', $associated_members_ids_csv); $associated_members_ids = array_unique($associated_members_ids); } if (isset($associated_members_ids) && count($associated_members_ids) > 0) { foreach ($associated_members_ids as $id) { $associated_member = Members::findById($id); if (in_array($associated_member, $dimension_members)) { $context_hierarchy_members = $associated_member->getAllParentMembersInHierarchy(true); foreach ($context_hierarchy_members as $context_member) { if (!in_array($context_member, $members_to_retrieve) && in_array($context_member, $dimension_members)) { $members_to_retrieve[$context_member->getName()] = $context_member; } } } } // alphabetical order $members_to_retrieve = array_ksort($members_to_retrieve); } else { $members_to_retrieve[] = $dimension_members; } $membersset = array(); foreach ($members_to_retrieve as $m) { $membersset[$m->getId()] = true; } $members = array(); // Todo adapt this code to call "buildMemberList" - (performance and code improvement) foreach ($members_to_retrieve as $m) { if ($m->getArchivedById() > 0) { continue; } if ($object_type_id != null) { $selectable = in_array($m->getObjectTypeId(), $allowed_object_type_ids) ? true : false; } $tempParent = $m->getParentMemberId(); $x = $m; while ($x instanceof Member && !isset($membersset[$tempParent])) { $tempParent = $x->getParentMemberId(); $x = $x->getParentMember(); } if (!$x instanceof Member) { $tempParent = 0; } if ($dot = DimensionObjectTypes::instance()->findOne(array("conditions" => "\n\t\t\t\t\t\tdimension_id = " . $dimension->getId() . " AND\n\t\t\t\t\t\tobject_type_id = " . $m->getObjectTypeId()))) { $memberOptions = $dot->getOptions(true); } else { $memberOptions = ''; } /* @var $m Member */ $member = array("id" => $m->getId(), "name" => clean($m->getName()), "parent" => $tempParent, "realParent" => $m->getParentMemberId(), "object_id" => $m->getObjectId(), "options" => $memberOptions, "depth" => $m->getDepth(), "iconCls" => $m->getIconClass(), "selectable" => isset($selectable) ? $selectable : false, "dimension_id" => $m->getDimensionId(), "object_type_id" => $m->getObjectTypeId(), "allow_childs" => $m->allowChilds()); if ($oid = $m->getObjectId()) { if ($obj = Objects::instance()->findObject($m->getObjectId())) { $editUrl = $obj->getEditUrl(); } } // Member Actions if (can_manage_dimension_members(logged_user())) { if ($oid = $m->getObjectId()) { if ($obj = Objects::instance()->findObject($m->getObjectId())) { $editUrl = $obj->getEditUrl(); } } else { $editUrl = get_url('member', 'edit', array('id' => $m->getId())); } $member['actions'] = array(array('url' => $editUrl, 'text' => '', 'iconCls' => 'ico-edit')); } $members[] = $member; } return $members; } return null; } else { $members = $this->initial_list_dimension_members($context_dimension_id, $object_type_id, $allowed_member_type_ids); return $members; } }
function associate_member_to_status_member($project_member, $old_project_status, $status_member_id, $status_dimension, $status_ot = null, $remove_prev_associations = true) { if ($status_dimension instanceof Dimension && in_array($status_dimension->getId(), config_option('enabled_dimensions'))) { // asociate project objects to the new project_status member if ($old_project_status != $status_member_id) { $object_members = ObjectMembers::instance()->findAll(array('conditions' => "member_id = " . $project_member->getId() . " AND is_optimization=0")); // remove objects from old project_type member if ($old_project_status > 0) { foreach ($object_members as $om) { $obj = Objects::findObject($om->getObjectId()); if ($obj instanceof ContentDataObject) { ObjectMembers::removeObjectFromMembers($obj, logged_user(), null, array($old_project_status)); } } } // add objects to new project_type member if (is_numeric($status_member_id) && $status_member_id > 0) { $member_to_add = Members::findById($status_member_id); foreach ($object_members as $om) { ObjectMembers::addObjectToMembers($om->getObjectId(), array($member_to_add)); } if ($member_to_add instanceof Member && $member_to_add->getObjectId() > 0) { $rel_obj = Objects::findObject($member_to_add->getObjectId()); if ($rel_obj instanceof ContentDataObject) { ObjectMembers::addObjectToMembers($rel_obj->getId(), array($project_member)); $rel_obj->addToSharingTable(); $null = null; Hook::fire("after_auto_classifying_associated_object_of_member", array('obj' => $rel_obj, 'mem' => $project_member), $null); } } } } $member_dimension = $project_member->getDimension(); $a = DimensionMemberAssociations::instance()->findOne(array('conditions' => array('dimension_id=? AND object_type_id=? AND associated_dimension_id=?' . ($status_ot instanceof ObjectType ? ' AND associated_object_type_id=' . $status_ot->getId() : ''), $member_dimension->getId(), $project_member->getObjectTypeId(), $status_dimension->getId()))); // create relation between members and remove old relations if ($a instanceof DimensionMemberAssociation) { if (is_numeric($status_member_id) && $status_member_id > 0) { $mpm = MemberPropertyMembers::findOne(array('id' => true, 'conditions' => array('association_id = ? AND member_id = ? AND property_member_id = ?', $a->getId(), $project_member->getId(), $status_member_id))); if (is_null($mpm)) { $sql = "INSERT INTO " . TABLE_PREFIX . "member_property_members (association_id, member_id, property_member_id, is_active, created_on, created_by_id)\r\n\t\t\t\t\t\tVALUES (" . $a->getId() . "," . $project_member->getId() . "," . $status_member_id . ", 1, NOW()," . logged_user()->getId() . ");"; DB::executeAll($sql); } } if ($remove_prev_associations) { MemberPropertyMembers::instance()->delete('association_id = ' . $a->getId() . ' AND member_id = ' . $project_member->getId() . " AND property_member_id <> '{$status_member_id}'"); } } $a = DimensionMemberAssociations::instance()->findOne(array('conditions' => array('associated_dimension_id=? AND associated_object_type_id=? AND dimension_id=?' . ($status_ot instanceof ObjectType ? ' AND object_type_id=' . $status_ot->getId() : ''), $member_dimension->getId(), $project_member->getObjectTypeId(), $status_dimension->getId()))); // create relation between members and remove old relations if ($a instanceof DimensionMemberAssociation) { if (is_numeric($status_member_id) && $status_member_id > 0) { $mpm = MemberPropertyMembers::findOne(array('id' => true, 'conditions' => array('association_id = ? AND member_id = ? AND property_member_id = ?', $a->getId(), $project_member->getId(), $status_member_id))); if (is_null($mpm)) { $sql = "INSERT INTO " . TABLE_PREFIX . "member_property_members (association_id, member_id, property_member_id, is_active, created_on, created_by_id)\r\n\t\t\t\t\t\tVALUES (" . $a->getId() . "," . $status_member_id . "," . $project_member->getId() . ", 1, NOW()," . logged_user()->getId() . ");"; DB::executeAll($sql); } } if ($remove_prev_associations) { MemberPropertyMembers::instance()->delete('association_id = ' . $a->getId() . ' AND property_member_id = ' . $project_member->getId() . " AND member_id <> '{$status_member_id}'"); } } } }
ini_set('memory_limit', '2048M'); Env::useHelper('permissions'); $user_id = array_var($argv, 2); $token = array_var($argv, 3); // log user in $user = Contacts::findById($user_id); if (!$user instanceof Contact || !$user->isValidToken($token)) { throw new Exception("Cannot login with user {$user_id} and token '{$token}'"); } CompanyWebsite::instance()->setLoggedUser($user, false, false, false); // save permissions $member_id = array_var($argv, 4); $permissions_filename = array_var($argv, 5); $old_parent_id = array_var($argv, 6); $permissions = file_get_contents($permissions_filename); $member = Members::findById($member_id); if ($member instanceof Member) { // transaction to save permission tables try { DB::beginWork(); $result = save_member_permissions($member, $permissions, true, false, false, false); if ($old_parent_id != -1 && $old_parent_id != $member->getParentMemberId()) { do_member_parent_changed_refresh_object_permisssions($member_id, $old_parent_id); } DB::commit(); } catch (Exception $e) { DB::rollback(); Logger::log("Error saving permissions (1): " . $e->getMessage() . "\n" . $e->getTraceAsString()); } $changed_pgs = array_var($result, 'changed_pgs'); if (is_array($changed_pgs)) {
function update_all_childs_depths($member, $old_parent_id) { //CHILDS //Get all member childs recursive $childs = get_all_children_sorted($member->getArrayInfo()); if (count($childs) == 0) { return; } $childs_ids = array(); foreach ($childs as $child) { $childs_ids[] = $child['id']; } $m_depth = $member->getDepth(); if ($old_parent_id > 0) { $old_parent_member = Members::findById($old_parent_id); $old_member_depth = $old_parent_member->getDepth() + 1; } else { $old_member_depth = 1; } $depth_diff = $m_depth - $old_member_depth; $childs_ids_string = implode(',', $childs_ids); $update_depth_sql = "UPDATE " . TABLE_PREFIX . "members SET `depth` = `depth` + {$depth_diff} WHERE id IN({$childs_ids_string});"; DB::execute($update_depth_sql); }
function save_permissions($pg_id, $is_guest = false) { $sys_permissions_data = array_var($_POST, 'sys_perm'); $changed_members = array(); //module permissions $mod_permissions_data = array_var($_POST, 'mod_perm'); TabPanelPermissions::clearByPermissionGroup($pg_id); if (!is_null($mod_permissions_data) && is_array($mod_permissions_data)) { foreach ($mod_permissions_data as $tab_id => $val) { $tpp = new TabPanelPermission(); $tpp->setPermissionGroupId($pg_id); $tpp->setTabPanelId($tab_id); $tpp->save(); } } //system permissions $system_permissions = SystemPermissions::findById($pg_id); if (!$system_permissions instanceof SystemPermission) { $system_permissions = new SystemPermission(); $system_permissions->setPermissionGroupId($pg_id); } $system_permissions->setAllPermissions(false); $other_permissions = array(); Hook::fire('add_user_permissions', $pg_id, $other_permissions); foreach ($other_permissions as $k => $v) { $system_permissions->setColumnValue($k, false); } $sys_permissions_data['can_task_assignee'] = !$is_guest; $system_permissions->setFromAttributes($sys_permissions_data); $system_permissions->save(); //member permissions $permissionsString = array_var($_POST, 'permissions'); if ($permissionsString && $permissionsString != '') { $permissions = json_decode($permissionsString); } if (isset($permissions) && !is_null($permissions) && is_array($permissions)) { $allowed_members_ids = array(); foreach ($permissions as $perm) { if (!isset($all_perm_deleted[$perm->m])) { $all_perm_deleted[$perm->m] = true; } $allowed_members_ids[$perm->m] = array(); $allowed_members_ids[$perm->m]['pg'] = $pg_id; $cmp = ContactMemberPermissions::findById(array('permission_group_id' => $pg_id, 'member_id' => $perm->m, 'object_type_id' => $perm->o)); if (!$cmp instanceof ContactMemberPermission) { $cmp = new ContactMemberPermission(); $cmp->setPermissionGroupId($pg_id); $cmp->setMemberId($perm->m); $cmp->setObjectTypeId($perm->o); } $cmp->setCanWrite($is_guest ? false : $perm->w); $cmp->setCanDelete($is_guest ? false : $perm->d); if ($perm->r) { if (isset($allowed_members_ids[$perm->m]['w'])) { if ($allowed_members_ids[$perm->m]['w'] != 1) { $allowed_members_ids[$perm->m]['w'] = $is_guest ? false : $perm->w; } } else { $allowed_members_ids[$perm->m]['w'] = $is_guest ? false : $perm->w; } if (isset($allowed_members_ids[$perm->m]['d'])) { if ($allowed_members_ids[$perm->m]['d'] != 1) { $allowed_members_ids[$perm->m]['d'] = $is_guest ? false : $perm->d; } } else { $allowed_members_ids[$perm->m]['d'] = $is_guest ? false : $perm->d; } $cmp->save(); $all_perm_deleted[$perm->m] = false; } else { $cmp->delete(); } $changed_members[] = $perm->m; } $sharingTablecontroller = new SharingTableController(); $sharingTablecontroller->afterPermissionChanged($pg_id, $permissions); foreach ($allowed_members_ids as $key => $mids) { $mbm = Members::findById($key); $root_cmp = ContactMemberPermissions::findById(array('permission_group_id' => $mids['pg'], 'member_id' => $key, 'object_type_id' => $mbm->getObjectTypeId())); if (!$root_cmp instanceof ContactMemberPermission) { $root_cmp = new ContactMemberPermission(); $root_cmp->setPermissionGroupId($mids['pg']); $root_cmp->setMemberId($key); $root_cmp->setObjectTypeId($mbm->getObjectTypeId()); } $root_cmp->setCanWrite($mids['w']); $root_cmp->setCanDelete($mids['d']); $root_cmp->save(); } foreach ($all_perm_deleted as $mid => $pd) { if ($pd) { ContactMemberPermissions::instance()->delete("`permission_group_id` = {$pg_id} AND `member_id` = {$mid}"); } } } // set all permissiions to read_only if ($is_guest) { $all_saved_permissions = ContactMemberPermissions::findAll(array("conditions" => "`permission_group_id` = {$pg_id}")); foreach ($all_saved_permissions as $sp) { /* @var $sp ContactMemberPermission */ if ($sp->getCanDelete() || $sp->getCanWrite()) { $sp->setCanDelete(false); $sp->setCanWrite(false); $sp->save(); } } $cdps = ContactDimensionPermissions::findAll(array("conditions" => "`permission_type` = 'allow all'")); foreach ($cdps as $cdp) { $cdp->setPermissionType('check'); $cdp->save(); } } // check the status of the changed dimensions to set 'allow_all', 'deny_all' or 'check' $dimensions = Dimensions::findAll(array("conditions" => array("`id` IN (SELECT DISTINCT `dimension_id` FROM " . Members::instance()->getTableName(true) . " WHERE `id` IN (?))", $changed_members))); foreach ($dimensions as $dimension) { $mem_ids = $dimension->getAllMembers(true); if (count($mem_ids) == 0) { $mem_ids[] = 0; } $count = ContactMemberPermissions::count(array('conditions' => "`permission_group_id`={$pg_id} AND `member_id` IN (" . implode(",", $mem_ids) . ") AND `can_delete` = 0")); if ($count > 0) { $dimension->setContactDimensionPermission($pg_id, 'check'); } else { $count = ContactMemberPermissions::count(array('conditions' => "`permission_group_id`={$pg_id} AND `member_id` IN (" . implode(",", $mem_ids) . ")")); if ($count == 0) { $dimension->setContactDimensionPermission($pg_id, 'deny all'); } else { $allow_all = true; $dim_obj_types = $dimension->getAllowedObjectTypeContents(); $members = Members::findAll("`id` IN (" . implode(",", $mem_ids) . ")"); foreach ($dim_obj_types as $dim_obj_type) { $mem_ids_for_ot = array(); foreach ($members as $member) { if ($dim_obj_type->getDimensionObjectTypeId() == $member->getObjectTypeId()) { $mem_ids_for_ot[] = $member->getId(); } } if (count($mem_ids_for_ot) == 0) { $mem_ids_for_ot[] = 0; } $count = ContactMemberPermissions::count(array('conditions' => "`permission_group_id`={$pg_id} AND \n\t\t\t\t\t\t`object_type_id` = " . $dim_obj_type->getContentObjectTypeId() . " AND `can_delete` = 1 AND `member_id` IN (" . implode(",", $mem_ids_for_ot) . ")")); if ($count != count($mem_ids_for_ot)) { $allow_all = false; break; } } if ($allow_all) { $dimension->setContactDimensionPermission($pg_id, 'allow all'); } else { $dimension->setContactDimensionPermission($pg_id, 'check'); } } } } }
function build_context_array($context_plain) { $context = null ; if (!empty($context_plain)) { $dimensions = json_decode($context_plain) ; if ($dimensions) { $context = array () ; foreach ($dimensions as $dimensionId => $members) { if (!$dimensionId || $dimensionId == 'undefined') continue; if ($members && is_array($members)) { //cambiar foreach ($members as $member) { if ($member && is_numeric($member)) { $member = Members::findById($member) ; if ($member instanceof Member ){ $context[] = $member ; } }elseif($member === 0 && count($members)<=1){ // IS root. Retrieve the dimension $dimension = Dimensions::getDimensionById($dimensionId) ; if ($dimension instanceof Dimension ){ $context[] = $dimension ; } } } } } } } return $context; }
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; }
/** * Enter description here ... * @param Contact $contact * @param array of ObjectType $types * @param array of int $members */ function grantAllPermissions(Contact $contact, $members) { if ($contact->getUserType() > 0 && count($members)) { $userType = $contact->getUserTypeName(); $permissions = array(); // TO fill sharing table $gid = $contact->getPermissionGroupId(); foreach ($members as $member_id) { //new $member = Members::findById($member_id); $dimension = $member->getDimension(); $types = array(); $member_types = DimensionObjectTypeContents::getContentObjectTypeIds($dimension->getId(), $member->getObjectTypeId()); if (count($member_types)) { switch ($userType) { case 'Super Administrator': case 'Administrator': case 'Manager': case 'Executive': $types = $member_types; break; case 'Collaborator Customer': case 'Non-Exec Director': foreach (ObjectTypes::findAll(array("conditions" => " name NOT IN ('mail') ")) as $type) { //TODO This sucks $types[] = $type->getId(); } break; case 'Internal Collaborator': case 'External Collaborator': foreach (ObjectTypes::findAll(array("conditions" => " name NOT IN ('mail','contact', 'report') ")) as $type) { //TODO This sucks $types[] = $type->getId(); } break; case 'Guest Customer': foreach (ObjectTypes::findAll(array("conditions" => " name IN ('message', 'weblink', 'event', 'file') ")) as $type) { //TODO This sucks $types[] = $type->getId(); } break; case 'Guest': foreach (ObjectTypes::findAll(array("conditions" => " name IN ('message', 'weblink', 'event') ")) as $type) { //TODO This sucks $types[] = $type->getId(); } break; } } foreach ($types as $type_id) { if (!ContactMemberPermissions::instance()->findOne(array("conditions" => "permission_group_id = {$gid}\tAND \n\t\t\t\t\t\t\tmember_id = {$member_id} AND \n\t\t\t\t\t\t\tobject_type_id = {$type_id}"))) { $cmp = new ContactMemberPermission(); $cmp->setPermissionGroupId($gid); $cmp->setMemberId($member_id); $cmp->setObjectTypeId($type_id); if ($userType != "Guest" && $userType != "Guest Customer") { $cmp->setCanWrite(1); $cmp->setCanDelete(1); } else { $cmp->setCanWrite(0); $cmp->setCanDelete(0); } $cmp->save(); $perm = new stdClass(); $perm->m = $member_id; $perm->r = 1; $perm->w = 1; $perm->d = 1; $perm->o = $type_id; $permissions[] = $perm; } } } if (count($permissions)) { $stCtrl = new SharingTableController(); $stCtrl->afterPermissionChanged($contact->getPermissionGroupId(), $permissions); } } }
?> <?php echo pick_date_widget2('parameterValues[' . $parameter['name'] . ']'); ?> <?php } else { ?> <select name="<?php echo 'parameterValues[' . $parameter['name'] . ']'; ?> "> <?php $context = active_context(); if (isset($member_id) && $member_id > 0) { // filter by context passed by parameter $additional_member = Members::findById($member_id); if ($additional_member instanceof Member) { $context = array($additional_member); } } if (array_var($_REQUEST, 'from_email')) { $from_email = MailContents::findById(array_var($_REQUEST, 'from_email')); if ($from_email instanceof MailContent) { $context = $from_email->getMembers(); } } $companies = allowed_users_to_assign($context); foreach ($companies as $c) { if (config_option('can_assign_tasks_to_companies')) { ?> <option value="<?php
<?php $options = explode(",",user_config_option("filters_dashboard")); $activities = ApplicationLogs::getLastActivities(); $limit = $options[2]; $acts = array(); $acts['data'] = array(); foreach($activities as $activity){ $user = Contacts::findById($activity->getCreatedById()); if ($activity->getLogData() == 'member deleted') { $object = Members::findById($activity->getRelObjectId()); $member_deleted = true; } else { $object = Objects::findObject($activity->getRelObjectId()); } if($object || $member_deleted){ $key = $activity->getRelObjectId() . "-" . $activity->getCreatedById(); if(count($acts['data']) < ($limit*2)){ if(!array_key_exists($key, $acts['data'])){ $acts['data'][$key] = $object; $acts['created_by'][$key] = $user; $acts['act_data'][$key] = $activity->getActivityDataView($user,$object); $acts['date'][$key] = $activity->getCreatedOn() instanceof DateTimeValue ? friendly_date($activity->getCreatedOn()) : lang('n/a'); }else{ $acts['data'][$key] = $object; $acts['created_by'][$key] = $user; $acts['act_data'][$key] = $activity->getActivityDataView($user,$object,true); $acts['date'][$key] = $activity->getCreatedOn() instanceof DateTimeValue ? friendly_date($activity->getCreatedOn()) : lang('n/a'); }
/** * @author Ignacio Vazquez <elpepe.uy at gmail dot com> * Handle quick add submit */ function quick_add() { if (array_var($_GET, 'current') == 'overview-panel') { ajx_current("reload"); } else { ajx_current("empty"); } //---------- REQUEST PARAMS -------------- // $_POST = Array ( // [member] => Array ( // [name] => pepe 333 // [dimension_id] => 1 // [parent_member_id] => 0 // [dimension_id] => 19 // ) // [contact] => Array ( // [email] => slkdjflksjdflksdf@kldsjflkdf.com // [user] => Array ( // [create-user]=>on // [type] => 25 // [first_name] => // [surname] => // ) //---------------------------------------- //alert_r($_POST['contact']); // Init variables $max_users = config_option('max_users'); if ($max_users && Contacts::count() >= $max_users) { flash_error(lang('maximum number of users reached error')); ajx_current("empty"); return; } if (!can_manage_security(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $email = trim(array_var(array_var($_POST, 'contact'), 'email')); $member = array_var($_POST, 'member'); $name = array_var($member, 'name'); $firstName = trim(array_var(array_var($_POST, 'contact'), 'first_name')); $surname = trim(array_var(array_var($_POST, 'contact'), 'surname')); $parentMemberId = array_var($member, 'parent_member_id'); $objectType = ObjectTypes::findById(array_var($member, 'object_type_id'))->getName(); // 'person', 'company' $dimensionId = array_var($member, 'dimension_id'); $company = array_var(array_var(array_var($_POST, 'contact'), 'user'), 'company_id'); // Create new instance of Contact and set the basic fields $contact = new Contact(); $contact->setObjectName($name); if ($firstName) { $contact->setFirstName($firstName); } else { $contact->setFirstName($name); } if ($surname) { $contact->setSurname($surname); } $contact->setCompanyId($company); $contact->setIsCompany($objectType == "company"); if ($parentMemberId) { if ($companyId = Members::findById($parentMemberId)->getObjectId()) { $contact->setCompanyId($companyId); } } // Save Contact try { DB::beginWork(); $contact->save(); if ($email && is_valid_email($email)) { if (!Contacts::validateUniqueEmail($email)) { DB::rollback(); flash_error(lang("email address must be unique")); return false; } else { if (!array_var(array_var(array_var($_POST, 'contact'), 'user'), 'create-user')) { $contact->addEmail($email, 'personal', true); } flash_success(lang("success add contact", $contact->getObjectName())); } } // User settings $user = array_var(array_var($_POST, 'contact'), 'user'); $user['username'] = str_replace(" ", "", strtolower($name)); $this->createUserFromContactForm($user, $contact->getId(), $email); // Reload contact again due to 'createUserFromContactForm' changes Hook::fire("after_contact_quick_add", Contacts::instance()->findById($contact->getId()), $ret); DB::commit(); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // Reload evt_add("reload dimension tree", $dimensionId); }
function save_permission_group() { ajx_current("empty"); if (!can_manage_dimension_members(logged_user())) { flash_error(lang('no access permissions')); return; } $member = Members::findById(array_var($_REQUEST, 'member_id')); if (!$member instanceof Member) { flash_error(lang('member dnx')); return; } $members = array($member); // if apply to submembers is checked get submembers verifying logged user permissions if (array_var($_REQUEST, 'apply_submembers') > 0) { $dimension = $member->getDimension(); $pg_ids_str = implode(',', logged_user()->getPermissionGroupIds()); $extra_conditions = ""; if (!$dimension->hasAllowAllForContact($pg_ids_str)) { $extra_conditions = " AND EXISTS (SELECT cmp.member_id FROM " . TABLE_PREFIX . "contact_member_permissions cmp \r\n\t\t\t\t\tWHERE cmp.member_id=" . TABLE_PREFIX . "members.id AND cmp.permission_group_id IN (" . $pg_ids_str . "))"; } $childs = $member->getAllChildren(true, null, $extra_conditions); $members = array_merge($members, $childs); } $pg_id = array_var($_REQUEST, 'pg_id'); $permissions = array_var($_REQUEST, 'perms'); $all_permissions = array(); foreach ($members as $member) { $all_permissions[$member->getId()] = json_decode($permissions); foreach ($all_permissions[$member->getId()] as &$perm) { $perm->m = $member->getId(); } } $all_permissions_str = json_encode(array_flat($all_permissions)); $_POST['permissions'] = $all_permissions_str; try { DB::beginWork(); $_POST['root_perm_genid'] = 'dummy_root_perm_genid'; save_user_permissions_background(logged_user(), $pg_id, false, array(), true); $null = null; Hook::fire('after_save_member_permissions_for_pg', $_REQUEST, $null); DB::commit(); flash_success(lang("permissions successfully saved")); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } }
function getMember() { return Members::findById($this->getMemberId()); }
function list_members() { if (!logged_user()->isAdminGroup()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_set_no_toolbar(); $dim_id = array_var($_REQUEST, 'dim', 0); $dimension = Dimensions::findById($dim_id); if (!$dimension instanceof Dimension) { flash_error(lang('dimension snx')); ajx_current("empty"); return; } if (isset($_REQUEST['page'])) { ajx_replace(true); } // parameters $page = array_var($_REQUEST, 'page'); $order_by = array_var($_REQUEST, 'order'); $order_by_dir = array_var($_REQUEST, 'order_dir'); // pagination params $items_x_page = array_var($_REQUEST, 'items_x_page', 20); if (!$page) { $page = 1; } $offset = $items_x_page * ($page - 1); // order defaults if (!$order_by) { $order_by = 'name'; } if (!in_array($order_by_dir, array('ASC', 'DESC'))) { $order_by_dir = 'ASC'; } // this function already checks dimension options $dim_name = $dimension->getName(); // permissions sql $perm_sql = ""; if ($dimension->getDefinesPermissions() && !logged_user()->isAdministrator()) { $pg_ids = logged_user()->getPermissionGroupIds(); $perm_sql = " AND EXISTS (SELECT cmp.member_id FROM " . TABLE_PREFIX . "contact_member_permissions cmp WHERE cmp.member_id=m.id AND cmp.permission_group_id IN (" . implode(',', $pg_ids) . "))"; } $main_sql = "SELECT m.id, l.created_on, l.created_by_id, l.member_id FROM " . TABLE_PREFIX . "members m LEFT JOIN " . TABLE_PREFIX . "application_logs l ON l.member_id=m.id AND l.action='add' WHERE m.dimension_id='{$dim_id}' {$perm_sql}"; $sql = "{$main_sql}\r\n\t\t\t\tORDER BY {$order_by} {$order_by_dir} \r\n\t\t\t\tLIMIT {$offset}, {$items_x_page}"; $rows = DB::executeAll($sql); $count_sql = str_replace("SELECT m.id, l.created_on, l.created_by_id, l.member_id FROM", "SELECT count(*) as total FROM", $main_sql); $count_row = DB::executeAll($count_sql); $members = array(); $ids = array(); $log_data = array(); foreach ($rows as $row) { $members[] = Members::findById($row['id']); $log_data[$row['id']] = array('created_on' => $row['created_on'], 'created_by_id' => $row['created_by_id']); } $member_type_ids = array_flat(DB::executeAll("SELECT object_type_id FROM " . TABLE_PREFIX . "dimension_object_types WHERE dimension_id={$dim_id} AND is_root=1")); $member_types = ObjectTypes::findAll(array('conditions' => 'id IN (' . implode(',', $member_type_ids) . ')')); tpl_assign('members', $members); tpl_assign('log_data', $log_data); tpl_assign('dimension', $dimension); tpl_assign('dimension_name', $dim_name); tpl_assign('member_types', $member_types); tpl_assign('page', $page); tpl_assign('total_items', $count_row[0]['total']); tpl_assign('items_x_page', $items_x_page); tpl_assign('order_by', $order_by); tpl_assign('order_by_dir', $order_by_dir); }
/** * Returns the parent member or null if there isn't one * @return Member */ function getParentMember() { if ($this->parent_member == null) { if ($this->getParentMemberId() != 0) { $this->parent_member = Members::findById($this->getParentMemberId()); } } return $this->parent_member; }
function quick_config_filter_activity(){ $this->setLayout('empty'); $submited_values = array_var($_POST, 'filter'); $members = array_var($_GET, 'members'); tpl_assign('members', array_var($_GET, 'members')); $member_name = lang('view'); $obj_member = Members::findById($members); if($obj_member){ $type_obj = ObjectTypes::findById($obj_member->getObjectTypeId()); if($obj_member){ $member_name = lang($type_obj->getName()); } } tpl_assign('dim_name', $member_name); $filters_default = ContactConfigOptions::getFilterActivity(); $filters = ContactConfigOptionValues::getFilterActivityMember($filters_default->getId(),$members); if(!$filters){ $filters = ContactConfigOptions::getFilterActivity(); $filter_value = $filters->getDefaultValue(); tpl_assign('id', $filters->getId()); }else{ $filter_value = $filters->getValue(); tpl_assign('id', ''); } $filters_def = explode(",",$filter_value); // if($filters_def[0] == 1){ // tpl_assign('checked_dimension_yes', 'checked="checked"'); // }else{ // tpl_assign('checked_dimension_no', 'checked="checked"'); // } if($filters_def[1] == 1){ tpl_assign('timeslot', 'checked="checked"'); }else{ tpl_assign('timeslot', ''); } tpl_assign('show', $filters_def[2]); // if($filters_def[3] == 1){ // tpl_assign('checked_view_downloads_yes', 'checked="checked"'); // }else{ // tpl_assign('checked_view_downloads_no', 'checked="checked"'); // } if(is_array($submited_values)) { $members = array_var($submited_values,"members"); $new_value = array_var($submited_values,"dimension",0) . "," . array_var($submited_values,"timeslot",0) . "," . array_var($submited_values,"show",10). "," . array_var($submited_values,"view_downloads",0); $filters_default = ContactConfigOptions::getFilterActivity(); if(array_var($submited_values,"apply_everywhere") == 1){ $filters_default->setDefaultValue($new_value); $filters_default->save(); $filters = ContactConfigOptionValues::getFilterActivityDelete($filters_default->getId()); }else{ $filters = ContactConfigOptionValues::getFilterActivityMember($filters_default->getId(),$members); // update cache if available if (GlobalCache::isAvailable()) { GlobalCache::delete('user_config_option_'.logged_user()->getId().'_'.$filters_default->getName()."_".$members); } if(!$filters){ $filter_opt = new ContactConfigOptionValue(); $filter_opt->setOptionId($filters_default->getId()); $filter_opt->setContactId(logged_user()->getId()); $filter_opt->setValue($new_value); $filter_opt->setMemberId($members); $filter_opt->save(); }else{ $filters->setValue($new_value); $filters->save(); } evt_add("user preference changed", array('name' => $filters_default->getName()."_".$members, 'value' => $new_value)); } ajx_current("reload"); } }
function getActivityDataView($user, $object, $made_several_changes = false) { if (!$user) { return false; } $userName = "******" . $user->getObjectName() . "</b>"; $icon_class = ""; if ($object instanceof ProjectFile) { $path = explode("-", str_replace(".", "_", str_replace("/", "-", $object->getTypeString()))); $acc = ""; foreach ($path as $p) { $acc .= $p; $icon_class .= ' ico-' . $acc; $acc .= "-"; } } // Build data depending on type if ($object instanceof ContentDataObject) { if ($object instanceof Contact && $object->isUser()) { $type = "user"; } else { $type = $object->getObjectTypeName(); } if ($type != 'Time' || $type == 'Time' && $object->getRelObjectId() != 0) { $object_link = '<br /><a style="font-weight:bold" href="' . $object->getObjectUrl() . '">' . '<span style="padding: 2px 0 3px 24px;" class="link-ico ico-unknown ico-' . $type . $icon_class . '"/>' . clean($object->getObjectName()) . '</a>'; } else { //if it is a general timeslot $object_link = '<span style="padding: 1px 0 3px 18px; font-weight:bold;" class="db-ico ico-unknown ico-' . $type . $icon_class . '"/>' . clean($object->getObjectName()); } } elseif ($object instanceof Member) { $object_type = ObjectTypes::findById($object->getObjectTypeId()); $type = $object_type->getName(); $object_url = ""; $onclick = ""; switch ($type) { case "folder": $onclick = "og.crpm.onFolderClick(" . $object->getId() . ");"; break; case "project": $onclick = "og.projects.onProjectClick(" . $object->getId() . ");"; break; case "customer": $onclick = "og.customers.onCustomerClick(" . $object->getId() . ");"; break; case "workspace": $onclick = "og.workspaces.onWorkspaceClick(" . $object->getId() . ");"; break; default: $onclick = ""; } $object_link = '<br /><a class="internalLink" href="javascript:void(0);" onclick="' . $onclick . '">' . '<span style="padding: 1px 0 3px 18px;" class="db-ico ico-unknown ico-' . $type . $icon_class . '"/>' . clean($this->getObjectName()) . '</a>'; return lang('activity ' . $this->getAction(), lang('the ' . $type, " "), $userName, $object_link); } else { $object_link = '<br />' . clean($this->getObjectName()) . ' ' . lang('object is deleted'); return lang('activity ' . $this->getAction(), "", $userName, $object_link); } if ($made_several_changes) { $this->setAction(ApplicationLogs::ACTION_MADE_SEVERAL_CHANGES); } switch ($this->getAction()) { case ApplicationLogs::ACTION_MADE_SEVERAL_CHANGES: /*$object_history = '<a style="font-weight:bold" href="' . $object->getViewHistoryUrl() . '"> '. '<span style="padding: 1px 0 3px 18px;" class="db-ico ico-unknown ico-history"/>'.lang('view history').'</a>';*/ return lang('activity ' . $this->getAction(), lang('the ' . $type . ' activity', $object_link), $userName, ""); case ApplicationLogs::ACTION_EDIT: case ApplicationLogs::ACTION_ADD: case ApplicationLogs::ACTION_DELETE: case ApplicationLogs::ACTION_TRASH: case ApplicationLogs::ACTION_UNTRASH: case ApplicationLogs::ACTION_OPEN: case ApplicationLogs::ACTION_CLOSE: case ApplicationLogs::ACTION_ARCHIVE: case ApplicationLogs::ACTION_UNARCHIVE: case ApplicationLogs::ACTION_READ: case ApplicationLogs::ACTION_DOWNLOAD: case ApplicationLogs::ACTION_UPLOAD: case ApplicationLogs::ACTION_CHECKIN: case ApplicationLogs::ACTION_CHECKOUT: if ($object instanceof ContentDataObject) { return lang('activity ' . $this->getAction(), lang('the ' . $type, " "), $userName, $object_link); } case ApplicationLogs::ACTION_SUBSCRIBE: case ApplicationLogs::ACTION_UNSUBSCRIBE: $user_ids = explode(",", $this->getLogData()); if (count($user_ids) < 8) { $users_str = ""; foreach ($user_ids as $usid) { $su = Contacts::findById($usid); if ($su instanceof Contact) { $users_str .= '<a style="font-weight:bold" href="' . $su->getObjectUrl() . '"> <span style="padding: 0 0 3px 18px;" class="db-ico ico-unknown ico-user"/>' . clean($su->getObjectName()) . '</a>, '; } } if (count($user_ids) == 1) { $users_text = substr(trim($users_str), 0, -1); } else { $users_text = lang('x users', count($user_ids), ": {$users_str}"); } } else { $users_text = lang('x users', count($user_ids), ""); } if ($object instanceof ContentDataObject) { return lang('activity ' . $this->getAction(), lang('the ' . $object->getObjectTypeName(), " "), $userName, $object_link, $users_text); } case ApplicationLogs::ACTION_COMMENT: if ($object instanceof ContentDataObject) { $rel_object = Objects::findObject($this->getRelObjectId()); $commented_object = null; if ($rel_object instanceof Comment) { $commented_object = $rel_object->getRelObject(); } $obj_type_name = $commented_object instanceof ContentDataObject ? $commented_object->getObjectTypeName() : $rel_object->getObjectTypeName(); $comentText = $this->getLogData(); return lang('activity ' . $this->getAction(), lang('the ' . $obj_type_name, " "), $userName, $object_link, $comentText); } case ApplicationLogs::ACTION_LINK: case ApplicationLogs::ACTION_UNLINK: $linked_object_link = ''; $linked_object = Objects::findObject($this->getLogData()); if ($linked_object instanceof ApplicationDataObject) { $icon_class = ""; if ($linked_object instanceof ProjectFile) { $path = explode("-", str_replace(".", "_", str_replace("/", "-", $linked_object->getTypeString()))); $acc = ""; foreach ($path as $p) { $acc .= $p; $icon_class .= ' ico-' . $acc; $acc .= "-"; } } $linked_object_link = '<a style="font-weight:bold" href="' . $linked_object->getObjectUrl() . '"> <span style="padding: 1px 0 3px 18px;" class="db-ico ico-unknown ico-' . $linked_object->getObjectTypeName() . $icon_class . '"/>' . clean($linked_object->getObjectName()) . '</a>'; } if ($object instanceof ContentDataObject) { return lang('activity ' . $this->getAction(), lang('the ' . $object->getObjectTypeName(), " "), $userName, $object_link, $linked_object instanceof ApplicationDataObject ? lang('the ' . $linked_object->getObjectTypeName()) : '', $linked_object_link); } case ApplicationLogs::ACTION_LOGIN: case ApplicationLogs::ACTION_LOGOUT: return lang('activity ' . $this->getAction(), $userName); case ApplicationLogs::ACTION_MOVE: $from_to = explode(";", $this->getLogData()); $to = ""; $from = ""; if (is_array($from_to) && count($from_to) > 0) { foreach ($from_to as $fr_to) { if (strpos($fr_to, 'from:') !== FALSE) { $from = $fr_to; } elseif (strpos($fr_to, 'to:') !== FALSE) { $to = $fr_to; } } } //to $to_str = ""; $to_str_member = ""; $members_ids_csv = str_replace("to:", "", $to); $mem_ids = explode(",", $members_ids_csv); if (is_array($mem_ids) && count($mem_ids) > 0) { foreach ($mem_ids as $mem_id) { $member = Members::findById($mem_id); if ($member) { $to_str_member .= $member->getName() . ", "; } } if ($to_str_member != "") { $to_str_member = substr($to_str_member, 0, -2); $to_str .= $to_str_member; } } //from $from_str = ""; $from_str_member = ""; $members_ids_csv_from = str_replace("from:", "", $from); $mem_ids_from = explode(",", $members_ids_csv_from); if (is_array($mem_ids_from) && count($mem_ids_from) > 0) { foreach ($mem_ids_from as $mem_id) { $member = Members::findById($mem_id); if ($member) { $from_str_member .= $member->getName() . ", "; } } if ($from_str_member != "") { $from_str_member = substr($from_str_member, 0, -2); $from_str .= $from_str_member; } } if ($object instanceof ContentDataObject) { if ($to_str != "") { return lang('activity ' . $this->getAction() . ' from to', lang('the ' . $object->getObjectTypeName()), $userName, $object_link, $from_str, $to_str); } } else { if ($to_str != "") { return lang('activity ' . $this->getAction() . ' from to', lang('the ' . $this->getRelObjectManager()), $userName, $object_link, $from_str, $to_str); } } case ApplicationLogs::ACTION_COPY: $to_str = ""; $to_str_member = ""; $members_ids_csv = str_replace("to:", "", $this->getLogData()); $mem_ids = explode(",", $members_ids_csv); if (is_array($mem_ids) && count($mem_ids) > 0) { foreach ($mem_ids as $mem_id) { $member = Members::findById($mem_id); if ($member) { $to_str_member .= $member->getName() . ", "; } } if ($to_str_member != "") { $to_str_member = substr($to_str_member, 0, -2); $to_str .= $to_str_member; } } if ($object instanceof ContentDataObject) { if ($to_str != "") { return lang('activity ' . $this->getAction() . ' to', lang('the ' . $object->getObjectTypeName()), $userName, $object_link, $to_str); } } else { if ($to_str != "") { return lang('activity ' . $this->getAction() . ' to', lang('the ' . $this->getRelObjectManager()), $userName, $object_link, $to_str); } } default: return $this->getAction(); false; } return $this->getAction(); false; }