Esempio n. 1
0
 static function getWorkspaces($limit = 10)
 {
     $ws_dim = Dimensions::findByCode('workspaces');
     $ws_object_type = self::instance()->getObjectTypeId();
     $sql = "dimension_id = " . $ws_dim->getId() . " AND object_type_id = {$ws_object_type}";
     $allowed_members = array();
     $add_ctx_members = true;
     $context = active_context();
     foreach ($context as $selection) {
         if ($selection instanceof Dimension && $selection->getCode() == 'workspaces') {
             $add_ctx_members = false;
         } else {
             if ($selection instanceof Member && $selection->getObjectTypeId() == $ws_object_type) {
                 $allowed_members[] = $selection->getId();
             }
         }
     }
     if ($add_ctx_members && count($allowed_members) > 0) {
         $sql .= " AND parent_member_id IN (" . implode(",", $allowed_members) . ")";
     } else {
         $sql .= " AND parent_member_id = 0";
     }
     $members = Members::findAll(array('conditions' => $sql, 'order' => 'name'));
     $res = array();
     foreach ($members as $mem) {
         // controlar permissos para cada f*****g miembro
     }
     return $members;
 }
Esempio n. 2
0
function workspaces_total_task_timeslots_group_by_criterias($args, &$ret)
{
    $wdimension = Dimensions::findByCode('workspaces');
    $tdimension = Dimensions::findByCode('tags');
    $ret[] = array('val' => 'dim_' . $wdimension->getId(), 'name' => $wdimension->getName());
    $ret[] = array('val' => 'dim_' . $tdimension->getId(), 'name' => $tdimension->getName());
}
Esempio n. 3
0
function workspaces_update_5_6()
{
    // create associations
    DB::execute("\n\t\t\tINSERT INTO `" . TABLE_PREFIX . "dimension_member_associations` (`dimension_id`,`object_type_id`,`associated_dimension_id`, `associated_object_type_id`, `is_required`,`is_multiple`, `keeps_record`) VALUES\n\t\t\t((SELECT id from " . TABLE_PREFIX . "dimensions WHERE code = 'workspaces'),(SELECT id FROM " . TABLE_PREFIX . "object_types WHERE name = 'workspace'),(SELECT id from " . TABLE_PREFIX . "dimensions WHERE code = 'feng_persons'),(SELECT id FROM " . TABLE_PREFIX . "object_types WHERE name = 'person' LIMIT 1),0,1,0),\n\t\t\t((SELECT id from " . TABLE_PREFIX . "dimensions WHERE code = 'workspaces'),(SELECT id FROM " . TABLE_PREFIX . "object_types WHERE name = 'workspace'),(SELECT id from " . TABLE_PREFIX . "dimensions WHERE code = 'feng_persons'),(SELECT id FROM " . TABLE_PREFIX . "object_types WHERE name = 'company' LIMIT 1),0,1,0);\n\t\t");
    // instantiate actual associations
    $ws_dim = Dimensions::findByCode('workspaces');
    $ws_ot = ObjectTypes::findByName('workspace');
    $ws_members = Members::findAll(array('conditions' => 'dimension_id = ' . $ws_dim->getId() . ' AND object_type_id = ' . $ws_ot->getId()));
    foreach ($ws_members as $ws_mem) {
        // after saving permissions the associations are instantiated by 'core_dimensions' plugin
        save_member_permissions($ws_mem);
    }
}
Esempio n. 4
0
function mail_allowed_subscribers($object, &$contacts) {
	if ($object instanceof MailContent) {
		$person_dim = Dimensions::findByCode('feng_persons');
		$person_dim_id = $person_dim instanceof Dimension ? $person_dim->getId() : "0";
		$sql = "SELECT member_id FROM ".TABLE_PREFIX."object_members om INNER JOIN ".TABLE_PREFIX."members m ON m.id=om.member_id
			WHERE om.object_id = ".$object->getId()." AND om.is_optimization=0 AND m.dimension_id NOT IN (".$person_dim_id.")";
		$member_ids_res = DB::executeAll($sql);
		
		$member_ids = array();
		foreach ($member_ids_res as $row) {
			if (trim($row['member_id']) != "") $member_ids[] = $row['member_id'];
		}
		
		if (!$member_ids || count($member_ids) == 0) {
			$contacts = array(logged_user());
		}
	}
}
 function list_all()
 {
     ajx_current("empty");
     // Get all variables from request
     $start = array_var($_GET, 'start', 0);
     $limit = array_var($_GET, 'limit', config_option('files_per_page'));
     $order = 'name';
     $order_dir = array_var($_GET, 'dir');
     $action = array_var($_GET, 'action');
     $attributes = array("ids" => explode(',', array_var($_GET, 'ids')));
     if (!$order_dir) {
         switch ($order) {
             case 'name':
                 $order_dir = 'ASC';
                 break;
             default:
                 $order_dir = 'DESC';
         }
     }
     $dim_controller = new DimensionController();
     $members = $dim_controller->initial_list_dimension_members(Dimensions::findByCode('workspaces')->getId(), ObjectTypes::findByName('workspace')->getId(), $context, true);
     $ids = array();
     foreach ($members as $m) {
         $ids[] = $m['object_id'];
     }
     $members = active_context_members(false);
     // Context Members Ids
     $members_sql = "";
     if (count($members) > 0) {
         $members_sql .= " AND parent_member_id IN (" . implode(',', $members) . ")";
     } else {
         $members_sql .= " AND parent_member_id = 0";
     }
     $res = Members::findAll(array("conditions" => "object_id IN (" . implode(',', $ids) . ") " . $members_sql, 'offset' => $start, 'limit' => $limit, 'order' => "{$order} {$order_dir}"));
     $object = $this->prepareObject($res, $start, $limit, count($res));
     ajx_extra_data($object);
     tpl_assign("listing", $object);
 }
Esempio n. 6
0
function workspaces_quickadd_extra_fields($parameters) {
	if (array_var($parameters, 'dimension_id') == Dimensions::findByCode("workspaces")->getId()) {
		$parent_member = Members::findById(array_var($parameters, 'parent_id'));
		if ($parent_member instanceof Member && $parent_member->getObjectId() > 0) {
			$dimension_object = Objects::findObject($parent_member->getObjectId());
			
			$fields = $dimension_object->manager()->getPublicColumns();
			$color_columns = array();
			foreach ($fields as $f) {
				if ($f['type'] == DATA_TYPE_WSCOLOR) {
					$color_columns[] = $f['col'];
				}
			}
			foreach ($color_columns as $col) {
				foreach ($fields as &$f) {
					if ($f['col'] == $col && $dimension_object->columnExists($col)) {
						$color_code = $dimension_object->getColumnValue($col);
						echo '<input type="hidden" name="dim_obj['.$col.']" value="'.$color_code.'" />';
					}
				}
			}
		}
	}
}
 static function reloadPersonsDimension()
 {
     if (Plugins::instance()->isActivePlugin('core_dimensions')) {
         $person_dim = Dimensions::findByCode('feng_persons');
         if ($person_dim instanceof Dimension) {
             evt_add('reload dimension tree', $person_dim->getId());
         }
     }
 }
 function modifyMemberValidations($member)
 {
     if ($member instanceof Member) {
         $member->add_skip_validation('uniqueness of parent - name');
     } else {
         if ($this->getId() > 0 && Plugins::instance()->isActivePlugin('core_dimensions')) {
             $dim = Dimensions::findByCode('feng_persons');
             if ($dim instanceof Dimension) {
                 $m = Members::findByObjectId($this->getId(), $dim->getId());
                 if ($m instanceof Member) {
                     $m->add_skip_validation('uniqueness of parent - name');
                 }
             }
         }
     }
 }
Esempio n. 9
0
			if (value) {
				
				var parent = 0 ;
				var create_user = ( container.find('input[name="contact[user][create-user]"]').is(':checked') ) ?'on':'' ;
				//var password = container.find('input[name="contact[user][password]"]').val();
				//var password_a =container.find('input[name="contact[user][password_a]"]').val();
				var mail = container.find('input[name="contact[email]"]').val();
				
				var user_type = container.find('select[name="contact[user][type]"] option:selected').val();
				var company_id = container.find('select[name="contact[user][company_id]"] option:selected').val();
				
				var postVars = {
					'member[object_type_id]': <?php echo ObjectTypes::findByName('person')->getId()?> ,
					'member[name]': value,
					'member[parent_member_id]' : parent,
					'member[dimension_id]': <?php echo Dimensions::findByCode('feng_persons')->getId()?>,
					'contact[email]': mail,
					'contact[user][create-user]' : create_user,
					'contact[user][type]': user_type,
					'contact[user][company_id]': company_id
				};

				var firstName = '';
				var surname = '';
				var nameParts = value.split(' ');
				if (nameParts && nameParts.length > 1) {
					for ( var i in nameParts ){
						if (i == "remove") continue;
						var word = $.trim(nameParts[i]);
						if (word ) {
							if (!firstName) {
Esempio n. 10
0
	'date_format': <?php echo json_encode(user_config_option('date_format')) ?>,
	'date_format_tip': <?php echo json_encode(date_format_tip(user_config_option('date_format'))) ?>,
	'start_monday': <?php echo user_config_option('start_monday') ? '1' : '0' ?>,
	'draft_autosave_timeout': <?php echo json_encode(user_config_option('draft_autosave_timeout')) ?>,
	'drag_drop_prompt': <?php echo json_encode(user_config_option('drag_drop_prompt')) ?>,
	'mail_drag_drop_prompt': <?php echo json_encode(user_config_option('mail_drag_drop_prompt')) ?>,
	'access_member_after_add': <?php echo user_config_option('access_member_after_add') ? '1' : '0' ?>,
	'access_member_after_add_remember': <?php echo user_config_option('access_member_after_add_remember') ? '1' : '0' ?>,
	'listing_preferences': []
};
<?php
	$listing_preferences = ContactConfigOptions::getOptionsByCategoryName('listing preferences');
	foreach ($listing_preferences as $lp) {
		if (str_starts_with($lp->getName(), 'lp_dim_')) {
			$dcode = str_replace('lp_dim_', '', str_replace('_show_as_column', '', $lp->getName()));
			$dim = Dimensions::findByCode($dcode);
			?>og.preferences['listing_preferences']['<?php echo 'lp_dim_'.$dim->getId().'_show_as_column' ?>'] = <?php echo user_config_option($lp->getName()) ? '1' : '0'?>;<?php
		}
	} 
?>
og.breadcrumbs_skipped_dimensions = [];

Ext.Ajax.timeout = <?php echo get_max_execution_time()*1100 // give a 10% margin to PHP's timeout ?>;
og.musicSound = new Sound();
og.systemSound = new Sound();

var quickAdd = new og.QuickAdd({renderTo:'quickAdd'});

<?php if (!defined('DISABLE_JS_POLLING') || !DISABLE_JS_POLLING) { ?>
setInterval(function() {
	og.openLink(og.getUrl('object', 'popup_reminders'), {
Esempio n. 11
0
function core_dimensions_quickadd_extra_fields($parameters) {
	if (array_var($parameters, 'dimension_id') == Dimensions::findByCode("feng_persons")->getId()) {
		tpl_display(PLUGIN_PATH."/core_dimensions/templates/quickadd_extra_fields.php");
	}
}
Esempio n. 12
0
 private function list_members($request)
 {
     $service = $request['srv'];
     $members = array();
     $type = ObjectTypes::instance()->findByName($service);
     $typeId = $type->getId();
     $ids = array();
     $dimensionController = new DimensionController();
     foreach ($dimensionController->initial_list_dimension_members(Dimensions::findByCode('customer_project')->getId(), $typeId) as $member) {
         $ids[] = $member['object_id'];
     }
     if (count($ids)) {
         $args['conditions'] = " `object_id` IN (" . implode(",", $ids) . ") AND object_type_id = {$typeId}";
         foreach (Members::instance()->findAll($args) as $member) {
             /* @var $member Member */
             $memberInfo = array('id' => $member->getId(), 'name' => $member->getName(), 'type' => $service, 'path' => $member->getPath());
             $members[] = $memberInfo;
         }
     }
     return $this->response('json', $members);
 }
 /**
  * Returns true if $user can delete this email
  *
  * @param Contact $user
  * @return boolean
  */
 function canDelete(Contact $user)
 {
     $account = $this->getAccount();
     $members = $this->getMembers();
     $persons_dim = Dimensions::findByCode('feng_persons');
     $tmp = array();
     foreach ($members as $m) {
         if (!$persons_dim instanceof Dimension || $m->getDimensionId() != $persons_dim->getId()) {
             $tmp[] = $m;
         }
     }
     $members = $tmp;
     if ($account instanceof MailAccount) {
         // if classified
         if (count($members) > 0) {
             return $account->getContactId() == logged_user()->getId() || can_delete($user, $members, $this->getObjectTypeId());
         } else {
             $macs = MailAccountContacts::instance()->count(array('`account_id` = ? AND `contact_id` = ? AND `can_edit` = 1', $account->getId(), $user->getId()));
             return $account->getContactId() == logged_user()->getId() || $macs > 0;
         }
     } else {
         // if classified
         return can_delete($user, $members, $this->getObjectTypeId());
     }
 }
 /**
  * Returns a list of emails according to the requested parameters
  *
  * @param string $tag
  * @param array $attributes
  * @param Project $project
  * @return array
  */
 function getEmails($account_id = null, $state = null, $read_filter = "", $classif_filter = "", $context = null, $start = null, $limit = null, $order_by = 'received_date', $dir = 'ASC', $join_params = null, $archived = false, $conversation_list = null, $only_count_result = false)
 {
     $mailTablePrefix = "e";
     if (!$limit) {
         $limit = user_config_option('mails_per_page') ? user_config_option('mails_per_page') : config_option('files_per_page');
     }
     $accountConditions = "";
     // Check for accounts
     $accountConditions = '';
     if (isset($account_id) && $account_id > 0) {
         //Single account
         $accountConditions = " AND {$mailTablePrefix}.account_id = " . DB::escape($account_id);
     } else {
         // show mails for all visible accounts and classified mails where logged_user has permissions so we don't filter by account_id
         /*// show emails from other accounts
         		$macs = MailAccountContacts::instance()->getByContact(logged_user());
         		$acc_ids = array(0);
         		foreach ($macs as $mac) $acc_ids[] = $mac->getAccountId();
         		
         		// permission conditions
         		$pgs = ContactPermissionGroups::getPermissionGroupIdsByContactCSV(logged_user()->getId());
         		if (trim($pgs == '')) $pgs = '0';
         		$perm_sql = "(SELECT count(*) FROM ".TABLE_PREFIX."sharing_table st WHERE st.object_id = $mailTablePrefix.object_id AND st.group_id IN ($pgs)) > 0";
         		
         		// show mails for all visible accounts and classified mails where logged_user has permissions
         		$accountConditions = " AND ($mailTablePrefix.account_id IN (" . implode(",", $acc_ids) . ") OR $perm_sql)";*/
     }
     // Check for unclassified emails
     $classified = '';
     if ($classif_filter != '' && $classif_filter != 'all') {
         $persons_dim = Dimensions::findByCode('feng_persons');
         $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : "0";
         $classified = "AND " . ($classif_filter == 'unclassified' ? "NOT " : "");
         $classified .= "o.id IN (SELECT om.object_id FROM " . TABLE_PREFIX . "object_members om INNER JOIN " . TABLE_PREFIX . "members m ON m.id=om.member_id WHERE m.dimension_id<>{$persons_dim_id})";
     }
     // if not filtering by account or classification then check that emails are classified or from one of my accounts
     if ($classified == '' && $accountConditions == '') {
         $macs = MailAccountContacts::instance()->getByContact(logged_user());
         $acc_ids = array(0);
         foreach ($macs as $mac) {
             $acc_ids[] = $mac->getAccountId();
         }
         $accountConditions = " AND ({$mailTablePrefix}.account_id IN (" . implode(',', $acc_ids) . ") OR EXISTS (\r\n\t\t\t\t\tSELECT om1.object_id FROM " . TABLE_PREFIX . "object_members om1 \r\n\t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "members m1 ON m1.id=om1.member_id \r\n\t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "dimensions d1 ON d1.id=m1.dimension_id \r\n\t\t\t\t\tWHERE om1.object_id={$mailTablePrefix}.object_id AND d1.is_manageable=1) ) ";
     }
     // Check for draft, junk, etc. emails
     if ($state == "draft") {
         $stateConditions = " {$mailTablePrefix}.state = '2'";
     } else {
         if ($state == "sent") {
             $stateConditions = " {$mailTablePrefix}.state IN ('1','3','5')";
         } else {
             if ($state == "received") {
                 $stateConditions = " {$mailTablePrefix}.state IN ('0','5')";
             } else {
                 if ($state == "junk") {
                     $stateConditions = " {$mailTablePrefix}.state = '4'";
                 } else {
                     if ($state == "outbox") {
                         $stateConditions = " {$mailTablePrefix}.state >= 200";
                     } else {
                         $stateConditions = "";
                     }
                 }
             }
         }
     }
     // Check read emails
     if ($read_filter != "" && $read_filter != "all") {
         if ($read_filter == "unread") {
             $read = "AND NOT ";
             $subread = "AND NOT mc.";
         } else {
             $read = "AND ";
             $subread = "AND mc.";
         }
         $read2 = "id IN (SELECT rel_object_id FROM " . TABLE_PREFIX . "read_objects t WHERE contact_id = " . logged_user()->getId() . " AND id = t.rel_object_id AND t.is_read = '1')";
         $read .= $read2;
         $subread .= $read2;
     } else {
         $read = "";
         $subread = "";
     }
     $conversation_cond = "";
     $box_cond = "AND {$stateConditions}";
     if (isset($conversation_list) && $conversation_list > 0) {
         $conversation_cond = "AND e.conversation_last = 1";
     }
     $extra_conditions = "{$accountConditions} {$classified} {$read} {$conversation_cond} {$box_cond}";
     Hook::fire("listing_extra_conditions", null, $extra_conditions);
     return self::instance()->listing(array('limit' => $limit, 'start' => $start, 'order' => $order_by, 'order_dir' => $dir, 'extra_conditions' => $extra_conditions, 'count_results' => false, 'only_count_results' => $only_count_result, 'join_params' => $join_params));
 }
Esempio n. 15
0
 function quick_add_task()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $notAllowedMember = '';
     if (!ProjectTask::canAdd(logged_user(), active_context(), $notAllowedMember)) {
         if (str_starts_with($notAllowedMember, '-- req dim --')) {
             flash_error(lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in)));
         } else {
             flash_error(lang('no context permissions to add', lang("tasks"), $notAllowedMember));
         }
         ajx_current("empty");
         return;
     }
     ajx_current("empty");
     $task = new ProjectTask();
     $task_data = array_var($_POST, 'task');
     $parent_id = array_var($task_data, 'parent_id', 0);
     $parent = ProjectTasks::findById($parent_id);
     if (is_array($task_data)) {
         $task_data['due_date'] = getDateValue(array_var($task_data, 'task_due_date'));
         $task_data['start_date'] = getDateValue(array_var($task_data, 'task_start_date'));
         if ($task_data['due_date'] instanceof DateTimeValue) {
             $duetime = getTimeValue(array_var($task_data, 'task_due_time'));
             if (is_array($duetime)) {
                 $task_data['due_date']->setHour(array_var($duetime, 'hours'));
                 $task_data['due_date']->setMinute(array_var($duetime, 'mins'));
             }
             $task_data['due_date']->advance(logged_user()->getTimezone() * -3600);
             $task_data['use_due_time'] = is_array($duetime);
         }
         if ($task_data['start_date'] instanceof DateTimeValue) {
             $starttime = getTimeValue(array_var($task_data, 'task_start_time'));
             if (is_array($starttime)) {
                 $task_data['start_date']->setHour(array_var($starttime, 'hours'));
                 $task_data['start_date']->setMinute(array_var($starttime, 'mins'));
             }
             $task_data['start_date']->advance(logged_user()->getTimezone() * -3600);
             $task_data['use_start_time'] = is_array($starttime);
         }
         if (config_option("wysiwyg_tasks")) {
             $task_data['type_content'] = "html";
             $task_data['text'] = preg_replace("/[\n|\r|\n\r]/", '', array_var($task_data, 'text'));
         } else {
             $task_data['type_content'] = "text";
         }
         $task_data['object_type_id'] = $task->getObjectTypeId();
         $task->setFromAttributes($task_data);
         if (array_var($task_data, 'is_completed', false) == 'true') {
             $task->setCompletedOn(DateTimeValueLib::now());
             $task->setCompletedById(logged_user()->getId());
         }
         try {
             DB::beginWork();
             $task->save();
             $totalMinutes = array_var($task_data, 'hours') * 60 + array_var($task_data, 'minutes');
             $task->setTimeEstimate($totalMinutes);
             $task->save();
             $gb_member_id = array_var($task_data, 'member_id');
             $member_ids = array();
             $persons_dim = Dimensions::findByCode('feng_persons');
             $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : 0;
             if ($parent) {
                 if (count($parent->getMembers()) > 0) {
                     foreach ($parent->getMembers() as $member) {
                         if ($member->getDimensionId() != $persons_dim_id) {
                             $member_ids[] = $member->getId();
                         }
                     }
                 }
                 $task->setMilestoneId($parent->getMilestoneId());
                 $task->save();
             }
             if (count($member_ids) == 0) {
                 $member_ids = active_context_members(false);
             }
             if ($gb_member_id && is_numeric($gb_member_id)) {
                 $member_ids[] = $gb_member_id;
             }
             $object_controller = new ObjectController();
             $object_controller->add_to_members($task, $member_ids);
             //Add new work timeslot for this task
             //				if (array_var($task_data,'hours') != '' && array_var($task_data,'hours') > 0){
             //					$hours = array_var($task_data, 'hours');
             //					$hours = - $hours;
             //
             //					$timeslot = new Timeslot();
             //					$dt = DateTimeValueLib::now();
             //					$dt2 = DateTimeValueLib::now();
             //					$timeslot->setEndTime($dt);
             //					$dt2 = $dt2->add('h', $hours);
             //					$timeslot->setStartTime($dt2);
             //					$timeslot->setContactId(logged_user()->getId());
             //					$timeslot->setObjectId($task->getId());
             //					$timeslot->save();
             //				}
             ApplicationLogs::createLog($task, ApplicationLogs::ACTION_ADD);
             $assignee = $task->getAssignedToContact();
             if ($assignee instanceof Contact) {
                 $task->subscribeUser($assignee);
             }
             // create default reminder
             $reminder = new ObjectReminder();
             $reminder->setMinutesBefore(1440);
             $reminder->setType("reminder_email");
             $reminder->setContext("due_date");
             $reminder->setObject($task);
             $reminder->setUserId(0);
             $date = $task->getDueDate();
             if (!isset($minutes)) {
                 $minutes = 0;
             }
             if ($date instanceof DateTimeValue) {
                 $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60);
                 $reminder->setDate($rdate);
             }
             $reminder->save();
             $subs = array();
             if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) {
                 $json_subtasks = json_decode(array_var($_POST, 'multi_assignment'));
                 $line = 0;
                 foreach ($json_subtasks as $json_subtask) {
                     $subtasks[$line]['assigned_to_contact_id'] = $json_subtask->assigned_to_contact_id;
                     $subtasks[$line]['name'] = $json_subtask->name;
                     $subtasks[$line]['time_estimate_hours'] = $json_subtask->time_estimate_hours;
                     $subtasks[$line]['time_estimate_minutes'] = $json_subtask->time_estimate_minutes;
                     $line++;
                 }
                 Hook::fire('save_subtasks', $task, $subtasks);
                 $subtasks = ProjectTasks::findAll(array('conditions' => '`parent_id` = ' . DB::escape($task->getId())));
                 // findAll
                 foreach ($subtasks as $sub) {
                     $subs[] = $sub->getArrayInfo();
                 }
             }
             // subscribe
             $task->subscribeUser(logged_user());
             DB::commit();
             // notify asignee
             if (array_var($task_data, 'notify') == 'true') {
                 try {
                     Notifier::taskAssigned($task);
                 } catch (Exception $e) {
                 }
                 // try
             }
             ajx_extra_data(array("task" => $task->getArrayInfo(), 'subtasks' => $subs));
             flash_success(lang('success add task', $task->getObjectName()));
         } catch (Exception $e) {
             DB::rollback();
             flash_error($e->getMessage());
         }
         // try
     }
     // if
 }
 function get_dimensions_for_properties()
 {
     if (!can_manage_dimension_members(logged_user())) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $dim_id = get_id();
     $obj_type = get_id('otype');
     $parent_id = get_id('parent');
     if ($parent_id == 0) {
         $dim_obj_type = DimensionObjectTypes::findById(array('dimension_id' => $dim_id, 'object_type_id' => $obj_type));
         if (!$dim_obj_type->getIsRoot()) {
             flash_error(lang('parent member must be selected to set properties'));
             ajx_current("empty");
             return;
         }
     }
     $dimensions = array();
     $associations_info = array();
     $associations_info_tmp = array();
     $member_parents = array();
     $associations = DimensionMemberAssociations::getAssociatations($dim_id, $obj_type);
     foreach ($associations as $assoc) {
         if (Plugins::instance()->isActivePlugin('core_dimensions') && config_option('hide_people_vinculations')) {
             $persons_dim = Dimensions::findByCode('feng_persons');
             if ($assoc->getAssociatedDimensionMemberAssociationId() == $persons_dim->getId()) {
                 continue;
             }
         }
         $assoc_info = array('id' => $assoc->getId(), 'required' => $assoc->getIsRequired(), 'multi' => $assoc->getIsMultiple(), 'ot' => $assoc->getAssociatedObjectType());
         $assoc_info['members'] = Members::getByDimensionObjType($assoc->getAssociatedDimensionMemberAssociationId(), $assoc->getAssociatedObjectType());
         $ot = ObjectTypes::findById($assoc->getAssociatedObjectType());
         $assoc_info['ot_name'] = $ot->getName();
         if (!isset($associations_info_tmp[$assoc->getAssociatedDimensionMemberAssociationId()])) {
             $associations_info_tmp[$assoc->getAssociatedDimensionMemberAssociationId()] = array();
             $dimensions[] = Dimensions::getDimensionById($assoc->getAssociatedDimensionMemberAssociationId());
         }
         $associations_info_tmp[$assoc->getAssociatedDimensionMemberAssociationId()][] = $assoc_info;
     }
     // check for restrictions
     if ($parent_id > 0) {
         $parent = Members::findById($parent_id);
         $all_parents = $parent->getAllParentMembersInHierarchy();
         $all_parent_ids = array($parent_id);
         foreach ($all_parents as $p) {
             $all_parent_ids[] = $p->getId();
         }
     } else {
         $all_parent_ids = array(0);
     }
     $all_property_members = array();
     foreach ($associations_info_tmp as $assoc_dim => $ot_infos) {
         foreach ($ot_infos as $info) {
             $restriction_defs = DimensionMemberRestrictionDefinitions::findAll(array("conditions" => "`dimension_id` = {$dim_id} AND `restricted_dimension_id` = {$assoc_dim} \r\n\t\t\t\t\tAND `restricted_object_type_id` = " . $info['ot']));
             if (!is_array($restriction_defs) || count($restriction_defs) == 0) {
                 // no restriction definitions => include all members
                 $associations_info[$assoc_dim][] = $info;
                 $restricted_dimensions[$assoc_dim] = false;
             } else {
                 // restriction definition found => filter members
                 $restricted_dimensions[$assoc_dim] = true;
                 $restrictions = array();
                 $rest_members = array();
                 $conditions = "";
                 foreach ($restriction_defs as $rdef) {
                     $conditions = "`restricted_member_id` IN (SELECT `id` FROM " . Members::instance()->getTableName(true) . " WHERE \r\n\t\t\t\t\t\t\t`object_type_id` = " . $rdef->getRestrictedObjectTypeId() . " AND `dimension_id` = {$assoc_dim}) AND `member_id` IN (" . implode(",", $all_parent_ids) . ")";
                     $restrictions[] = MemberRestrictions::findAll(array("conditions" => $conditions));
                 }
                 $to_intersect = array();
                 foreach ($restrictions as $k => $rests) {
                     $to_intersect[$k] = array();
                     foreach ($rests as $rest) {
                         $to_intersect[$k][] = $rest->getRestrictedMemberId();
                     }
                     if (count($to_intersect[$k]) == 0) {
                         unset($to_intersect[$k]);
                     }
                 }
                 $apply_filter = true;
                 $intersection = array_var($to_intersect, 0, array());
                 if (count($to_intersect) > 1) {
                     $k = 1;
                     while ($k < count($to_intersect)) {
                         $intersection = array_intersect($intersection, $to_intersect[$k++]);
                     }
                 } else {
                     if (count($to_intersect) == 0) {
                         // no restrictions found for members
                         $apply_filter = false;
                     }
                 }
                 if ($apply_filter) {
                     $rest_members = Members::findAll(array("conditions" => "`id` IN (" . implode(",", $intersection) . ")"));
                 } else {
                     $rest_members = $info['members'];
                 }
                 $new_info = $info;
                 $new_info['members'] = $rest_members;
                 $associations_info[$assoc_dim][] = $new_info;
                 foreach ($rest_members as $member) {
                     if (!isset($member_parents[$assoc_dim])) {
                         $member_parents[$assoc_dim] = array();
                     }
                     if ($member->getParentMemberId() > 0) {
                         $member_parents[$assoc_dim][$member->getId()] = $member->getParentMemberId();
                     }
                 }
             }
         }
     }
     foreach ($associations_info as $assoc_dim => $ot_infos) {
         foreach ($ot_infos as $info) {
             foreach ($info['members'] as $mem) {
                 $all_property_members[] = $mem->getId();
             }
         }
     }
     // para cada $info['ot'] ver si en el resultado hay miembros que los restringen
     foreach ($associations_info as $assoc_dim => &$ot_infos) {
         foreach ($ot_infos as &$info) {
             $restriction_defs = DimensionMemberRestrictionDefinitions::findAll(array("conditions" => "`restricted_dimension_id` = {$assoc_dim} \r\n\t\t\t\t\tAND `restricted_object_type_id` = " . $info['ot']));
             $restrictions = array();
             foreach ($restriction_defs as $rdef) {
                 $restrictions_tmp = MemberRestrictions::findAll(array("conditions" => "`member_id` IN (\r\n\t\t\t\t\t\tSELECT `id` FROM " . Members::instance()->getTableName(true) . " WHERE `dimension_id` = " . $rdef->getDimensionId() . " AND `object_type_id` = " . $rdef->getObjectTypeId() . " AND `id` IN (" . implode(",", $all_property_members) . "))"));
                 $restrictions = array_merge($restrictions, $restrictions_tmp);
             }
             $restricted_ids = array();
             if (count($restrictions) == 0) {
                 continue;
             }
             foreach ($restrictions as $rest) {
                 $restricted_ids[] = $rest->getRestrictedMemberId();
             }
             $tmp = array();
             foreach ($info['members'] as $rmem) {
                 if (in_array($rmem->getId(), $restricted_ids)) {
                     $tmp[] = $rmem;
                 }
             }
             $info['members'] = $tmp;
         }
     }
     $req_dimensions = array();
     foreach ($associations_info as $assoc_dim => &$ot_infos) {
         $required_count = 0;
         foreach ($ot_infos as &$info) {
             if ($info['required']) {
                 $required_count++;
             }
         }
         $req_dimensions[$assoc_dim] = $required_count > 0;
     }
     $member_id = get_id('mem_id');
     $actual_associations_info = array();
     if ($member_id > 0) {
         // actual associations
         $actual_associations = MemberPropertyMembers::getAssociatedPropertiesForMember($member_id);
         foreach ($actual_associations as $actual_assoc) {
             $actual_associations_info[$actual_assoc->getPropertyMemberId()] = true;
         }
     }
     tpl_assign('genid', array_var($_GET, 'genid'));
     tpl_assign('dimensions', $dimensions);
     tpl_assign('associations', $associations_info);
     tpl_assign('actual_associations', $actual_associations_info);
     tpl_assign('req_dimensions', $req_dimensions);
     tpl_assign('restricted_dimensions', isset($restricted_dimensions) ? $restricted_dimensions : array());
     ajx_extra_data(array('parents' => $member_parents, 'genid' => array_var($_GET, 'genid')));
     $this->setTemplate('dim_properties');
 }
Esempio n. 17
0
 /**
  * @abstract Archives the member and its submembers (including content objects)
  * @param user Contact
  * @return Returns the total number of archived objects 
  * @author Alvaro Torterola - alvaro.torterola@fengoffice.com
  */
 function archive($user)
 {
     if (!$user instanceof Contact) {
         return 0;
     }
     $person_dim = Dimensions::findByCode('feng_persons');
     $person_dim_cond = $person_dim instanceof Dimension ? " AND m2.dimension_id<>" . $person_dim->getId() : "";
     // archive objects that dont belong to other unarchived members
     $sql = "SELECT om.object_id FROM " . TABLE_PREFIX . "object_members om INNER JOIN " . TABLE_PREFIX . "objects o ON o.id=om.object_id  \n\t\t\t\tWHERE om.member_id=" . $this->getId() . " AND o.archived_by_id=0 AND NOT EXISTS (\n\t\t\t\t  SELECT member_id FROM " . TABLE_PREFIX . "object_members om2 INNER JOIN " . TABLE_PREFIX . "members m2 ON m2.id=om2.member_id\n\t\t\t\t  WHERE m2.archived_by_id=0 AND om2.object_id=om.object_id AND om2.member_id<>om.member_id" . $person_dim_cond . "\n\t\t\t\t);";
     $object_ids = DB::executeAll($sql);
     $count = 0;
     foreach ($object_ids as $row) {
         $content_object = Objects::findObject($row['object_id']);
         if ($content_object instanceof ContentDataObject) {
             $content_object->archive();
             $count++;
         }
     }
     // Log archived objects
     DB::execute("INSERT INTO " . TABLE_PREFIX . "application_logs (taken_by_id, rel_object_id, object_name, created_on, created_by_id, action, is_private, is_silent, log_data)\n\t\t\tVALUES (" . $user->getId() . "," . $this->getId() . "," . DB::escape($this->getName()) . ",NOW()," . $user->getId() . ",'archive',0,1,'" . implode(',', array_flat($object_ids)) . "')");
     $this->setArchivedById($user->getId());
     $this->setArchivedOn(DateTimeValueLib::now());
     $this->save();
     $sub_members = $this->getAllChildren();
     foreach ($sub_members as $sub_member) {
         if ($sub_member->getArchivedById() == 0) {
             $count += $sub_member->archive($user);
         }
     }
     return $count;
 }
 /**
  * Lists all contacts and clients
  *
  */
 function list_all()
 {
     ajx_current("empty");
     // Get all variables from request
     $start = array_var($_GET, 'start', 0);
     $limit = array_var($_GET, 'limit', config_option('files_per_page'));
     $page = 1;
     if ($start > 0) {
         $page = $start / $limit + 1;
     }
     $order = array_var($_GET, 'sort');
     $order_dir = array_var($_GET, 'dir');
     $action = array_var($_GET, 'action');
     $attributes = array("ids" => explode(',', array_var($_GET, 'ids')), "types" => explode(',', array_var($_GET, 'types')), "accountId" => array_var($_GET, 'account_id'), "viewType" => array_var($_GET, 'view_type'));
     //Resolve actions to perform
     $actionMessage = array();
     if (isset($action)) {
         $actionMessage = $this->resolveAction($action, $attributes);
         if ($actionMessage["errorCode"] == 0) {
             flash_success($actionMessage["errorMessage"]);
         } else {
             flash_error($actionMessage["errorMessage"]);
         }
     }
     $extra_conditions = "";
     if ($attributes['viewType'] == 'contacts') {
         $extra_conditions = 'AND `is_company` = 0';
     } else {
         if ($attributes['viewType'] == 'companies') {
             $extra_conditions = 'AND `is_company` = 1';
         }
     }
     $extra_conditions .= " AND disabled = 0 ";
     switch ($order) {
         case 'updatedOn':
             $order = '`updated_on`';
             break;
         case 'createdOn':
             $order = '`created_on`';
             break;
         case 'name':
             $order = ' concat(surname, first_name) ';
             break;
         default:
             $order = '`name`';
             break;
     }
     if (!$order_dir) {
         switch ($order) {
             case 'name':
                 $order_dir = 'ASC';
                 break;
             default:
                 $order_dir = 'DESC';
         }
     }
     $context = active_context();
     if (context_type() == 'mixed') {
         // There are members selected
         //$content_objects = Contacts::getContentObjects($context, ObjectTypes::findById(Contacts::instance()->getObjectTypeId()), $order, $order_dir, $extra_conditions, null, false,false, $start, $limit);
         $content_objects = Contacts::instance()->listing(array("order" => $order, "order_dir" => $order_dir, "extra_conditions" => $extra_conditions, "start" => $start, "limit" => $limit));
     } else {
         // Estoy parado en 'All'. Filtro solo por permisos TODO: Fix this !
         $conditions = "archived_on = '0000-00-00 00:00:00' AND trashed_on = '0000-00-00 00:00:00' {$extra_conditions}";
         $content_objects = new stdClass();
         $content_objects->objects = Contacts::instance()->findAll(array("conditions" => $conditions, "order" => "{$order} {$order_dir}", "offset" => $start, "limit" => $limit));
         $content_objects->total = Contacts::instance()->count(array("conditions" => $conditions));
         foreach ($content_objects->objects as $k => $contact) {
             /* @var $contact Contact */
             if (Plugins::instance()->isActivePlugin("core_dimensions")) {
                 $m = array_var(Members::instance()->findByObjectId($contact->getId(), Dimensions::findByCode("feng_persons")->getId()), 0);
                 if ($m instanceof Member) {
                     $mid = $m->getId();
                     if (!ContactMemberPermissions::instance()->contactCanReadMember(logged_user()->getPermissionGroupId(), $mid, logged_user())) {
                         unset($content_objects->objects[$k]);
                         $content_objects->total--;
                     }
                 }
             }
         }
         $content_objects->objects = array_values($content_objects->objects);
     }
     // Prepare response object
     $object = $this->newPrepareObject($content_objects->objects, $content_objects->total, $start, $attributes);
     ajx_extra_data($object);
     tpl_assign("listing", $object);
 }
 private function getMailProperties($msg, $i = 0)
 {
     $text = $msg->getTextBody();
     // plain body is already converted to UTF-8 (when mail was saved)
     if (strlen_utf($text) > 150) {
         $text = substr_utf($text, 0, 150) . "...";
     }
     $show_as_conv = user_config_option('show_emails_as_conversations');
     if ($show_as_conv) {
         $conv_total = MailContents::countMailsInConversation($msg);
         $conv_unread = MailContents::countUnreadMailsInConversation($msg);
         $conv_hasatt = MailContents::conversationHasAttachments($msg);
     }
     //if the variable is not set, make the query and set it.
     //seba
     // Comented by php TODO: Feng 2 context/members
     /*
     		if(!isset($this->user_workspaces_ids)){
     			$sql = logged_user()->getWorkspacesQuery();
     			$rows = DB::executeAll($sql);
     			if (count($rows)== 0) $this->user_workspaces_ids = "0";
     			else{
     				foreach ($rows as $row){
     						if ($this->user_workspaces_ids != "") $this->user_workspaces_ids .= ",";
     						$this->user_workspaces_ids .= $row['project_id'];						
     				}
     			}
     		}*/
     /* @var $msg MailContent */
     $persons_dim = Dimensions::findByCode('feng_persons');
     $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : "0";
     $mail_member_ids = array_flat(DB::executeAll("SELECT om.member_id FROM " . TABLE_PREFIX . "object_members om\r\n\t\t\t\tINNER JOIN " . TABLE_PREFIX . "members m ON m.id=om.member_id \r\n\t\t\t\tWHERE om.object_id = '" . $msg->getId() . "' AND om.is_optimization = 0 AND m.dimension_id<>{$persons_dim_id}"));
     $properties = array("id" => $msg->getId(), "ix" => $i, "object_id" => $msg->getId(), "ot_id" => $msg->getObjectTypeId(), "type" => 'email', "hasAttachment" => $msg->getHasAttachments(), "accountId" => $msg->getAccountId(), "accountName" => $msg->getAccount() instanceof MailAccount ? $msg->getAccount()->getName() : lang('n/a'), "subject" => $msg->getSubject(), "text" => $text, "date" => $msg->getReceivedDate() instanceof DateTimeValue ? $msg->getReceivedDate()->isToday() ? format_time($msg->getReceivedDate()) : format_datetime($msg->getReceivedDate()) : lang('n/a'), "userId" => $msg->getAccount() instanceof MailAccount && $msg->getAccount()->getOwner() instanceof Contact ? $msg->getAccount()->getOwner()->getId() : 0, "userName" => $msg->getAccount() instanceof MailAccount && $msg->getAccount()->getOwner() instanceof Contact ? $msg->getAccount()->getOwner()->getObjectName() : lang('n/a'), "isRead" => $show_as_conv ? $conv_unread == 0 : $msg->getIsRead(logged_user()->getId()), "from" => $msg->getFromName() != '' ? $msg->getFromName() : $msg->getFrom(), "from_email" => $msg->getFrom(), "isDraft" => $msg->getIsDraft(), "isSent" => $msg->getIsSent(), "folder" => $msg->getImapFolderName(), "to" => $msg->getTo(), "memPath" => json_encode($msg->getMembersIdsToDisplayPath()), "memberIds" => implode(",", $mail_member_ids));
     if ($show_as_conv) {
         $properties["conv_total"] = $conv_total;
         $properties["conv_unread"] = $conv_unread;
         $properties["conv_hasatt"] = $conv_hasatt;
     }
     return $properties;
 }
Esempio n. 20
0
function core_dimensions_quickadd_extra_fields($dimId)
{
    if ($dimId == Dimensions::findByCode("feng_persons")->getId()) {
        tpl_display(PLUGIN_PATH . "/core_dimensions/templates/quickadd_extra_fields.php");
    }
}
Esempio n. 21
0
 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());
             }
         }
     }
 }
Esempio n. 22
0
 private function list_latest_active_members($request)
 {
     $service = $request['srv'];
     $members = array();
     $type = ObjectTypes::instance()->findByName($service);
     $typeId = $type->getId();
     if ($service == "workspace") {
         $dimension_id = Dimensions::findByCode('workspaces')->getId();
     } else {
         $dimension_id = Dimensions::findByCode('customer_project')->getId();
     }
     $ids = array();
     $dimensionController = new DimensionController();
     foreach ($dimensionController->latest_active_dimension_members($dimension_id, $typeId, null, user_config_option("mobile_logs_amount_to_search"), user_config_option("mobile_minimum_display_dimension_members"), user_config_option("mobile_maximum_display_dimension_members")) as $member) {
         $ids[] = $member['object_id'];
     }
     if (count($ids)) {
         $args['conditions'] = " `object_id` IN (" . implode(",", $ids) . ") AND object_type_id = {$typeId}";
         $args['order'] = " name ASC";
         foreach (Members::instance()->findAll($args) as $member) {
             /* @var $member Member */
             $memberInfo = array('id' => $member->getId(), 'name' => $member->getName(), 'type' => $service, 'path' => $member->getPath());
             $members[] = $memberInfo;
         }
     }
     return $this->response('json', $members);
 }
Esempio n. 23
0
");
					return;
				}
				
				var user_type = container.find('select[name="contact[user][type]"] option:selected').val();
				var company_id = container.find('select[name="contact[user][company_id]"] option:selected').val();
				
				var postVars = {
					'member[object_type_id]': <?php 
echo ObjectTypes::findByName('person')->getId();
?>
,
					'member[name]': value,
					'member[parent_member_id]' : parent,
					'member[dimension_id]': <?php 
echo Dimensions::findByCode('feng_persons')->getId();
?>
,
					'contact[email]': mail,
					'contact[user][create-user]' : create_user,
					'contact[user][type]': user_type,
					'contact[user][company_id]': company_id
				};

				var firstName = '';
				var surname = '';
				var nameParts = value.split(' ');
				if (nameParts && nameParts.length > 1) {
					for ( var i in nameParts ){
						if (i == "remove") continue;
						var word = $.trim(nameParts[i]);
Esempio n. 24
0
<?php

$limit = 5;
$genid = gen_id();
$ws_dimension = Dimensions::findByCode('workspaces');
$dim_controller = new DimensionController();
$selected_ws = '0';
$allowed_members = array();
$add_ctx_members = true;
$show_widget = true;
$context = active_context();
if (isset($context)) {
    foreach ($context as $selection) {
        if ($selection instanceof Dimension && $selection->getCode() == 'workspaces') {
            $add_ctx_members = false;
        } else {
            if ($selection instanceof Member) {
                if ($selection->getObjectTypeId() == Workspaces::instance()->getObjectTypeId()) {
                    $allowed_members[] = $selection->getId();
                    $selected_ws = $selection->getId();
                } else {
                    $show_widget = false;
                }
            }
        }
    }
}
if ($show_widget) {
    $extra_conditions = " AND parent_member_id " . ($add_ctx_members && count($allowed_members) > 0 ? "IN (" . implode(",", $allowed_members) . ")" : "=0");
    $parent = null;
    $context = active_context();
Esempio n. 25
0
 function quick_add_task()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $notAllowedMember = '';
     if (!ProjectTask::canAdd(logged_user(), active_context(), $notAllowedMember)) {
         if (str_starts_with($notAllowedMember, '-- req dim --')) {
             flash_error(lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in)));
         } else {
             trim($notAllowedMember) == "" ? flash_error(lang('you must select where to keep', lang('the task'))) : flash_error(lang('no context permissions to add', lang("tasks"), $notAllowedMember));
         }
         ajx_current("empty");
         return;
     }
     ajx_current("empty");
     $task = new ProjectTask();
     $task_data = array_var($_POST, 'task');
     $parent_id = array_var($task_data, 'parent_id', 0);
     $parent = ProjectTasks::findById($parent_id);
     if (is_array($task_data)) {
         $task_data['due_date'] = getDateValue(array_var($task_data, 'task_due_date'));
         $task_data['start_date'] = getDateValue(array_var($task_data, 'task_start_date'));
         if ($task_data['due_date'] instanceof DateTimeValue) {
             $duetime = getTimeValue(array_var($task_data, 'task_due_time'));
             if (is_array($duetime)) {
                 $task_data['due_date']->setHour(array_var($duetime, 'hours'));
                 $task_data['due_date']->setMinute(array_var($duetime, 'mins'));
                 $task_data['due_date']->advance(logged_user()->getTimezone() * -3600);
             }
             $task_data['use_due_time'] = is_array($duetime);
         }
         if ($task_data['start_date'] instanceof DateTimeValue) {
             $starttime = getTimeValue(array_var($task_data, 'task_start_time'));
             if (is_array($starttime)) {
                 $task_data['start_date']->setHour(array_var($starttime, 'hours'));
                 $task_data['start_date']->setMinute(array_var($starttime, 'mins'));
                 $task_data['start_date']->advance(logged_user()->getTimezone() * -3600);
             }
             $task_data['use_start_time'] = is_array($starttime);
         }
         if (config_option("wysiwyg_tasks")) {
             $task_data['type_content'] = "html";
             $task_data['text'] = str_replace(array("\r", "\n", "\r\n"), array('', '', ''), array_var($task_data, 'text'));
         } else {
             $task_data['type_content'] = "text";
         }
         $task_data['object_type_id'] = $task->getObjectTypeId();
         $task->setFromAttributes($task_data);
         if (array_var($task_data, 'is_completed', false) == 'true') {
             $task->setCompletedOn(DateTimeValueLib::now());
             $task->setCompletedById(logged_user()->getId());
         }
         try {
             DB::beginWork();
             $task->save();
             $totalMinutes = array_var($task_data, 'hours') * 60 + array_var($task_data, 'minutes');
             $task->setTimeEstimate($totalMinutes);
             $task->save();
             $gb_member_ids = array_var($task_data, 'members');
             $member_ids = array();
             $persons_dim = Dimensions::findByCode('feng_persons');
             $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : 0;
             if ($parent) {
                 if (count($parent->getMembers()) > 0) {
                     foreach ($parent->getMembers() as $member) {
                         if ($member->getDimensionId() != $persons_dim_id) {
                             $member_ids[] = $member->getId();
                         }
                     }
                 }
                 $task->setMilestoneId($parent->getMilestoneId());
                 $task->save();
             }
             if (count($member_ids) == 0) {
                 $member_ids = active_context_members(false);
             }
             // get member ids
             if ($gb_member_ids && !empty($gb_member_ids)) {
                 $member_ids = json_decode(array_var($task_data, 'members'));
             }
             $object_controller = new ObjectController();
             $object_controller->add_to_members($task, $member_ids);
             $assignee = $task->getAssignedToContact();
             $assignee_to_me = false;
             if ($assignee instanceof Contact) {
                 $task->subscribeUser($assignee);
                 //do not notify my self
                 if ($assignee->getId() == logged_user()->getId()) {
                     $assignee_to_me = true;
                 }
             }
             // create default reminder by user config option
             if ($task->getDueDate() != null && user_config_option("add_task_default_reminder")) {
                 $reminder = new ObjectReminder();
                 $def = explode(",", user_config_option("reminders_tasks"));
                 $minutes = $def[2] * $def[1];
                 $reminder->setMinutesBefore($minutes);
                 $reminder->setType($def[0]);
                 $reminder->setContext("due_date");
                 $reminder->setObject($task);
                 $reminder->setUserId(0);
                 $date = $task->getDueDate();
                 if ($date instanceof DateTimeValue) {
                     $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60);
                     $reminder->setDate($rdate);
                 }
                 $reminder->save();
             }
             $subs = array();
             if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) {
                 $json_subtasks = json_decode(array_var($_POST, 'multi_assignment'), true);
                 $subtasks = array();
                 $line = 0;
                 if (is_array($json_subtasks)) {
                     foreach ($json_subtasks as $json_subtask) {
                         $subtasks[$line]['assigned_to_contact_id'] = $json_subtask['assigned_to_contact_id'];
                         $subtasks[$line]['name'] = $json_subtask['name'];
                         $subtasks[$line]['time_estimate_hours'] = $json_subtask['time_estimate_hours'];
                         $subtasks[$line]['time_estimate_minutes'] = $json_subtask['time_estimate_minutes'];
                         $line++;
                     }
                 }
                 Hook::fire('save_subtasks', $task, $subtasks);
                 $subtasks = ProjectTasks::findAll(array('conditions' => '`parent_id` = ' . DB::escape($task->getId())));
                 // findAll
                 foreach ($subtasks as $sub) {
                     $subs[] = $sub->getArrayInfo();
                 }
             }
             // subscribe
             $task->subscribeUser(logged_user());
             //for calculate member status we save de task again after the object have the members
             $task->save();
             DB::commit();
             $isSailent = true;
             // notify asignee
             if ((array_var($task_data, 'notify') == 'true' || user_config_option("can notify from quick add") && !user_config_option("show_notify_checkbox_in_quick_add")) && !$assignee_to_me) {
                 $isSailent = false;
                 try {
                     Notifier::taskAssigned($task);
                 } catch (Exception $e) {
                     Logger::log($e->getMessage());
                     Logger::log($e->getTraceAsString());
                 }
                 // try
             }
             ApplicationLogs::createLog($task, ApplicationLogs::ACTION_ADD, null, $isSailent);
             ajx_extra_data(array("task" => $task->getArrayInfo(), 'subtasks' => $subs));
             flash_success(lang('success add task', $task->getObjectName()));
         } catch (Exception $e) {
             DB::rollback();
             flash_error($e->getMessage());
         }
         // try
     }
     // if
 }
 function getIconClass()
 {
     $d = Dimensions::findByCode('workspaces');
     $m = Members::findOneByObjectId($this->getId(), $d->getId());
     return "ico-color" . ($m instanceof Member ? $m->getColor() : '0');
 }
function workspaces_additional_dashboard_actions($ignored, &$actions)
{
    $ws_dim = Dimensions::findByCode('workspaces');
    $wot = ObjectTypes::findByName('workspace');
    $wdot = DimensionObjectTypes::findOne(array('conditions' => 'dimension_id=' . $ws_dim->getId() . ' AND object_type_id=' . $wot->getId()));
    if ($wdot instanceof DimensionObjectType && $wdot->getEnabled()) {
        if (active_context_can_contain_member_type($ws_dim->getId(), $wot->getId())) {
            $actions[] = array('id' => 'workspaces-list', 'assoc_ot' => $wot->getId(), 'assoc_dim' => $ws_dim->getId(), 'name' => lang('workspaces list'), 'class' => 'link-ico ico-workspace', 'onclick' => "og.openLink(og.getUrl('member', 'init', {dim_id:" . $ws_dim->getId() . ", type_id:" . $wot->getId() . "}), {caller:'" . $ws_dim->getCode() . "'}); return false;");
        }
    }
    $tags_dim = Dimensions::findByCode('tags');
    $tot = ObjectTypes::findByName('tag');
    $tdot = DimensionObjectTypes::findOne(array('conditions' => 'dimension_id=' . $tags_dim->getId() . ' AND object_type_id=' . $tot->getId()));
    if ($tdot instanceof DimensionObjectType && $tdot->getEnabled()) {
        if (active_context_can_contain_member_type($tags_dim->getId(), $tot->getId())) {
            $actions[] = array('id' => 'tags-list', 'assoc_ot' => $tot->getId(), 'assoc_dim' => $tags_dim->getId(), 'name' => lang('tags list'), 'class' => 'link-ico ico-tag', 'onclick' => "og.openLink(og.getUrl('member', 'init', {dim_id:" . $tags_dim->getId() . ", type_id:" . $tot->getId() . "}), {caller:'" . $tags_dim->getCode() . "'}); return false;");
        }
    }
}