/**
  * 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);
     }
 }
Exemple #2
0
	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;
 }
Exemple #10
0
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() . '">&nbsp;'.
				'<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()).'&nbsp;'.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() . '">&nbsp;'.
				'<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().'">&nbsp;<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() . '">&nbsp;<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());
             }
         }
     }
 }
Exemple #13
0
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;
     }
 }
Exemple #15
0
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)) {
Exemple #17
0
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);
}
Exemple #18
0
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');
                }
            }
        }
    }
}
Exemple #19
0
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 
Exemple #23
0
<?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);
 }
Exemple #28
0
 /**
  * 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()) . '&nbsp;' . 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() . '">&nbsp;'.
             		'<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() . '">&nbsp;<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() . '">&nbsp;<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;
 }