function countAllowedContacts() { $conditions = ""; if (!can_manage_contacts(logged_user())) { $conditions .= "e.user_type>0 OR e.object_id IN (\r\n\t\t\t\tSELECT st.object_id FROM " . TABLE_PREFIX . "sharing_table st WHERE st.group_id IN (\r\n\t\t\t\t\tSELECT pg.id FROM " . TABLE_PREFIX . "permission_groups pg WHERE pg.type='permission_groups' AND pg.contact_id = " . logged_user()->getId() . "\r\n\t\t\t\t)\r\n\t\t\t)"; } return Contacts::instance()->count($conditions); }
/** * Returns an array containing only the contacts that logged_user can read. * * @return array */ function getAllowedContacts($extra_conds = null) { $result = array(); foreach ($contacts = Contacts::instance()->findAll(array('conditions' => array($extra_conds))) as $c) { /* @var $c Contact */ if ($c->canView(logged_user())) { $result[] = $c; } } return $result; }
/** * Returns an array containing only the contacts that logged_user can read. * * @return array */ function getAllowedContacts($extra_conds = null) { $result = array(); $conditions = $extra_conds ? "$extra_conds AND " : ""; $conditions .= "e.object_id IN ( SELECT st.object_id FROM ".TABLE_PREFIX."sharing_table st WHERE st.group_id IN ( SELECT pg.id FROM ".TABLE_PREFIX."permission_groups pg WHERE pg.type='permission_groups' AND pg.contact_id = ".logged_user()->getId()." ) )"; $contacts = Contacts::instance()->findAll(array('conditions' => $conditions)); return $contacts; }
/** * Override defaults. * Also adds mail to sharing table if is not categorized. * Only permissions for the account owner. * * @see ContentDataObject::addToSharingTable() */ function addToSharingTable() { parent::addToSharingTable(); $id = $this->getId(); if(!$this->getAccount() instanceof MailAccount) return; $macs = MailAccountContacts::instance()->getByAccount($this->getAccount()); foreach ($macs as $mac) { $contactId = $mac->getContactId(); $contact = Contacts::instance()->findById($contactId); if (!$contact instanceof Contact) continue; $group_id = $contact->getPermissionGroupId(); if ($group_id) { $sql = "INSERT INTO ".TABLE_PREFIX."sharing_table ( object_id, group_id ) VALUES ('$id','$group_id') ON DUPLICATE KEY UPDATE group_id = group_id "; DB::execute($sql); } } }
/** * This function will return paginated result. Result is an array where first element is * array of returned object and second populated pagination object that can be used for * obtaining and rendering pagination data using various helpers. * * Items and pagination array vars are indexed with 0 for items and 1 for pagination * because you can't use associative indexing with list() construct * * @access public * @param array $arguments Query argumens (@see find()) Limit and offset are ignored! * @param integer $items_per_page Number of items per page * @param integer $current_page Current page number * @return array */ function paginate($arguments = null, $items_per_page = 10, $current_page = 1) { if (isset($this) && instance_of($this, 'Contacts')) { return parent::paginate($arguments, $items_per_page, $current_page); } else { return Contacts::instance()->paginate($arguments, $items_per_page, $current_page); } // if }
echo stylesheet_tag('event/day.css'); $today = DateTimeValueLib::now(); $today->add('h', logged_user()->getTimezone()); $currentday = $today->format("j"); $currentmonth = $today->format("n"); $currentyear = $today->format("Y"); $drawHourLine = $day == $currentday && $month == $currentmonth && $year == $currentyear; $dtv = DateTimeValueLib::make(0, 0, 0, $month, $day, $year); $result = ProjectEvents::getDayProjectEvents($dtv, $tags, active_project(), $user_filter, $status_filter); if (!$result) { $result = array(); } $alldayevents = array(); $milestones = ProjectMilestones::getRangeMilestonesByUser($dtv, $dtv, $user_filter != -1 ? $user : null, $tags, active_project()); $tasks = ProjectTasks::getRangeTasksByUser($dtv, $dtv, $user_filter != -1 ? $user : null, $tags, active_project()); $birthdays = Contacts::instance()->getRangeContactsByBirthday($dtv, $dtv); foreach ($result as $key => $event) { if ($event->getTypeId() > 1) { $alldayevents[] = $event; unset($result[$key]); } } if ($milestones) { $alldayevents = array_merge($alldayevents, $milestones); } if ($tasks) { $tmp_tasks = array(); $dtv_end = new DateTimeValue($dtv->getTimestamp() + 60 * 60 * 24); foreach ($tasks as $task) { $tmp_tasks = array_merge($tmp_tasks, replicateRepetitiveTaskForCalendar($task, $dtv, $dtv_end)); }
<table><tr><th></th><th><?php echo $import_type == 'contact' ? lang('contact fields') : lang('company fields'); ?> </th><th><?php echo lang('fields from file'); ?> </th></tr> <?php if ($import_type == 'contact') { $contact_fields = Contacts::getContactFieldNames(); } else { $contact_fields = Contacts::getCompanyFieldNames(); } $custom_properties = CustomProperties::getAllCustomPropertiesByObjectType(Contacts::instance()->getObjectTypeId()); +($isAlt = false); $i = 0; $label_w = $label_h = $label_o = false; foreach ($contact_fields as $c_field => $c_label) { if (str_starts_with($c_field, 'contact[w') && !$label_w) { ?> <tr><td colspan="3" style="text-align:center;"><b><?php echo lang('work'); ?> </b></td></tr> <?php $label_w = true; } else { if (str_starts_with($c_field, 'contact[h') && !$label_h) { ?> <tr><td colspan="3" style="text-align:center;"><b><?php
} } $contacts = Contacts::findAll(array( 'conditions' => 'object_id IN ('.implode(',',$intersection).') AND `is_company` = 0 AND disabled = 0', 'limit' => $limit, 'order' => 'last_activity, updated_on', 'order_dir' => 'desc', )); $total = count($contacts); $widget_title = lang("people in", implode(", ", $mnames)); } else { $result = Contacts::instance()->listing(array( "order" => "last_activity, updated_on", "order_dir" => "desc", "extra_conditions" => " AND `is_company` = 0 AND disabled = 0 AND user_type > 0", "start" => 0, "limit" => $limit )); $total = $result->total ; $contacts = $result->objects; } $render_add = can_manage_security(logged_user()); $genid = gen_id(); if ($total > 0 || $render_add) { include_once 'template.php';
function canAdd(Contact $user, $context, &$notAllowedMember = '') { return can_manage_contacts($user) || can_add($user, $context, Contacts::instance()->getObjectTypeId(), $notAllowedMember); }
function get_contacts_for_selector() { ajx_current("empty"); $name_condition = ""; $name_filter = trim(array_var($_REQUEST, 'query')); if ($name_filter != "") { $name_condition = " AND o.name LIKE '%{$name_filter}%'"; } // by default list only contacts $type_condition = " AND is_company=0"; $extra_conditions = ""; if ($filters = array_var($_REQUEST, 'filters')) { $filters = json_decode($filters, true); foreach ($filters as $col => $val) { if (Contacts::instance()->columnExists($col)) { $extra_conditions .= " AND " . DB::escapeField($col) . " = " . DB::escape($val); } else { if ($col == 'is_user') { $extra_conditions .= " AND `user_type`" . ($val == 1 ? " > 0" : " = 0"); } else { if ($col == 'has_permissions') { $extra_conditions .= " AND `user_type`>0 AND EXISTS(\r\n\t\t\t\t\t\t\tSELECT * FROM " . TABLE_PREFIX . "contact_member_permissions cmp\r\n\t\t\t\t\t\t\tWHERE cmp.permission_group_id IN (SELECT x.permission_group_id FROM " . TABLE_PREFIX . "contact_permission_groups x WHERE x.contact_id=o.id)\r\n\t\t\t\t\t\t\t\tAND cmp.member_id='{$val}'\r\n\t\t\t\t\t\t\t\tAND cmp.object_type_id NOT IN (SELECT tp.object_type_id FROM " . TABLE_PREFIX . "tab_panels tp WHERE tp.enabled=0)\r\n\t\t\t\t\t\t\t\tAND cmp.object_type_id NOT IN (SELECT oott.id FROM " . TABLE_PREFIX . "object_types oott WHERE oott.name IN ('comment','template'))\r\n\t\t\t\t\t\t\t\tAND cmp.object_type_id IN (SELECT oott2.id FROM " . TABLE_PREFIX . "object_types oott2 WHERE oott2.type IN ('content_object','dimension_object'))\r\n\t\t\t\t\t\t)"; } else { if ($col == 'only_companies') { if ($val == 1) { $type_condition = " AND is_company=1"; } } else { if ($col == 'include_companies') { if ($val == 1) { $type_condition = ""; } } } } } } } } if ($plugin_filters = array_var($_REQUEST, 'plugin_filters')) { $plugin_filters = json_decode($plugin_filters, true); $plugin_conditions = ""; Hook::fire('contact_selector_plugin_filters', $plugin_filters, $plugin_conditions); $extra_conditions .= $plugin_conditions; } $info = array(); $pg_ids = logged_user()->getPermissionGroupIds(); if (count($pg_ids) > 0) { $permissions_condition = " AND (o.id=" . logged_user()->getId() . " OR EXISTS (SELECT sh.object_id FROM " . TABLE_PREFIX . "sharing_table sh WHERE sh.object_id=o.id AND group_id IN (" . implode(',', $pg_ids) . ")))"; $conditions = "o.trashed_by_id=0 AND o.archived_by_id=0 {$name_condition} {$permissions_condition} {$type_condition} {$extra_conditions}"; $query_params = array('condition' => $conditions, 'order' => 'o.name ASC'); $count = Contacts::count($conditions); $limit = 30; $query_params['limit'] = $limit; $contacts = Contacts::findAll($query_params); foreach ($contacts as $c) { $info[] = array("id" => $c->getId(), "name" => $c->getObjectName()); } if ($name_filter == "" && $count >= $limit) { //$info[] = array('id' => -1, 'name' => lang('write the first letters of the name or surname of the person to select')); $info[] = array('id' => -2, 'name' => '<a href="#" class="db-ico ico-expand" style="color:blue;text-decoration:underline;padding-left:20px;">' . lang('show more') . '</a>'); } } ajx_extra_data(array('contacts' => $info)); }
function create_user($user_data, $permissionsString) { // try to find contact by some properties $contact_id = array_var($user_data, "contact_id") ; $contact = Contacts::instance()->findById($contact_id) ; if (!is_valid_email(array_var($user_data, 'email'))) { throw new Exception(lang("email value is required")); } if (!$contact instanceof Contact) { // Create a new user $contact = new Contact(); $contact->setUsername(array_var($user_data, 'username')); $contact->setDisplayName(array_var($user_data, 'display_name')); $contact->setCompanyId(array_var($user_data, 'company_id')); $contact->setUserType(array_var($user_data, 'type')); $contact->setTimezone(array_var($user_data, 'timezone')); $contact->setFirstname($contact->getObjectName() != "" ? $contact->getObjectName() : $contact->getUsername()); $contact->setObjectName(); } else { // Create user from contact $contact->setUserType(array_var($user_data, 'type')); if (array_var($user_data, 'company_id')) { $contact->setCompanyId(array_var($user_data, 'company_id')); } $contact->setUsername(array_var($user_data, 'username')); $contact->setTimezone(array_var($user_data, 'timezone')); } $contact->save(); if (is_valid_email(array_var($user_data, 'email'))) { $contact->addEmail(array_var($user_data, 'email'), 'personal', true); } //permissions $permission_group = new PermissionGroup(); $permission_group->setName('User '.$contact->getId().' Personal'); $permission_group->setContactId($contact->getId()); $permission_group->setIsContext(false); $permission_group->setType("permission_groups"); $permission_group->save(); $contact->setPermissionGroupId($permission_group->getId()); $contact_pg = new ContactPermissionGroup(); $contact_pg->setContactId($contact->getId()); $contact_pg->setPermissionGroupId($permission_group->getId()); $contact_pg->save(); if ( can_manage_security(logged_user()) ) { $sp = new SystemPermission(); $rol_permissions=SystemPermissions::getRolePermissions(array_var($user_data, 'type')); foreach($rol_permissions as $pr){ $sp->setPermission($pr); } $sp->setPermissionGroupId($permission_group->getId()); $sp->setCanManageSecurity(array_var($user_data, 'can_manage_security')); $sp->setCanManageConfiguration(array_var($user_data, 'can_manage_configuration')); $sp->setCanManageTemplates(array_var($user_data, 'can_manage_templates')); $sp->setCanManageTime(array_var($user_data, 'can_manage_time')); $sp->setCanAddMailAccounts(array_var($user_data, 'can_add_mail_accounts')); $sp->setCanManageDimensions(array_var($user_data, 'can_manage_dimensions')); $sp->setCanManageDimensionMembers(array_var($user_data, 'can_manage_dimension_members')); $sp->setCanManageTasks(array_var($user_data, 'can_manage_tasks')); $sp->setCanTasksAssignee(array_var($user_data, 'can_task_assignee')); $sp->setCanManageBilling(array_var($user_data, 'can_manage_billing')); $sp->setCanViewBilling(array_var($user_data, 'can_view_billing')); Hook::fire('add_user_permissions', $sp, $other_permissions); if (!is_null($other_permissions) && is_array($other_permissions)) { foreach ($other_permissions as $k => $v) { $sp->setColumnValue($k, array_var($user_data, $k)); } } $sp->save(); if ($contact->isAdminGroup()) { // allow all un all dimensions if new user is admin $dimensions = Dimensions::findAll(); $permissions = array(); foreach ($dimensions as $dimension) { if ($dimension->getDefinesPermissions()) { $cdp = ContactDimensionPermissions::findOne(array("conditions" => "`permission_group_id` = ".$contact->getPermissionGroupId()." AND `dimension_id` = ".$dimension->getId())); if (!$cdp instanceof ContactDimensionPermission) { $cdp = new ContactDimensionPermission(); $cdp->setPermissionGroupId($contact->getPermissionGroupId()); $cdp->setContactDimensionId($dimension->getId()); } $cdp->setPermissionType('allow all'); $cdp->save(); // contact member permisssion entries $members = $dimension->getAllMembers(); foreach ($members as $member) { $ots = DimensionObjectTypeContents::getContentObjectTypeIds($dimension->getId(), $member->getObjectTypeId()); $ots[]=$member->getObjectId(); foreach ($ots as $ot) { $cmp = ContactMemberPermissions::findOne(array("conditions" => "`permission_group_id` = ".$contact->getPermissionGroupId()." AND `member_id` = ".$member->getId()." AND `object_type_id` = $ot")); if (!$cmp instanceof ContactMemberPermission) { $cmp = new ContactMemberPermission(); $cmp->setPermissionGroupId($contact->getPermissionGroupId()); $cmp->setMemberId($member->getId()); $cmp->setObjectTypeId($ot); } $cmp->setCanWrite(1); $cmp->setCanDelete(1); $cmp->save(); // Add persmissions to sharing table $perm = new stdClass(); $perm->m = $member->getId(); $perm->r= 1; $perm->w= 1; $perm->d= 1; $perm->o= $ot; $permissions[] = $perm ; } } } } if(count($permissions)){ $sharingTableController = new SharingTableController(); $sharingTableController->afterPermissionChanged($contact->getPermissionGroupId(), $permissions); } } } if(!isset($_POST['sys_perm'])){ $rol_permissions=SystemPermissions::getRolePermissions(array_var($user_data, 'type')); $_POST['sys_perm']=array(); foreach($rol_permissions as $pr){ $_POST['sys_perm'][$pr]=1; } } if(!isset($_POST['mod_perm'])){ $tabs_permissions=TabPanelPermissions::getRoleModules(array_var($user_data, 'type')); $_POST['mod_perm']=array(); foreach($tabs_permissions as $pr){ $_POST['mod_perm'][$pr]=1; } } $password = ''; if (array_var($user_data, 'password_generator') == 'specify') { $perform_password_validation = true; // Validate input $password = array_var($user_data, 'password'); if (trim($password) == '') { throw new Error(lang('password value required')); } // if if ($password <> array_var($user_data, 'password_a')) { throw new Error(lang('passwords dont match')); } // if } else { $user_data['password_generator'] = 'link'; $perform_password_validation = false; } $contact->setPassword($password); $contact->save(); $user_password = new ContactPassword(); $user_password->setContactId($contact->getId()); $user_password->setPasswordDate(DateTimeValueLib::now()); $user_password->setPassword(cp_encrypt($password, $user_password->getPasswordDate()->getTimestamp())); $user_password->password_temp = $password; $user_password->perform_validation = $perform_password_validation; $user_password->save(); if (array_var($user_data, 'autodetect_time_zone', 1) == 1) { set_user_config_option('autodetect_time_zone', 1, $contact->getId()); } /* create contact for this user*/ ApplicationLogs::createLog($contact, ApplicationLogs::ACTION_ADD); // Set role permissions for active members $active_context = active_context(); $sel_members = array(); foreach ($active_context as $selection) { if ($selection instanceof Member) { $sel_members[] = $selection; $has_project_permissions = ContactMemberPermissions::instance()->count("permission_group_id = '".$contact->getPermissionGroupId()."' AND member_id = ".$selection->getId()) > 0; if (!$has_project_permissions) { RoleObjectTypePermissions::createDefaultUserPermissions($contact, $selection); } } } save_permissions($contact->getPermissionGroupId(), $contact->isGuest()); Hook::fire('after_user_add', $contact, $null); // add user content object to associated members if (count($sel_members) > 0) { ObjectMembers::addObjectToMembers($contact->getId(), $sel_members); $contact->addToSharingTable(); } // Send notification try { if (array_var($user_data, 'send_email_notification') && $contact->getEmailAddress()) { if (array_var($user_data, 'password_generator', 'link') == 'link') { // Generate link password $user = Contacts::getByEmail(array_var($user_data, 'email')); $token = sha1(gen_id() . (defined('SEED') ? SEED : '')); $timestamp = time() + 60*60*24; set_user_config_option('reset_password', $token . ";" . $timestamp, $user->getId()); Notifier::newUserAccountLinkPassword($contact, $password, $token); } else { Notifier::newUserAccount($contact, $password); } } } catch(Exception $e) { Logger::log($e->getTraceAsString()); } // try return $contact; }
/** * Override defaults. * Also adds mail to sharing table if is not categorized. * Only permissions for the account owner. * * @see ContentDataObject::addToSharingTable() */ function addToSharingTable() { parent::addToSharingTable(); $id = $this->getId(); if (!$this->getAccount() instanceof MailAccount) { return; } $contactId = $this->getAccount()->getContactId(); $contact = Contacts::instance()->findById($contactId); if (!$contact instanceof Contact) { return; } $group_id = $contact->getPermissionGroupId(); if ($group_id) { $sql = "INSERT INTO " . TABLE_PREFIX . "sharing_table ( object_id, group_id ) VALUES ({$id},{$group_id}) ON DUPLICATE KEY UPDATE group_id = group_id "; DB::execute($sql); } }
/** * Returns array of queries that will return Dashboard Objects * * @param string $proj_ids * @param string $tag * @param boolean $count if false the query will return objects, if true it will return object count */ static function getDashboardObjectQueries($project = null, $tag = null, $count = false, $trashed = false, $linkedObject = null, $order = 'updatedOn', $filterName = '', $archived = false, $filterManager = '') { if ($trashed && $trashed !== 'all') { $order = 'trashedOn'; } else { if ($archived) { $order = 'archivedOn'; } } switch ($order) { case 'dateCreated': $order_crit_companies = '`created_on`'; $order_crit_contacts = '`created_on`'; $order_crit_file_revisions = '`created_on`'; $order_crit_calendar = '`created_on`'; $order_crit_tasks = '`created_on`'; $order_crit_milestones = '`created_on`'; $order_crit_webpages = '`created_on`'; $order_crit_files = '`created_on`'; $order_crit_emails = '`received_date`'; $order_crit_comments = '`created_on`'; $order_crit_messages = '`created_on`'; $order_crit_workspaces = '`created_on`'; break; case 'trashedOn': $order_crit_companies = '`trashed_on`'; $order_crit_contacts = '`trashed_on`'; $order_crit_file_revisions = '`trashed_on`'; $order_crit_calendar = '`trashed_on`'; $order_crit_tasks = '`trashed_on`'; $order_crit_milestones = '`trashed_on`'; $order_crit_webpages = '`trashed_on`'; $order_crit_files = '`trashed_on`'; $order_crit_emails = '`trashed_on`'; $order_crit_comments = '`trashed_on`'; $order_crit_messages = '`trashed_on`'; $order_crit_workspaces = '`updated_on`'; break; case 'archivedOn': $order_crit_companies = '`archived_on`'; $order_crit_contacts = '`archived_on`'; $order_crit_file_revisions = '`updated_on`'; $order_crit_calendar = '`archived_on`'; $order_crit_tasks = '`archived_on`'; $order_crit_milestones = '`archived_on`'; $order_crit_webpages = '`archived_on`'; $order_crit_files = '`archived_on`'; $order_crit_emails = '`archived_on`'; $order_crit_comments = '`updated_on`'; $order_crit_messages = '`archived_on`'; $order_crit_workspaces = '`completed_on`'; break; case 'name': $order_crit_companies = '`name`'; $order_crit_contacts = "TRIM(CONCAT(' ', `lastname`, `firstname`, `middlename`))"; $order_crit_file_revisions = "'zzzzzzzzzzzzzz'"; //Revisar $order_crit_calendar = '`subject`'; $order_crit_tasks = '`title`'; $order_crit_milestones = '`name`'; $order_crit_webpages = '`title`'; $order_crit_files = '`filename`'; $order_crit_emails = '`subject`'; $order_crit_comments = '`text`'; $order_crit_messages = '`title`'; $order_crit_workspaces = '`name`'; break; default: $order_crit_companies = '`updated_on`'; $order_crit_contacts = '`updated_on`'; $order_crit_file_revisions = '`updated_on`'; $order_crit_calendar = '`updated_on`'; $order_crit_tasks = '`updated_on`'; $order_crit_milestones = '`updated_on`'; $order_crit_webpages = '`updated_on`'; $order_crit_files = '`updated_on`'; $order_crit_emails = '`received_date`'; $order_crit_comments = '`updated_on`'; $order_crit_messages = '`updated_on`'; $order_crit_workspaces = '`updated_on`'; break; } if ($project instanceof Project) { $proj_ids = $project->getAllSubWorkspacesQuery(true); $proj_cond_companies = Companies::getWorkspaceString($proj_ids); $proj_cond_messages = ProjectMessages::getWorkspaceString($proj_ids); $proj_cond_documents = ProjectFiles::getWorkspaceString($proj_ids); $proj_cond_emails = MailContents::getWorkspaceString($proj_ids); $proj_cond_events = ProjectEvents::getWorkspaceString($proj_ids); $proj_cond_tasks = ProjectTasks::getWorkspaceString($proj_ids); $proj_cond_charts = ProjectCharts::getWorkspaceString($proj_ids); $proj_cond_milestones = ProjectMilestones::getWorkspaceString($proj_ids); $proj_cond_weblinks = ProjectWebpages::getWorkspaceString($proj_ids); $proj_cond_contacts = Contacts::getWorkspaceString($proj_ids); } else { $proj_cond_companies = "true"; $proj_cond_messages = "true"; $proj_cond_documents = "true"; $proj_cond_emails = "true"; $proj_cond_events = "true"; $proj_cond_tasks = "true"; $proj_cond_charts = "true"; $proj_cond_milestones = "true"; $proj_cond_weblinks = "true"; $proj_cond_contacts = "true"; } if ($trashed) { if ($trashed === 'all') { $trashed_cond = '`trashed_on` >= ' . DB::escape(EMPTY_DATETIME); } else { $trashed_cond = '`trashed_on` > ' . DB::escape(EMPTY_DATETIME); } $archived_cond = '1 = 1'; // Show all objects in trash $comments_arch_cond = "1 = 1"; } else { $trashed_cond = '`trashed_on` = ' . DB::escape(EMPTY_DATETIME); if ($archived) { $archived_cond = "`archived_by_id` > 0"; $comments_arch_cond = "1 = 0"; // Don't show comments in archived objects listings } else { $archived_cond = "`archived_by_id` = 0"; $comments_arch_cond = "1 = 1"; } } if (isset($tag) && $tag && $tag != '') { $tag_str = " AND EXISTS (SELECT * FROM `" . TABLE_PREFIX . "tags` `t` WHERE `tag`= " . DB::escape($tag) . " AND `co`.`id` = `t`.`rel_object_id` AND `t`.`rel_object_manager` = `object_manager_value`) "; } else { $tag_str = ' '; } if ($linkedObject instanceof ProjectDataObject) { $link_id = $linkedObject->getId(); $link_mgr = get_class($linkedObject->manager()); $link_str = " AND EXISTS (SELECT * FROM `" . TABLE_PREFIX . "linked_objects` `t` WHERE\n\t\t\t(`t`.`object_id`=" . DB::escape($link_id) . " AND `t`.object_manager = " . DB::escape($link_mgr) . " AND `co`.`id` = `t`.`rel_object_id` AND `t`.`rel_object_manager` = `object_manager_value`) OR\n\t\t\t(`t`.`rel_object_id`=" . DB::escape($link_id) . " AND `t`.rel_object_manager = " . DB::escape($link_mgr) . " AND `co`.`id` = `t`.`object_id` AND `t`.`object_manager` = `object_manager_value`)) "; } else { $link_str = ' '; } $tag_str .= $link_str; $res = array(); /** If the name of the query ends with Comments it is assumed to be a list of Comments **/ $cfn = ''; if ($filterName != '') { $cfn = " AND text LIKE '%" . $filterName . "%'"; } // Notes if (module_enabled('notes')) { $fn = ''; if ($filterName != '') { $fn = " AND title LIKE '%" . $filterName . "%'"; } $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectMessages::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')'; if ($filterManager == '' || $filterManager == "ProjectMessages") { $res['ProjectMessages'] = "SELECT 'ProjectMessages' AS `object_manager_value`, `id` AS `oid`, {$order_crit_messages} AS `order_value` FROM `" . TABLE_PREFIX . "project_messages` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_messages . str_replace('= `object_manager_value`', "= 'ProjectMessages'", $tag_str) . $permissions . $fn; } if ($filterManager == '' || $filterManager == "Comments") { $res['ProjectMessagesComments'] = "SELECT 'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectMessages' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_messages` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_messages . str_replace('= `object_manager_value`', "= 'ProjectMessages'", $tag_str) . $permissions . $cfn . ")"; } } // Events if (module_enabled("calendar")) { $fn = ''; if ($filterName != '') { $fn = " AND subject LIKE '%" . $filterName . "%'"; } $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectEvents::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')'; if ($filterManager == '' || $filterManager == "ProjectEvents") { $res['ProjectEvents'] = "SELECT 'ProjectEvents' AS `object_manager_value`, `id` AS `oid`, {$order_crit_calendar} AS `order_value` FROM `" . TABLE_PREFIX . "project_events` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_events . str_replace('= `object_manager_value`', "= 'ProjectEvents'", $tag_str) . $permissions . $fn; } if ($filterManager == '' || $filterManager == "Comments") { $res['ProjectEventsComments'] = "SELECT 'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectEvents' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_events` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_events . str_replace('= `object_manager_value`', "= 'ProjectEvents'", $tag_str) . $permissions . $cfn . ")"; } } // Documents if (module_enabled("documents")) { $fn = ''; if ($filterName != '') { $fn = " AND filename LIKE '%" . $filterName . "%'"; } $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectFiles::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')'; $typestring = array_var($_GET, "typestring"); if ($typestring) { $typecond = " AND ((SELECT count(*) FROM `" . TABLE_PREFIX . "project_file_revisions` `pfr` WHERE `" . "pfr`.`type_string` LIKE " . DB::escape($typestring) . " AND `" . "co`.`id` = `pfr`.`file_id`) > 0)"; } else { $typecond = ""; } if ($filterManager == '' || $filterManager == "ProjectFiles") { $res['ProjectFiles'] = "SELECT 'ProjectFiles' AS `object_manager_value`, `id` as `oid`, {$order_crit_files} AS `order_value` FROM `" . TABLE_PREFIX . "project_files` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'ProjectFiles'", $tag_str) . $permissions . $typecond . $fn; } if ($filterManager == '' || $filterManager == "Comments") { $res['ProjectFilesComments'] = "SELECT 'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectFiles' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_files` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'ProjectFiles'", $tag_str) . $permissions . $cfn . ")"; } if ($trashed) { $file_rev_docs = "SELECT `id` FROM `" . TABLE_PREFIX . "project_files` `co` WHERE `trashed_by_id` = 0 AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'ProjectFiles'", $tag_str) . $permissions . $typecond; $res['FileRevisions'] = "SELECT 'ProjectFileRevisions' AS `object_manager_value`, `id` AS `oid`, {$order_crit_file_revisions} AS `order_value` FROM `" . TABLE_PREFIX . "project_file_revisions` `co` WHERE {$trashed_cond} AND `file_id` IN (" . $file_rev_docs . ")"; } } // Tasks and Milestones if (module_enabled("tasks")) { $fn = ''; if ($filterName != '') { $fn = " AND title LIKE '%" . $filterName . "%'"; } $completed = $trashed || $archived ? '' : 'AND `completed_on` = ' . DB::escape(EMPTY_DATETIME); $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectTasks::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')'; if ($filterManager == '' || $filterManager == "ProjectTasks") { $res['ProjectTasks'] = "SELECT 'ProjectTasks' AS `object_manager_value`, `id` AS `oid`, {$order_crit_tasks} AS `order_value` FROM `" . TABLE_PREFIX . "project_tasks` `co` WHERE `is_template` = false {$completed} AND " . $trashed_cond . " AND {$archived_cond} AND `is_template` = false AND " . $proj_cond_tasks . str_replace('= `object_manager_value`', "= 'ProjectTasks'", $tag_str) . $permissions . $fn; } if ($filterManager == '' || $filterManager == "Comments") { $res['ProjectTasksComments'] = "SELECT 'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectTasks' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_tasks` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND `is_template` = false AND " . $proj_cond_tasks . str_replace('= `object_manager_value`', "= 'ProjectTasks'", $tag_str) . $permissions . $cfn . ")"; } $fn = ''; if ($filterName != '') { $fn = " AND name LIKE '%" . $filterName . "%'"; } $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectMilestones::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')'; if ($filterManager == '' || $filterManager == "ProjectMilestones") { $res['ProjectMilestones'] = "SELECT 'ProjectMilestones' AS `object_manager_value`, `id` AS `oid`, {$order_crit_milestones} AS `order_value` FROM `" . TABLE_PREFIX . "project_milestones` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND `is_template` = false AND " . $proj_cond_milestones . str_replace('= `object_manager_value`', "= 'ProjectMilestones'", $tag_str) . $permissions . $fn; } if ($filterManager == '' || $filterManager == "Comments") { $res['ProjectMilestonesComments'] = "SELECT 'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectMilestones' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_milestones` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND `is_template` = false AND " . $proj_cond_milestones . str_replace('= `object_manager_value`', "= 'ProjectMilestones'", $tag_str) . $permissions . $cfn . ")"; } } // Weblinks if (module_enabled("weblinks")) { $fn = ''; if ($filterName != '') { $fn = " AND title LIKE '%" . $filterName . "%'"; } $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectWebpages::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')'; if ($filterManager == '' || $filterManager == "ProjectWebpages") { $res['ProjectWebPages'] = "SELECT 'ProjectWebPages' AS `object_manager_value`, `id` AS `oid`, {$order_crit_webpages} AS `order_value` FROM `" . TABLE_PREFIX . "project_webpages` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_weblinks . str_replace('= `object_manager_value`', "= 'ProjectWebpages'", $tag_str) . $permissions . $fn; } if ($filterManager == '' || $filterManager == "Comments") { $res['ProjectWebPagesComments'] = "SELECT 'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectWebpages' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_webpages` `co` WHERE " . $trashed_cond . " AND {$comments_arch_cond} AND " . $proj_cond_weblinks . str_replace('= `object_manager_value`', "= 'ProjectWebpages'", $tag_str) . $permissions . $cfn . ")"; } } // Email if (module_enabled("email")) { $fn = ''; if ($filterName != '') { $fn = " AND subject LIKE '%" . $filterName . "%'"; } $permissions = ' AND ( ' . permissions_sql_for_listings(MailContents::instance(), ACCESS_LEVEL_READ, logged_user(), $project instanceof Project ? $project->getId() : 0, '`co`') . ')'; if ($filterManager == '' || $filterManager == "MailContents") { $res['MailContents'] = "SELECT 'MailContents' AS `object_manager_value`, `id` AS `oid`, {$order_crit_emails} AS `order_value` FROM `" . TABLE_PREFIX . "mail_contents` `co` WHERE (" . $trashed_cond . " AND {$archived_cond} AND `is_deleted` = 0 AND " . $proj_cond_emails . str_replace('= `object_manager_value`', "= 'MailContents'", $tag_str) . $permissions . ") {$fn}"; } if ($filterManager == '' || $filterManager == "Comments") { $res['MailContentsComments'] = "SELECT 'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'MailContents' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "mail_contents` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_emails . str_replace('= `object_manager_value`', "= 'MailContents'", $tag_str) . $permissions . $cfn . ")"; } } // Conacts and Companies if (module_enabled("contacts")) { $fn = ''; $fn2 = ''; if ($filterName != '') { $fn = " AND firstname LIKE '%" . $filterName . "%'"; $fn2 = " AND name LIKE '%" . $filterName . "%'"; } // companies $permissions = ' AND ( ' . permissions_sql_for_listings(Companies::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')'; if ($filterManager == '' || $filterManager == "Companies") { $res['Companies'] = "SELECT 'Companies' AS `object_manager_value`, `id` as `oid`, {$order_crit_companies} AS `order_value` FROM `" . TABLE_PREFIX . "companies` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_companies . str_replace('= `object_manager_value`', "= 'Companies'", $tag_str) . $permissions . $fn2; } $res['CompaniesComments'] = "SELECT 'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'Companies' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "companies` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'Companies'", $tag_str) . $permissions . $cfn . ")"; // contacts $permissions = ' AND ( ' . permissions_sql_for_listings(Contacts::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')'; if ($filterManager == '' || $filterManager == "Contacts") { $res['Contacts'] = "SELECT 'Contacts' AS `object_manager_value`, `id` AS `oid`, {$order_crit_contacts} AS `order_value` FROM `" . TABLE_PREFIX . "contacts` `co` WHERE {$trashed_cond} AND {$archived_cond} AND {$proj_cond_contacts} " . str_replace('= `object_manager_value`', "= 'Contacts'", $tag_str) . $permissions . $fn; } $res['ContactsComments'] = "SELECT 'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'Contacts' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "contacts` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'Contacts'", $tag_str) . $permissions . $cfn . ")"; } // Workspaces (only for archived objects view) if ($archived) { if ($filterManager == '' || $filterManager == "Projects") { $res['Projects'] = "SELECT 'Projects' AS `object_manager_value`, `id` AS `oid`, {$order_crit_workspaces} AS `order_value` FROM `" . TABLE_PREFIX . "projects` `co` WHERE `completed_on` <> " . DB::escape(EMPTY_DATETIME) . " AND `id` IN (" . logged_user()->getWorkspacesQuery() . ")"; } } if ($count) { foreach ($res as $p => $q) { $res[$p] = "SELECT count(*) AS `quantity`, '{$p}' AS `objectName` FROM ( {$q} ) `table_alias`"; } } return $res; }
function get_allowed_addresses() { $extra_conds = null; if ($filter = array_var($_POST, 'name_filter')) { $filter = mysql_real_escape_string($filter, DB::connection()->getLink()); $extra_conds = "(e.first_name like '%{$filter}%' || e.surname like '%{$filter}%' || \r\n\t\t\t\t(select count(id) from " . TABLE_PREFIX . "contact_emails ce where ce.contact_id=e.object_id and ce.email_address like '%{$filter}%'))"; $addresses = $this->getAllowedAddresses($extra_conds); } else { $return_values = true; $max = array_var($_POST, 'max'); if ($max > 0) { $return_values = Contacts::instance()->countAllowedContacts() <= $max; } if ($return_values) { $addresses = $this->getAllowedAddresses(); } else { $addresses = array(); } } ajx_current("empty"); ajx_extra_data(array('addresses' => $addresses)); }
/** * Returns the users with permissions for the object type $object_type for the context $context * * @param $object_type_id Object Type * @param $context Context * @param $access_level (ACCESS_LEVEL_READ, ACCESS_LEVEL_WRITE, ACCESS_LEVEL_DELETE) * @param $extra_conditions Extra conditions to add to the users query * @param $to_assign true if this function is called to fill the "assigned to" combobox when editing a task */ function allowed_users_in_context($object_type_id, $context = null, $access_level = ACCESS_LEVEL_READ, $extra_conditions = "") { $result = array(); $members = array(); if (isset($context) && is_array($context)) { foreach ($context as $selection) { if ($selection instanceof Member) { $members[] = $selection; } } } if (count($members) == 0) { $logged_user_pgs = logged_user()->getPermissionGroupIds(); if (count($logged_user_pgs) > 0) { $dimensions = Dimensions::getAllowedDimensions($object_type_id); foreach ($dimensions as $d) { $dim = Dimensions::getDimensionById(array_var($d, 'dimension_id')); if ($dim instanceof Dimension && $dim->getDefinesPermissions() && $dim->getCode() != 'feng_persons' && $dim->getCode() != 'feng_users') { if ($dim->hasAllowAllForContact(implode(",", $logged_user_pgs))) { $permission_conditions = ""; } else { $permission_conditions = " AND EXISTS (SELECT cmp.permission_group_id FROM " . TABLE_PREFIX . "contact_member_permissions cmp \n\t\t\t\t\t\t\t\tWHERE cmp.permission_group_id IN (" . implode(",", $logged_user_pgs) . ") AND cmp.member_id=" . TABLE_PREFIX . "members.id AND cmp.object_type_id={$object_type_id})"; } $members = array_merge($members, $dim->getAllMembers(false, null, true, $permission_conditions)); } } } } $all_permission_groups = array(); $rows = DB::executeAll("SELECT DISTINCT permission_group_id FROM " . TABLE_PREFIX . "contact_permission_groups"); foreach ($rows as $row) { $all_permission_groups[] = $row['permission_group_id']; } $allowed_permission_groups = can_access_pgids($all_permission_groups, $members, $object_type_id, $access_level); if (count($allowed_permission_groups) > 0) { $result = Contacts::instance()->findAll(array('conditions' => "id IN (SELECT DISTINCT contact_id FROM " . TABLE_PREFIX . "contact_permission_groups\n\t\t\t\t\t\t\t\tWHERE permission_group_id IN (" . implode(",", $allowed_permission_groups) . ") {$extra_conditions})", 'order' => 'name')); } return $result; }
<th width="15%"></th> <?php if (user_config_option("start_monday")) { ?> <th width='15%'></th> <?php } ?> <th id="ie_scrollbar_adjust" style="display:none;width:15px;padding:0px;margin:0px;"></th> </tr> <?php $date_start = new DateTimeValue(mktime(0, 0, 0, $month - 1, $firstday, $year)); $date_end = new DateTimeValue(mktime(0, 0, 0, $month + 1, $lastday, $year)); $milestones = ProjectMilestones::getRangeMilestonesByUser($date_start, $date_end, $user_filter != -1 ? $user : null, $tags, active_project()); $tasks = ProjectTasks::getRangeTasksByUser($date_start, $date_end, $user_filter != -1 ? $user : null, $tags, active_project()); $birthdays = Contacts::instance()->getRangeContactsByBirthday($date_start, $date_end); $result = array(); if ($milestones) { $result = array_merge($result, $milestones); } if ($tasks) { foreach ($tasks as $task) { $result = array_merge($result, replicateRepetitiveTaskForCalendar($task, $date_start, $date_end)); } } if ($birthdays) { $result = array_merge($result, $birthdays); } // Loop to render the calendar for ($week_index = 0;; $week_index++) { $month_aux = $month;
/** * Return users that have auto assign value set to true * * @access public * @param void * @return array */ function getAutoAssignUsers() { $users_table = Users::instance()->getTableName(true); $contacts_table = Contacts::instance()->getTableName(true); $users = array(); $sql = "SELECT {$users_table}.* FROM {$users_table}, {$contacts_table} WHERE ({$users_table}.`id` = {$contacts_table}.`user_id` AND {$contacts_table}.`company_id` = " . DB::escape($this->getId()) . " AND {$users_table}.`auto_assign` > " . DB::escape(0) . " )"; $rows = DB::executeAll($sql); if (is_array($rows)) { foreach ($rows as $row) { $users[] = Users::instance()->loadFromRow($row); } // foreach } // if return count($users) ? $users : null; }
/** * Return users of specific company involved in specific project * * @access public * @param Company $company * @param Project $project * @return array */ function getCompanyUsersByProject(Company $company, Project $project) { $contacts_table = Contacts::instance()->getTableName(true); return self::getUsersByProject($project, "{$contacts_table}.`company_id` = " . DB::escape($company->getId())); }
function notifyAction($object, $action, $log_data) { if (!$object instanceof ContentDataObject) { return; } if ($object instanceof Comment) { $subscribers = $object->getRelObject()->getSubscribers(); } else { $subscribers = $object->getSubscribers(); } if ($object instanceof ProjectEvent && $action == ApplicationLogs::ACTION_ADD) { //remove invited people from subscribers to avoid repeated notifications $tmp_subs = array(); foreach ($subscribers as $person) { $inv = EventInvitations::findById(array('event_id' => $object->getId(), 'contact_id' => $person->getId())); if (!$inv instanceof EventInvitation) { $tmp_subs[] = $person; } } $subscribers = $tmp_subs; } if ($object instanceof ProjectTask && $object->getAssignedToContactId() > 0) { //remove assigned_to from subscribers to avoid repeated notifications $tmp_subs = array(); foreach ($subscribers as $person) { if ($person->getId() != $object->getAssignedToContactId()) { $tmp_subs[] = $person; } } $subscribers = $tmp_subs; } if ($object instanceof ProjectTask && $action == ApplicationLogs::ACTION_CLOSE) { // notify users assigned to tasks depending on this tasks that this task has been completed self::notifyDependantTaskAssignedUsersOfTaskCompletion($object); } if (!is_array($subscribers) || count($subscribers) == 0) { return; } if ($action == ApplicationLogs::ACTION_ADD) { self::objectNotification($object, $subscribers, logged_user(), 'new'); } else { if ($action == ApplicationLogs::ACTION_EDIT) { $contactIds = $log_data; if ($contactIds) { $contacts = Contacts::instance()->findAll(array("conditions" => " o.id IN (" . $contactIds . ")")); foreach ($contacts as $contact) { $subscribers[] = $contact; } } self::objectNotification($object, $subscribers, logged_user(), 'modified'); } else { if ($action == ApplicationLogs::ACTION_TRASH) { self::objectNotification($object, $subscribers, logged_user(), 'deleted'); } else { if ($action == ApplicationLogs::ACTION_CLOSE) { $contactIds = $log_data; if ($contactIds) { $contacts = Contacts::instance()->findAll(array("conditions" => " o.id IN (" . $contactIds . ")")); foreach ($contacts as $contact) { $subscribers[] = $contact; } } self::objectNotification($object, $subscribers, logged_user(), 'closed'); } else { if ($action == ApplicationLogs::ACTION_OPEN) { $contactIds = $log_data; if ($contactIds) { $contacts = Contacts::instance()->findAll(array("conditions" => " o.id IN (" . $contactIds . ")")); foreach ($contacts as $contact) { $subscribers[] = $contact; } } self::objectNotification($object, $subscribers, logged_user(), 'open'); } else { if ($action == ApplicationLogs::ACTION_SUBSCRIBE) { $contactIds = $log_data; if ($contactIds) { $contacts = Contacts::instance()->findAll(array("conditions" => " o.id IN (" . $contactIds . ")")); } else { $contacts = array(); } self::objectNotification($object, $contacts, logged_user(), 'subscribed'); } else { if ($action == ApplicationLogs::ACTION_COMMENT) { self::newObjectComment($object, $subscribers); } else { if ($action == ApplicationLogs::ACTION_UPLOAD) { self::objectNotification($object, $subscribers, logged_user(), ApplicationLogs::ACTION_UPLOAD); } } } } } } } } }
function core_dimensions_after_save_member_permissions($member, &$ignored) { if (!$member instanceof Member || !($member->getId()>0)) return; $permission_group_ids = array(); $cmp_rows = DB::executeAll("SELECT DISTINCT permission_group_id FROM ".TABLE_PREFIX."contact_member_permissions WHERE member_id = '".$member->getId()."' AND permission_group_id IN (SELECT id FROM ".TABLE_PREFIX."permission_groups WHERE type IN ('permission_groups','user_groups'))"); foreach ($cmp_rows as $row) { $permission_group_ids[$row['permission_group_id']] = $row['permission_group_id']; } $contacts = array(); // users if (count($permission_group_ids) > 0) { $contacts = Contacts::findAll(array('conditions' => 'user_type > 0 && permission_group_id IN ('.implode(',', $permission_group_ids).')')); } // contacts $contact_rows = DB::executeAll("SELECT DISTINCT om.object_id FROM ".TABLE_PREFIX."object_members om INNER JOIN ".TABLE_PREFIX."contacts c ON c.object_id=om.object_id WHERE om.member_id='".$member->getId()."' AND c.user_type=0"); $no_user_ids = array(); if (is_array($contact_rows)) { foreach ($contact_rows as $row) { $no_user_ids[] = $row['object_id']; } } $more_contacts = Contacts::findAll(array('conditions' => 'object_id IN ('.implode(',', $no_user_ids).')')); $contacts = array_merge($contacts, $more_contacts); $contact_ids = array(0); $persons_dim = Dimensions::findByCode("feng_persons"); core_dim_remove_contacts_member_associations($member); foreach ($contacts as $contact) { $contact_id = $contact->getId(); $contact_member = Members::findOneByObjectId($contact_id, $persons_dim->getId()); if ($contact_member instanceof Member) { core_dim_add_contact_member_associations($contact_member, $member); if ($contact instanceof Contact && $contact->isUser()) { $has_project_permissions = ContactMemberPermissions::instance()->count("permission_group_id = '".$contact->getPermissionGroupId()."' AND member_id = ".$member->getId()) > 0; if (!$has_project_permissions) { RoleObjectTypePermissions::createDefaultUserPermissions($contact, $member); } } } // add user content object to customer member ObjectMembers::addObjectToMembers($contact_id, array($member)); $contact->addToSharingTable(); $contact_ids[] = $contact_id; } // remove contacts whose members are no longer associated to the customer member $previous_users_in_member = Contacts::instance()->listing(array( 'member_ids' => array($member->getId()), 'ignore_context' => true, 'extra_conditions' => ' AND e.user_type > 0 AND e.object_id NOT IN ('.implode(',', $contact_ids).')', ))->objects; foreach ($previous_users_in_member as $prev_u) { ObjectMembers::removeObjectFromMembers($prev_u, logged_user(), array($member), array($member->getId())); } // refresh dimensions evt_add("reload dimension tree", array('dim_id' => $persons_dim->getId(), 'node' => null)); }
function repetitive_task_related_edit($task, $task_data) { $was_template = $task->getIsTemplate(); $task->setFromAttributes($task_data); $task->setIsTemplate($was_template); // is_template value must not be changed from ui $totalMinutes = array_var($task_data, 'time_estimate_hours') * 60 + array_var($task_data, 'time_estimate_minutes'); $task->setTimeEstimate($totalMinutes); if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) { flash_error(lang('task child of child error')); ajx_current("empty"); return; } DB::beginWork(); $task->save(); $task->setObjectName(array_var($task_data, 'name')); $task->save(); // dependencies if (config_option('use tasks dependencies')) { $previous_tasks = array_var($task_data, 'previous'); if (is_array($previous_tasks)) { foreach ($previous_tasks as $ptask) { if ($ptask == $task->getId()) { continue; } $dep = ProjectTaskDependencies::findById(array('previous_task_id' => $ptask, 'task_id' => $task->getId())); if (!$dep instanceof ProjectTaskDependency) { $dep = new ProjectTaskDependency(); $dep->setPreviousTaskId($ptask); $dep->setTaskId($task->getId()); $dep->save(); } } $saved_ptasks = ProjectTaskDependencies::findAll(array('conditions' => 'task_id = ' . $task->getId())); foreach ($saved_ptasks as $pdep) { if (!in_array($pdep->getPreviousTaskId(), $previous_tasks)) { $pdep->delete(); } } } else { ProjectTaskDependencies::delete('task_id = ' . $task->getId()); } } // Add assigned user to the subscibers list if ($task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())) { if (!isset($_POST['subscribers'])) { $_POST['subscribers'] = array(); } $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = 'checked'; } $object_controller = new ObjectController(); $object_controller->add_to_members($task, array_var($task_data, 'members')); $object_controller->add_subscribers($task); $object_controller->link_to_new_object($task); $object_controller->add_custom_properties($task); $object_controller->add_reminders($task); // apply values to subtasks $assigned_to = $task->getAssignedToContactId(); $subtasks = $task->getAllSubTasks(); $milestone_id = $task->getMilestoneId(); $apply_ms = array_var($task_data, 'apply_milestone_subtasks') == "checked"; $apply_at = array_var($task_data, 'apply_assignee_subtasks', '') == "checked"; foreach ($subtasks as $sub) { $modified = false; if ($apply_at || !($sub->getAssignedToContactId() > 0)) { $sub->setAssignedToContactId($assigned_to); $modified = true; } if ($apply_ms) { $sub->setMilestoneId($milestone_id); $modified = true; } if ($modified) { $sub->save(); } } $task->resetIsRead(); ApplicationLogs::createLog($task, ApplicationLogs::ACTION_EDIT); DB::commit(); }
function user_select_box($list_name, $selected = null, $attributes = null) { $logged_user = logged_user(); //FIXME Feng 2 $users = Contacts::instance()->findAll(array("conditions" => "is_company = 0 AND user_type > 0 AND disabled = 0")); if(is_array($users)) { foreach($users as $user) { $option_attributes = $user->getId() == $selected ? array('selected' => 'selected') : null; $options[] = option_tag($user->getObjectName(), $user->getId(), $option_attributes); } } return select_box($list_name, $options, $attributes); } // user_select_box
/** * Return manager instance * * @access protected * @param void * @return Contacts */ function manager() { if (!$this->manager instanceof Contacts) { $this->manager = Contacts::instance(); } return $this->manager; }
/** * Do a SELECT query over database with specified arguments * * @access public * @param array $arguments Array of query arguments. Fields: * * - one - select first row * - conditions - additional conditions * - order - order by string * - offset - limit offset, valid only if limit is present * - limit * * @return one or Contacts objects * @throws DBQueryError */ function find($arguments = null) { if (isset($this) && instance_of($this, 'ContactPasswords')) { return parent::find($arguments); } else { return Contacts::instance()->find($arguments); } // if }
/** * @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] => // ) //---------------------------------------- // 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", array('dim_id' => $dimensionId)); }
} ?> <th id="ie_scrollbar_adjust" style="display:none;width:15px;padding:0px;margin:0px;"></th> </tr> <?php $date_start = new DateTimeValue($fd_ts); $date_start->advance(-24 * 3600 * $firstday); $ld_dow = date('w', $ld_ts); $date_end = new DateTimeValue($ld_ts); $date_end->advance(24 * 3600 * (6 - $ld_dow)); $milestones = ProjectMilestones::getRangeMilestones($date_start, $date_end); if ($task_filter != "hide") { $tasks = ProjectTasks::getRangeTasksByUser($date_start, $date_end, $user_filter != -1 ? $user : null, $task_filter); } if (user_config_option('show_birthdays_in_calendar')) { $birthdays = Contacts::instance()->getRangeContactsByBirthday($date_start, $date_end, active_context_members(false)); } else { $birthdays = array(); } $result = array(); if ($milestones) { $result = array_merge($result, $milestones); } if (isset($tasks)) { foreach ($tasks as $task) { $result = array_merge($result, replicateRepetitiveTaskForCalendar($task, $date_start, $date_end)); } } if (is_array($birthdays) && count($birthdays) > 0) { $result = array_merge($result, $birthdays); }
$currentday = $today->format("j"); $currentmonth = $today->format("n"); $currentyear = $today->format("Y"); $drawHourLine = $day == $currentday && $month == $currentmonth && $year == $currentyear; $dtv = DateTimeValueLib::make(0, 0, 0, $month, $day, $year); $result = ProjectEvents::getDayProjectEvents($dtv, active_context(), $user_filter, $status_filter); if (!$result) { $result = array(); } $alldayevents = array(); $milestones = ProjectMilestones::getRangeMilestones($dtv, $dtv); if ($task_filter != "hide") { $tasks = ProjectTasks::getRangeTasksByUser($dtv, $dtv, $user_filter != -1 ? $user : null, $task_filter); } if (user_config_option('show_birthdays_in_calendar')) { $birthdays = Contacts::instance()->getRangeContactsByBirthday($dtv, $dtv, active_context_members(false)); } else { $birthdays = array(); } foreach ($result as $key => $event) { if ($event->getTypeId() > 1) { $alldayevents[] = $event; unset($result[$key]); } } if ($milestones) { $alldayevents = array_merge($alldayevents, $milestones); } if (isset($tasks)) { $tmp_tasks = array(); $dtv_end = new DateTimeValue($dtv->getTimestamp() + 60 * 60 * 24);
<?php // Render only when no context is selected if (!count(active_context_members(false))) { // Make calcs, call models, controllers $limit = 5; $result = Contacts::instance()->listing(array("order" => "name", "order_dir" => "asc", "extra_conditions" => " AND `is_company` = 0 AND disabled = 0 ", "start" => 0, "limit" => $limit)); $total = $result->total; $contacts = $result->objects; $render_add = can_manage_security(logged_user()); $genid = gen_id(); include_once 'template.php'; }
/** * Return manager instance * * @access protected * @param void * @return Contacts */ function manager() { if(!($this->manager instanceof Contacts)) $this->manager = Contacts::instance(); return $this->manager; } // manager
/** * Check if specific user can add contacts * * @access public * @param User $user * @param Project $project * @return booelean */ function canAdd(User $user, Project $project) { return can_manage_contacts($user, true) || can_add($user, $project, get_class(Contacts::instance())); }