public function testArrayMerge() { $array1 = array('a', 'b', 'c', 4 => 'd', 5 => 'e'); $array2 = array('z', 6 => 'y', 7 => 'x', 4 => 'w', 5 => 'v'); $newArray = arrayMerge($array1, $array2); $this->assertEquals('b', $newArray[1]); // Tests no overwrite $this->assertEquals('w', $newArray[4]); // Tests explicit overwrite $this->assertEquals('z', $newArray[0]); // Tests conincidental overwrite }
/** * Merges configurations from all the loaded files. * @param string $group * @param array $config * @return Config_Reader */ public function load($group, array $config = NULL) { if ($files = Exido::findFile($this->_directory, $group)) { // Set config array $config = array(); foreach ($files as $file) { // Merge each config array to the global array $config = arrayMerge($config, require $file); } } return parent::load($group, $config); }
function getFolderSelectList() { global $AppUI; $folders = array(0 => ''); $q = new DBQuery(); $q->addTable('file_folders'); $q->addQuery('file_folder_id, file_folder_name, file_folder_parent'); $q->addOrder('file_folder_name'); $sql = $q->prepare(); // $sql = "SELECT file_folder_id, file_folder_name, file_folder_parent FROM file_folders"; $vfolders = arrayMerge(array('0' => array(0, $AppUI->_('Root'), -1)), db_loadHashList($sql, 'file_folder_id')); $folders = array_filter($vfolders, "check_perm"); return $folders; }
protected function _createCompanySelection($AppUI, $companyInput) { $company = new CCompany(); $companyMatches = $company->getCompanyList($AppUI, -1, $companyInput); $company_id = count($companyMatches) == 1 ? $companyMatches[0]['company_id'] : $AppUI->user_company; $companies = $company->getAllowedRecords($AppUI->user_id, 'company_id,company_name', 'company_name'); $companies = arrayMerge(array('0' => ''), $companies); $output .= '<td>' . arraySelect($companies, 'company_id', ' onChange=this.form.new_company.value=\'\'', $company_id) . '<input type="text" name="new_company" value="' . ($company_id > 0 ? '' : $companyInput) . '" />'; if ($company_id == 0) { $output .= '<br /><em>' . $AppUI->_('compinfo') . '</em>'; } $output .= '</td></tr>'; return $output; }
/** * Taken from CakePHP! * This function can be thought of as a hybrid between PHP's array_merge and array_merge_recursive. The difference * to the two is that if an array key contains another array then the function behaves recursive (unlike array_merge) * but does not do if for keys containing strings (unlike array_merge_recursive). See the unit test for more information. * * Note: This function will work with an unlimited amount of arguments and typecasts non-array parameters into arrays. * * @param array $arr1 Array to be merged * @param array $arr2 Array to merge with * * @return array Merged array */ function arrayMerge($arr1, $arr2 = null) { $args = func_get_args(); if (!isset($r)) { $r = (array) current($args); } while (($arg = next($args)) !== false) { foreach ((array) $arg as $key => $val) { if (is_array($val) && isset($r[$key]) && is_array($r[$key])) { $r[$key] = arrayMerge($r[$key], $val); } elseif (is_int($key)) { $r[] = $val; } else { $r[$key] = $val; } } } return $r; }
/* $Id$ $URL$ */ if (!defined('W2P_BASE_DIR')) { die('You should not access this file directly.'); } global $AppUI, $company_id, $dept_ids, $department, $locale_char_set, $proFilter, $projectStatus, $showInactive, $showLabels, $showAllGantt, $user_id, $w2Pconfig, $project_id, $project_original_id; w2PsetExecutionConditions($w2Pconfig); // get the prefered date format $df = $AppUI->getPref('SHDATEFORMAT'); $projectStatus = w2PgetSysVal('ProjectStatus'); $projectStatus = arrayMerge(array('-2' => $AppUI->_('All w/o in progress')), $projectStatus); $user_id = w2PgetParam($_REQUEST, 'user_id', $AppUI->user_id); if ($AppUI->user_id == $user_id) { $projectStatus = arrayMerge(array('-3' => $AppUI->_('My projects')), $projectStatus); } else { $projectStatus = arrayMerge(array('-3' => $AppUI->_('User\'s projects')), $projectStatus); } $proFilter = w2PgetParam($_REQUEST, 'proFilter', '0'); $company_id = w2PgetParam($_REQUEST, 'company_id', 0); $department = w2PgetParam($_REQUEST, 'department', 0); $showLabels = w2PgetParam($_REQUEST, 'showLabels', 1); $showInactive = w2PgetParam($_REQUEST, 'showInactive', 1); $original_project_id = w2PgetParam($_REQUEST, 'original_project_id', 1); $pjobj = new CProject(); $working_hours = $w2Pconfig['daily_working_hours']; // pull valid projects and their percent complete information // GJB: Note that we have to special case duration type 24 and this refers to the hours in a day, NOT 24 hours $q = new w2p_Database_Query(); $q->addTable('projects', 'pr'); $q->addQuery('DISTINCT pr.project_id, project_color_identifier, project_name, project_start_date, project_end_date, max(t1.task_end_date) AS project_actual_end_date, project_percent_complete, project_status, project_active');
/* $Id: departments_tab.view.projects.php 1863 2011-05-01 00:25:07Z caseydk $ $URL: https://web2project.svn.sourceforge.net/svnroot/web2project/tags/version2.4/modules/projects/departments_tab.view.projects.php $ */ if (!defined('W2P_BASE_DIR')) { die('You should not access this file directly.'); } global $a, $addPwOiD, $buffer, $dept_id, $department, $min_view, $m, $priority, $projects, $tab, $user_id, $orderdir, $orderby; $perms =& $AppUI->acl(); $df = $AppUI->getPref('SHDATEFORMAT'); $pstatus = w2PgetSysVal('ProjectStatus'); if (isset($_POST['proFilter'])) { $AppUI->setState('DeptProjectIdxFilter', $_POST['proFilter']); } $proFilter = $AppUI->getState('DeptProjectIdxFilter') !== null ? $AppUI->getState('DeptProjectIdxFilter') : '-1'; $projFilter = arrayMerge(array('-1' => 'All Projects'), $pstatus); $projFilter = arrayMerge(array('-2' => 'All w/o in progress'), $projFilter); $projFilter = arrayMerge(array('-3' => 'All w/o archived'), $projFilter); natsort($projFilter); // retrieve any state parameters if (isset($_GET['tab'])) { $AppUI->setState('DeptProjIdxTab', w2PgetParam($_GET, 'tab', null)); } if (isset($_GET['orderby'])) { $orderdir = $AppUI->getState('DeptProjIdxOrderDir') ? $AppUI->getState('DeptProjIdxOrderDir') == 'asc' ? 'desc' : 'asc' : 'desc'; $AppUI->setState('DeptProjIdxOrderBy', w2PgetParam($_GET, 'orderby', null)); $AppUI->setState('DeptProjIdxOrderDir', $orderdir); } $orderby = $AppUI->getState('DeptProjIdxOrderBy') ? $AppUI->getState('DeptProjIdxOrderBy') : 'project_end_date'; $orderdir = $AppUI->getState('DeptProjIdxOrderDir') ? $AppUI->getState('DeptProjIdxOrderDir') : 'asc'; if (isset($_POST['show_form'])) { $AppUI->setState('addProjWithOwnerInDep', w2PgetParam($_POST, 'add_pwoid', 0)); }
<?php /* TASKS $Id: gantt2.php 5766 2008-07-09 19:54:52Z merlinyoda $ */ if (!defined('DP_BASE_DIR')) { die('You should not access this file directly.'); } include $AppUI->getLibraryClass('jpgraph/src/jpgraph'); include $AppUI->getLibraryClass('jpgraph/src/jpgraph_gantt'); global $company_id, $dept_ids, $department, $locale_char_set, $proFilter, $projectStatus, $showInactive, $showLabels, $showAllGantt; // $showAllGantt == Gantt with tasks and users // get the prefered date format $df = $AppUI->getPref('SHDATEFORMAT'); $filter1 = array(); $projectStatus = dPgetSysVal('ProjectStatus'); $projectStatus = arrayMerge(array('-2' => $AppUI->_('All w/o in progress')), $projectStatus); $proFilter = dPgetParam($_REQUEST, 'proFilter', '-1'); if ($proFilter == '-2') { $filter1[] = ' project_status != 3'; } else { if ($proFilter != '-1') { $filter1[] = ' project_status = ' . $proFilter; } } if ($company_id != 0) { $filter1[] = ' project_company = ' . $company_id; } if ($showInactive != '1') { $filter1[] = ' project_status <> 7'; } $pjobj =& new CProject(); $allowed_projects = $pjobj->getAllowedSQL($AppUI->user_id);
$log_start_date = dPgetCleanParam($_POST, 'log_start_date', 0); $log_end_date = dPgetCleanParam($_POST, 'log_end_date', 0); $log_all = (bool) dPgetParam($_POST, 'log_all', true); $use_period = (int) dPgetParam($_POST, 'use_period', 0); $show_orphaned = (int) dPgetParam($_POST, 'show_orphaned', 0); $display_week_hours = (int) dPgetParam($_POST, 'display_week_hours', 0); $max_levels = dPgetCleanParam($_POST, 'max_levels', ''); $log_userfilter = (int) dPgetParam($_POST, 'log_userfilter', 0); $company_id = dPgetCleanParam($_POST, 'company_id', 'all'); $project_id = dPgetCleanParam($_POST, 'project_id', 'all'); require_once $AppUI->getModuleClass('projects'); require_once $AppUI->getModuleClass('tasks'); $proj = new CProject(); // filtering by companies $projects = $proj->getAllowedRecords($AppUI->user_id, 'project_id,project_name', 'project_name'); $projFilter = arrayMerge(array('all' => $AppUI->_('All Projects')), $projects); $durnTypes = dPgetSysVal('TaskDurationType'); $taskPriority = dPgetSysVal('TaskPriority'); // create Date objects from the datetime fields $start_date = intval($log_start_date) ? new CDate($log_start_date) : new CDate(); $end_date = intval($log_end_date) ? new CDate($log_end_date) : new CDate(); $now = new CDate(); if (!$log_start_date) { $start_date->subtractSpan(new Date_Span('14,0,0,0')); } $end_date->setTime(23, 59, 59); ?> <script language="javascript"> var calendarField = '';
if (isset($_POST['f2'])) { $AppUI->setState('CompanyIdxFilter', $_POST['f2']); } $f2 = $AppUI->getState('CompanyIdxFilter') ? $AppUI->getState('CompanyIdxFilter') : (w2PgetConfig('company_filter_default', 'user') == 'user' ? $AppUI->user_company : 'allcompanies'); if (isset($_GET['project_id'])) { $AppUI->setState('TaskIdxProject', w2PgetParam($_GET, 'project_id', null)); } $project_id = $AppUI->getState('TaskIdxProject') ? $AppUI->getState('TaskIdxProject') : 0; if (isset($_POST['show_task_options'])) { $AppUI->setState('TaskListShowIncomplete', w2PgetParam($_POST, 'show_incomplete', 0)); } $showIncomplete = $AppUI->getState('TaskListShowIncomplete', 0); // get CCompany() to filter tasks by company $obj = new CCompany(); $companies = $obj->getAllowedRecords($AppUI->user_id, 'company_id,company_name', 'company_name'); $filters2 = arrayMerge(array('allcompanies' => $AppUI->_('All Companies', UI_OUTPUT_RAW)), $companies); // setup the title block $titleBlock = new w2p_Theme_TitleBlock('Tasks', 'applet-48.png', $m, $m . '.' . $a); // patch 2.12.04 text to search entry box if (isset($_POST['searchtext'])) { $AppUI->setState('searchtext', $_POST['searchtext']); } $search_text = $AppUI->getState('searchtext') ? $AppUI->getState('searchtext') : ''; $search_text = w2PformSafe($search_text, true); $titleBlock->addCell(' ' . $AppUI->_('Search') . ':'); $titleBlock->addCell('<input type="text" class="text" size="20" name="searchtext" onChange="document.searchfilter.submit();" value="' . $search_text . '" title="' . $AppUI->_('Search in name and description fields') . '"/>', '', '<form action="?m=tasks" method="post" id="searchfilter" accept-charset="utf-8">', '</form>'); // Let's see if this user has admin privileges if (canView('admin')) { $titleBlock->addCell(); $titleBlock->addCell($AppUI->_('User') . ':'); $user_list = $perms->getPermittedUsers('tasks');
<?php /* SYSKEYS $Id$ */ if (!defined('DP_BASE_DIR')) { die('You should not access this file directly.'); } $AppUI->savePlace(); // pull all the key types $sql = "SELECT syskey_id,syskey_name FROM syskeys ORDER BY syskey_name"; $keys = arrayMerge(array(0 => '- Select Type -'), db_loadHashList($sql)); $sql = "SELECT * FROM syskeys, sysvals WHERE sysval_key_id = syskey_id ORDER BY sysval_title"; $values = db_loadList($sql); $sysval_id = isset($_GET['sysval_id']) ? $_GET['sysval_id'] : 0; $titleBlock = new CTitleBlock('System Lookup Values', 'myevo-weather.png', $m, "{$m}.{$u}.{$a}"); $titleBlock->addCrumb("?m=system", "System Admin"); $titleBlock->show(); ?> <script language="javascript"> <?php // security improvement: // some javascript functions may not appear on client side in case of user not having write permissions // else users would be able to arbitrarily run 'bad' functions if ($canEdit) { ?> function delIt(id, name) { if (confirm('Are you sure you want to delete \'' + name + '\'?')) { f = document.sysValFrm; f.del.value = 1; f.sysval_id.value = id; f.submit(); }
$start_data_linkable[$i] = urlencode($start_day->getDate()); // $starts[$i] = $start_day->format($df); $sql = "\n\t\t\tSELECT\n\t\t\t\ttask_log_creator,\n\t\t\t\tsum(task_log_hours) as hours\n\t\t\tFROM\n\t\t\t\ttask_log\n\t\t\tWHERE\n\t\t\t\ttask_log_date >= '" . $start_day->format(FMT_DATETIME_MYSQL) . "' \n\t\t\t\tAND task_log_date <= '" . $end_day->format(FMT_DATETIME_MYSQL) . "'\n\t\t\t\tAND task_log_creator in (" . implode(", ", $ids) . ")\n\t\t\tGROUP BY\n\t\t\t\ttask_log_creator\n\t\t\t"; //print "<pre>$sql</pre>"; $result = db_loadList($sql); foreach ($result as $row) { $people[$row['task_log_creator']][$i] = $row['hours']; } $date = $start_day->format("%Y-%m-%d") . " 12:00:00"; $start_day->setDate($date, DATE_FORMAT_ISO); $start_day->addDays(-7); } } $sql = "SELECT company_id, company_name FROM companies WHERE " . getPermsWhereClause("companies", "company_id") . " ORDER BY company_name"; //print "<pre>$sql</pre>"; $companies = arrayMerge(array(0 => $AppUI->_('All Entities')), db_loadHashList($sql)); $next_day = new CDate(); $next_day->copy($start_day); $next_day->addDays($week_count * 7 * 2); ?> <form name="frmCompanySelect" action="" method="get"> <input type="hidden" name="m" value="timecard"> <input type="hidden" name="report_type" value="weekly_by_user"> <input type="hidden" name="tab" value="<?php echo $tab; ?> "> <table cellspacing="1" cellpadding="2" border="0" width="100%"> <tr> <td width="95%"><?php echo arraySelect($companies, 'company_id', 'size="1" class="text" id="medium" onchange="document.frmCompanySelect.submit()"', $company_id);
function getFolderSelectList() { global $AppUI; $folder = new CFileFolder(); $allowed_folders = array(); $allowed_folders_pre = $folder->getAllowedRecords($AppUI->user_id, 'file_folder_id, file_folder_name' . ', file_folder_parent', 'file_folder_name', 'file_folder_id'); //get array in proper "format" for tree foreach ($allowed_folders_pre as $results) { $folder_id = $results['file_folder_id']; $allowed_folders[$folder_id] = array($results['file_folder_id'], $results['file_folder_name'], $results['file_folder_parent']); } $folders = arrayMerge(array(array(0, $AppUI->_('Root'), -1)), $allowed_folders); return $folders; }
document.AddEdit.submit(); } </script> <tr> <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Project'); ?> :</td> <td width="60%"> <?php // pull the projects list $q->addTable('projects'); $q->addQuery('project_id, project_name'); $q->addOrder('project_name'); $projects = arrayMerge(array(0 => '(' . $AppUI->_('any', UI_OUTPUT_RAW) . ')'), $q->loadHashList()); echo arraySelect($projects, 'history_project', 'class="text"', $history["history_project"]); ?> </td> </tr> <tr> <td align="right" nowrap="nowrap"><?php echo $AppUI->_('Description'); ?> :</td> <td width="60%"> <textarea name="history_description" class="textarea" cols="60" rows="5" wrap="virtual"><?php echo $history["history_description"]; ?> </textarea>
global $AppUI, $user_id, $canEdit, $canDelete, $tab; $perms =& $AppUI->acl(); $module_list = $perms->getModuleList(); //get list of 'real' modules $pgos = array(); $q = new DBQuery(); $q->addTable('modules', 'm'); $q->addQuery('mod_id, mod_name, permissions_item_table'); $q->addWhere('permissions_item_table is not null'); $q->addWhere("permissions_item_table <> ''"); $module_pgo_list = $q->loadHashList('mod_name'); $q->clear(); //list of additional 'pseudo-modules' $pseudo_module_pgo_list = array('File Folders' => array('mod_id' => -1, 'mod_name' => 'file_folders', 'permissions_item_table' => 'file_folders')); //combine modules and 'pseudo-modules' $pgo_list = arrayMerge($module_pgo_list, $pseudo_module_pgo_list); // Build an intersection array for the modules and their listing $modules = array(); $offset = 0; foreach ($module_list as $module) { $modules[$module['type'] . "," . $module['id']] = $module['name']; if ($module['type'] = 'mod' && isset($pgo_list[$module['name']])) { $pgos[$offset] = $pgo_list[$module['name']]['permissions_item_table']; } $offset++; } $count = 0; //Pull User perms $user_acls = $perms->getUserACLs($user_id); if (!is_array($user_acls)) { $user_acls = array();
function dPgetUsers() { global $AppUI; $q = new DBQuery(); $q->addTable('users'); $q->addQuery('user_id, concat_ws(" ", contact_first_name, contact_last_name) as name'); $q->addJoin('contacts', 'con', 'contact_id = user_contact'); $q->addOrder('contact_last_name,contact_first_name'); return arrayMerge(array(0 => $AppUI->_('All Users')), $q->loadHashList()); }
$projects = $project->getAllowedRecords($AppUI->user_id, 'projects.project_id,project_name', 'project_name', null, $extra, 'projects'); $q = new DBQuery(); $q->addTable('projects'); $q->addQuery('projects.project_id, company_name'); $q->addJoin('companies', 'co', 'co.company_id = project_company'); $idx_companies = $q->loadHashList(); $q->clear(); foreach ($projects as $prj_id => $prj_name) { $projects[$prj_id] = $idx_companies[$prj_id] . ': ' . $prj_name; } asort($projects); $projects = arrayMerge(array('0' => $AppUI->_('(None)', UI_OUTPUT_RAW)), $projects); $extra = array(); $task = new CTask(); $tasks = $task->getAllowedRecords($AppUI->user_id, 'task_id,task_name', 'task_name', null, $extra); $tasks = arrayMerge(array('0' => $AppUI->_('(None)', UI_OUTPUT_RAW)), $tasks); if (!$project_id) { //$AppUI->redirect('m=projects&pd=1'); // setup the title block $ttl = 'ProjectDesigner'; $titleBlock = new CTitleBlock($ttl, 'projectdesigner.png', $m, $m . '.' . $a); $titleBlock->addCrumb('?m=projects', 'projects list'); $titleBlock->addCell(); if ($canAddProject) { $titleBlock->addCell('<input type="submit" class="button" value="' . $AppUI->_('new project') . '">', '', '<form action="?m=projects&a=addedit" method="post" accept-charset="utf-8">', '</form>'); } $titleBlock->show(); ?> <script language="javascript"> function submitIt() { var f = document.prjFrm;
$file_task = $obj->file_task; $task_name = $obj->getTaskName(); } elseif ($file_task) { $q = new DBQuery(); $q->addTable('tasks'); $q->addQuery('task_name'); $q->addWhere('task_id=' . (int) $file_task); $task_name = $q->loadResult(); $q->clear(); } else { $task_name = ''; } $extra = array('where' => 'project_active<>0'); $project = new CProject(); $projects = $project->getAllowedRecords($AppUI->user_id, 'projects.project_id,project_name', 'project_name', null, $extra, 'projects'); $projects = arrayMerge(array('0' => $AppUI->_('All')), $projects); ?> <script language='javascript'> function popFile( params ) { fileloader = window.open("fileviewer.php?"+params,"mywindow","location=1,status=1,scrollbars=0,width=80,height=80"); fileloader.moveTo(0,0); } </script> <table width="100%" border="0" cellpadding="3" cellspacing="3" class="std"> <form name="coFrm" action="?m=files" method="post" accept-charset="utf-8"> <input type="hidden" name="dosql" value="do_file_co" /> <input type="hidden" name="del" value="0" /> <input type="hidden" name="file_id" value="<?php
$q->addQuery('dept_id, dept_name, dept_parent'); $q->addWhere('dep.dept_company = ' . $company_id); $q->addWhere('dep.dept_id != ' . $dept_id); $depts = $q->loadArrayList(); $depts['0'] = array(0, '- ' . $AppUI->_('Select Unit') . ' -', -1); } // collect all the users for the department owner list $q = new DBQuery(); $q->addTable('users', 'u'); $q->addTable('contacts', 'con'); $q->addQuery('user_id'); $q->addQuery('CONCAT_WS(", ",contact_last_name, contact_first_name)'); $q->addOrder('contact_first_name'); $q->addWhere('u.user_contact = con.contact_id'); $q->addOrder('contact_last_name, contact_first_name'); $owners = arrayMerge(array('0' => ''), $q->loadHashList()); // setup the title block $ttl = $company_id > 0 ? "Edit Department" : "Add Department"; $titleBlock = new CTitleBlock($ttl, 'users.gif', $m, "{$m}.{$a}"); $titleBlock->addCrumb("?m=companies", "companies list"); $titleBlock->addCrumb("?m=companies&a=view&company_id={$company_id}", "view this company"); $titleBlock->show(); ?> <script language="javascript"> function testURL( x ) { var test = "document.editFrm.dept_url.value"; test = eval(test); if (test.length > 6) { newwin = window.open( "http://" + test, 'newwin', '' ); } }
$task_log_costcodes = $q->loadHashList(); // Show deleted codes separately (at the end) $q->addTable('billingcode'); $q->addQuery('billingcode_id, billingcode_name'); $q->addOrder('billingcode_name'); $q->addWhere('billingcode_status = 1'); $q->addWhere('(company_id = 0 OR company_id = ' . $company_id . ')'); $task_log_costcodes = array_merge(array(0 => 'None'), $task_log_costcodes, $q->loadHashList()); $q = new DBQuery(); $q->addTable('users', 'u'); $q->addQuery('user_id, concat(contact_first_name," ",contact_last_name)'); $q->addJoin('contacts', 'c', 'u.user_contact = c.contact_id'); $q->addJoin('project_contacts', 'p', 'p.contact_id = u.user_id'); $q->addOrder('contact_first_name, contact_last_name'); $q->addWhere('p.project_id = ' . $project_id); $users = arrayMerge(array('-1' => $AppUI->_('All members')), $q->loadHashList()); $cost_code = dPgetParam($_GET, 'cost_code', '0'); if (isset($_GET['user_id'])) { $AppUI->setState('ProjectsTaskLogsUserFilter', $_GET['user_id']); } $user_id = $AppUI->getState('ProjectsTaskLogsUserFilter') ? $AppUI->getState('ProjectsTaskLogsUserFilter') : $AppUI->user_id; if (isset($_GET['hide_inactive'])) { $AppUI->setState('ProjectsTaskLogsHideArchived', true); } else { $AppUI->setState('ProjectsTaskLogsHideArchived', false); } $hide_inactive = $AppUI->getState('ProjectsTaskLogsHideArchived'); if (isset($_GET['hide_complete'])) { $AppUI->setState('ProjectsTaskLogsHideComplete', true); } else { $AppUI->setState('ProjectsTaskLogsHideComplete', false);
$project = new CProject(); $sprojects = $project->getAllowedRecords($AppUI->user_id, 'project_id,project_name', 'project_name', null, $extra); $q = new DBQuery(); $q->addTable('projects'); $q->addQuery('project_id, company_name'); $q->addJoin("companies", 'co', 'co.company_id = project_company'); $idx_companies = $q->loadHashList(); $q->clear(); foreach ($sprojects as $prj_id => $prj_name) { $sprojects[$prj_id] = $idx_companies[$prj_id] . ': ' . $prj_name; } asort($sprojects); $sprojects = arrayMerge(array('' => '(' . $AppUI->_('Move to Project', UI_OUTPUT_RAW) . ')'), $sprojects); //lets addthe reference to percent @(include_once "./functions/tasks_func.php"); $spercent = arrayMerge(array('' => '(Progress)'), $percent); ?> <form name='frm_bulk' method='POST' action='?m=projectdesigner&a=do_task_bulk_aed'> <input type="hidden" name="project_id" value="<?php echo $project_id; ?> " /> <input type="hidden" name="opt_view_project" value="<?php echo isset($view_options[0]['pd_option_view_project']) ? $view_options[0]['pd_option_view_project'] : 1; ?> " /> <input type="hidden" name="opt_view_gantt" value="<?php echo isset($view_options[0]['pd_option_view_gantt']) ? $view_options[0]['pd_option_view_gantt'] : 1; ?> " /> <input type="hidden" name="opt_view_tasks" value="<?php
function projects_list_data($user_id = false) { global $AppUI, $addPwOiD, $cBuffer, $company, $company_id, $company_prefix, $deny, $department; global $dept_ids, $dPconfig, $orderby, $orderdir, $projects, $tasks_critical, $tasks_problems; global $tasks_sum, $tasks_summy, $tasks_total, $owner, $projectTypeId, $project_status; global $currentTabId; $addProjectsWithAssignedTasks = $AppUI->getState('addProjWithTasks') ? $AppUI->getState('addProjWithTasks') : 0; //for getting permissions on project records $obj_project = new CProject(); // Let's delete temproary tables $q = new DBQuery(); $table_list = array('tasks_sum', 'tasks_total', 'tasks_summy', 'tasks_critical', 'tasks_problems', 'tasks_users'); $q->dropTemp($table_list); $q->exec(); $q->clear(); // Task sum table // by Pablo Roca (pabloroca@mvps.org) // 16 August 2003 $working_hours = $dPconfig['daily_working_hours'] ? $dPconfig['daily_working_hours'] : 8; // GJB: Note that we have to special case duration type 24 // and this refers to the hours in a day, NOT 24 hours $q->createTemp('tasks_sum'); $q->addTable('tasks', 't'); $q->addQuery('t.task_project, SUM(t.task_duration * t.task_percent_complete' . ' * IF(t.task_duration_type = 24, ' . $working_hours . ', t.task_duration_type)) / SUM(t.task_duration' . ' * IF(t.task_duration_type = 24, ' . $working_hours . ', t.task_duration_type)) AS project_percent_complete, SUM(t.task_duration' . ' * IF(t.task_duration_type = 24, ' . $working_hours . ', t.task_duration_type)) AS project_duration'); if ($user_id) { $q->addJoin('user_tasks', 'ut', 'ut.task_id = t.task_id'); $q->addWhere('ut.user_id = ' . $user_id); } $q->addWhere('t.task_id = t.task_parent'); $q->addGroup('t.task_project'); $tasks_sum = $q->exec(); $q->clear(); // At this stage tasks_sum contains the project id, and the total of tasks as percentage complate and project duration. // I.e. one record per project // Task total table $q->createTemp('tasks_total'); $q->addTable('tasks', 't'); $q->addQuery('t.task_project, COUNT(distinct t.task_id) AS total_tasks'); if ($user_id) { $q->addJoin('user_tasks', 'ut', 'ut.task_id = t.task_id'); $q->addWhere('ut.user_id = ' . $user_id); } $q->addGroup('t.task_project'); $tasks_total = $q->exec(); $q->clear(); // tasks_total contains the total number of tasks for each project. // temporary My Tasks // by Pablo Roca (pabloroca@mvps.org) // 16 August 2003 $q->createTemp('tasks_summy'); $q->addTable('tasks', 't'); $q->addQuery('t.task_project, COUNT(DISTINCT t.task_id) AS my_tasks'); $q->addWhere('t.task_owner = ' . ($user_id ? $user_id : $AppUI->user_id)); $q->addGroup('t.task_project'); $tasks_summy = $q->exec(); $q->clear(); // tasks_summy contains total count of tasks for each project that I own. // temporary critical tasks $q->createTemp('tasks_critical'); $q->addTable('tasks', 't'); $q->addQuery('t.task_project, t.task_id AS critical_task' . ', MAX(t.task_end_date) AS project_actual_end_date'); // MerlinYoda: we don't join tables if we don't get anything out of the process // $q->addJoin('projects', 'p', 'p.project_id = t.task_project'); $q->addOrder('t.task_end_date DESC'); $q->addGroup('t.task_project'); $tasks_critical = $q->exec(); $q->clear(); // tasks_critical contains the latest ending task and its end date. // temporary task problem logs $q->createTemp('tasks_problems'); $q->addTable('tasks', 't'); $q->addQuery('t.task_project, tl.task_log_problem'); $q->addJoin('task_log', 'tl', 'tl.task_log_task = t.task_id'); $q->addWhere('tl.task_log_problem > 0'); $q->addGroup('t.task_project'); $tasks_problems = $q->exec(); $q->clear(); // tasks_problems contains an indication of any projects that have task logs set to problem. if ($addProjectsWithAssignedTasks) { // temporary users tasks $q->createTemp('tasks_users'); $q->addTable('tasks', 't'); $q->addQuery('t.task_project, ut.user_id'); $q->addJoin('user_tasks', 'ut', 'ut.task_id = t.task_id'); if ($user_id) { $q->addWhere('ut.user_id = ' . $user_id); } $q->addOrder('t.task_end_date DESC'); $q->addGroup('t.task_project'); $tasks_users = $q->exec(); $q->clear(); } // tasks_users contains all projects with tasks that have user assignments. (isn't this getting pointless?) // add Projects where the Project Owner is in the given department if ($addPwOiD && isset($department)) { $owner_ids = array(); $q->addTable('users', 'u'); $q->addQuery('u.user_id'); $q->addJoin('contacts', 'c', 'c.contact_id = u.user_contact'); $q->addWhere('c.contact_department = ' . $department); $owner_ids = $q->loadColumn(); $q->clear(); } if (isset($department)) { /* * If a department is specified, we want to display projects from the department * and all departments under that, so we need to build that list of departments */ $dept_ids = array(); $q->addTable('departments'); $q->addQuery('dept_id, dept_parent'); $q->addOrder('dept_parent,dept_name'); $rows = $q->loadList(); addDeptId($rows, $department); $dept_ids[] = $department; } $q->clear(); $q->addTable('projects', 'p'); $q->addQuery('p.project_id, p.project_status, p.project_color_identifier, p.project_type' . ', p.project_name, p.project_description, p.project_start_date' . ', p.project_end_date, p.project_color_identifier, p.project_company' . ', p.project_status, p.project_priority, com.company_name' . ', com.company_description, tc.critical_task, tc.project_actual_end_date' . ', if (tp.task_log_problem IS NULL, 0, tp.task_log_problem) AS task_log_problem' . ', tt.total_tasks, tsy.my_tasks, ts.project_percent_complete' . ', ts.project_duration, u.user_username'); $q->addJoin('companies', 'com', 'p.project_company = com.company_id'); $q->addJoin('users', 'u', 'p.project_owner = u.user_id'); $q->addJoin('tasks_critical', 'tc', 'p.project_id = tc.task_project'); $q->addJoin('tasks_problems', 'tp', 'p.project_id = tp.task_project'); $q->addJoin('tasks_sum', 'ts', 'p.project_id = ts.task_project'); $q->addJoin('tasks_total', 'tt', 'p.project_id = tt.task_project'); $q->addJoin('tasks_summy', 'tsy', 'p.project_id = tsy.task_project'); if ($addProjectsWithAssignedTasks) { $q->addJoin('tasks_users', 'tu', 'p.project_id = tu.task_project'); } if (isset($project_status) && $currentTabId != 500) { $q->addWhere('p.project_status = ' . $project_status); } if (isset($department)) { $q->addJoin('project_departments', 'pd', 'pd.project_id = p.project_id'); if (!$addPwOiD) { $q->addWhere('pd.department_id in (' . implode(',', $dept_ids) . ')'); } else { // Show Projects where the Project Owner is in the given department $q->addWhere('p.project_owner IN (' . (!empty($owner_ids) ? implode(',', $owner_ids) : 0) . ')'); } } else { if ($company_id && !$addPwOiD) { $q->addWhere('p.project_company = ' . $company_id); } } if ($projectTypeId > -1) { $q->addWhere('p.project_type = ' . $projectTypeId); } if ($user_id && $addProjectsWithAssignedTasks) { $q->addWhere('(tu.user_id = ' . $user_id . ' OR p.project_owner = ' . $user_id . ')'); } else { if ($user_id) { $q->addWhere('p.project_owner = ' . $user_id); } } if ($owner > 0) { $q->addWhere('p.project_owner = ' . $owner); } $q->addGroup('p.project_id'); $q->addOrder($orderby . ' ' . $orderdir); $obj_project->setAllowedSQL($AppUI->user_id, $q, null, 'p'); $projects = $q->loadList(); // retrieve list of records // modified for speed // by Pablo Roca (pabloroca@mvps.org) // 16 August 2003 // get the list of permitted companies $obj_company = new CCompany(); $companies = $obj_company->getAllowedRecords($AppUI->user_id, 'company_id,company_name', 'company_name'); if (count($companies) == 0) { $companies = array(0); } // get the list of permitted companies $companies = arrayMerge(array('0' => $AppUI->_('All')), $companies); //get list of all departments, filtered by the list of permitted companies. $q->clear(); $q->addTable('companies', 'c'); $q->addQuery('c.company_id, c.company_name, dep.*'); $q->addJoin('departments', 'dep', 'c.company_id = dep.dept_company'); $q->addJoin('projects', 'p', 'p.project_company = c.company_id'); $q->addWhere('p.project_status NOT IN (1, 4, 5, 6, 7)'); $q->addOrder('c.company_name, dep.dept_parent, dep.dept_name'); $obj_company->setAllowedSQL($AppUI->user_id, $q); $active_companies = $q->loadList(); $q->clear(); $q->addTable('companies', 'c'); $q->addQuery('c.company_id, c.company_name, dep.*'); $q->addJoin('departments', 'dep', 'c.company_id = dep.dept_company'); $q->addJoin('projects', 'p', 'p.project_company = c.company_id'); $q->addOrder('c.company_name, dep.dept_parent, dep.dept_name'); $obj_company->setAllowedSQL($AppUI->user_id, $q); $all_companies = $q->loadList(); //display the select list $cBuffer = '<select name="department" onchange="javascript:document.pickCompany.submit()" class="text">'; $cBuffer .= '<option value="company_0" style="font-weight:bold;">' . $AppUI->_('All') . '</option>' . "\n"; $company = ''; $active_company_ids = array(); // Active companies first $cBuffer .= '<optgroup label="Active">'; foreach ($active_companies as $row) { if ($row['dept_parent'] == 0) { if ($company != $row['company_id']) { $cBuffer .= '<option value="' . $AppUI->___($company_prefix . $row['company_id']) . '" style="font-weight:bold;"' . ($company_id == $row['company_id'] ? 'selected="selected"' : '') . '>' . $AppUI->___($row['company_name']) . '</option>' . "\n"; $company = $row['company_id']; $active_company_ids[] = $company; } if ($row['dept_parent'] != null) { showchilddept($row); findchilddept($rows, $row['dept_id']); } } } $cBuffer .= '</optgroup>'; // Inactive companies $cBuffer .= '<optgroup label="Inactive">'; foreach ($all_companies as $row) { if ($row['dept_parent'] == 0 and !in_array($row['company_id'], $active_company_ids)) { if ($company != $row['company_id']) { $cBuffer .= '<option value="' . $AppUI->___($company_prefix . $row['company_id']) . '" style="font-weight:bold;"' . ($company_id == $row['company_id'] ? 'selected="selected"' : '') . '>' . $AppUI->___($row['company_name']) . '</option>' . "\n"; $company = $row['company_id']; } if ($row['dept_parent'] != null) { showchilddept($row); findchilddept($rows, $row['dept_id']); } } } $cBuffer .= '</optgroup>'; $cBuffer .= '</select>'; }
$folder = intval(dPgetParam($_GET, 'folder', 0)); // "Project" filters info require_once $AppUI->getModuleClass('projects'); // retrieve any state parameters if (isset($_REQUEST['project_id'])) { $AppUI->setState('FileIdxProject', $_REQUEST['project_id']); } $project_id = $AppUI->getState('FileIdxProject', 0); /* * get "Allowed" projects for filter list * ("All" is always allowed when basing permission on projects) */ $project = new CProject(); $extra = array('from' => 'files', 'where' => 'project_id = file_project'); $projects = $project->getAllowedRecords($AppUI->user_id, 'project_id,project_name', 'project_name', null, $extra); $projects = arrayMerge(array('0' => $AppUI->_('All', UI_OUTPUT_RAW)), $projects); // get SQL for allowed projects/tasks and folders $task = new CTask(); $allowedProjects = $project->getAllowedSQL($AppUI->user_id, 'file_project'); $allowedTasks = $task->getAllowedSQL($AppUI->user_id, 'file_task'); $cfObj = new CFileFolder(); $allowedFolders = $cfObj->getAllowedSQL($AppUI->user_id, 'file_folder'); //get permissions for folder tab $canAccess_folders = getPermission('file_folders', 'access'); // setup the title block $titleBlock = new CTitleBlock('Files', 'folder5.png', $m, $m . '.' . $a); $titleBlock->addCell($AppUI->_('Filter') . ':'); $titleBlock->addCell(arraySelect($projects, 'project_id', 'onchange="javascript:document.pickProject.submit()" size="1" class="text"', $project_id), '', '<form name="pickProject" action="?m=files" method="post">', '</form>'); /* * override the file module's $canEdit variable passed from the main index.php * in order to check on file folder permissions
//getting company names (to go with project name in drop-down) $q = new DBQuery(); $q->addTable('projects', 'p'); $q->addJoin('companies', 'co', 'co.company_id = p.project_company'); $q->addQuery('p.project_id, co.company_name'); $q->addWhere('p.project_id IN (0' . (count($projects_list) ? ',' . implode(',', array_keys($projects_list)) : '') . ')'); $proj_companies = $q->loadHashList(); $q->clear(); //folder drop-down: allowed Folders only $folders_list = getFolderSelectList(); $folders_list = arrayMerge(array('O' => array('O', '(' . $AppUI->_('Move to Folder') . ')', -1)), $folders_list); foreach ($projects_list as $prj_id => $prj_name) { $projects_list[$prj_id] = $proj_companies[$prj_id] . ': ' . $prj_name; } asort($projects_list); $projects_list = arrayMerge(array('O' => '(' . $AppUI->_('Move to Project') . ')', '0' => '(' . $AppUI->_('No Project Association') . ')'), $projects_list); ?> <tr> <td colspan="50" align="right"> <form name='frm_bulk' method='POST' action='?m=files&a=do_files_bulk_aed'> <input type="hidden" name="redirect" value="<?php echo $current_uri; ?> " /> <table id="tbl_bulk" name="tbl_bulk"> <tr> <td> <?php echo "\t\t\t\t\t\t" . arraySelect($projects_list, 'bulk_file_project', 'style="width:180px" class="text"', 'O'); ?> </td>
} } // check for requestor filter if ($HELPDESK_CONFIG['search_criteria_requestor']) { if (isset($_GET['requestor'])) { $AppUI->setState('HelpDeskRequestor', $_GET['requestor']); } $requestor = $AppUI->getState('HelpDeskRequestor') !== null ? $AppUI->getState('HelpDeskRequestor') : -1; if (isset($requestor) && strlen($requestor) > 0 && $requestor != '-1') { $tarr[] = "hi.item_requestor='{$requestor}'"; } // retrieve requestor list $sql = "SELECT distinct(item_requestor) as requestor, item_requestor\n\t\t FROM helpdesk_items\n\t\t WHERE " . getCompanyPerms("item_company_id", NULL, PERM_READ) . "\n\t\t ORDER BY item_requestor"; $requestor_list = db_loadHashList($sql); if (!$_REQUEST['project_id']) { $selectors[] = "<td align=\"right\"><label for=\"requestor\">" . $AppUI->_('Requestor') . ":</label></td><td>" . arraySelect(arrayMerge(array('-1' => $AppUI->_('All')), $requestor_list), 'requestor', 'size="1" id="requestor" class="text" onchange="changeList()"', $requestor) . "</td>"; } } $where = getItemPerms(); if (count($tarr)) { $where .= 'AND (' . implode("\n AND ", $tarr) . ') '; } $sql = "SELECT hi.*,\n CONCAT(co.contact_first_name,' ',co.contact_last_name) assigned_fullname,\n co.contact_email as assigned_email,\n p.project_id,\n p.project_name,\n p.project_color_identifier\n FROM helpdesk_items hi\n LEFT JOIN users u2 ON u2.user_id = hi.item_assigned_to\n LEFT JOIN contacts co ON u2.user_contact = co.contact_id\n LEFT JOIN projects p ON p.project_id = hi.item_project_id\n WHERE {$where}\n ORDER BY "; // Do custom order by if needed, default at the end if ($orderby == "project_name") { $sql .= "p.project_name"; } elseif ($orderby == "item_assigned_to") { $sql .= "assigned_fullname"; } elseif ($orderby == "item_updated") { $sql .= "hi.item_updated"; } else {
$contact_id = intval(dPgetParam($_GET, "contact_id", 0)); // check permissions for this record $canEdit = getPermission($m, 'edit', $project_id); $canAuthor = getPermission($m, 'add', $project_id); if (!($canEdit && $project_id || $canAuthor && !$project_id)) { $AppUI->redirect('m=public&a=access_denied'); } // get a list of permitted companies require_once $AppUI->getModuleClass('companies'); $row = new CCompany(); $companies = $row->getAllowedRecords($AppUI->user_id, 'company_id,company_name', 'company_name'); $companies = arrayMerge(array('0' => ''), $companies); // get internal companies // 6 is standard value for internal companies $companies_internal = $row->listCompaniesByType(array('6')); $companies_internal = arrayMerge(array('0' => ''), $companies_internal); // pull users $q = new DBQuery(); $q->addTable('users', 'u'); $q->addTable('contacts', 'con'); $q->addQuery('user_id'); $q->addQuery('CONCAT_WS(", ",contact_last_name,contact_first_name)'); $q->addOrder('contact_last_name'); $q->addWhere('u.user_contact = con.contact_id'); $users = $q->loadHashList(); // load the record data $row = new CProject(); if (!$row->load($project_id, false) && $project_id > 0) { $AppUI->setMsg('Project'); $AppUI->setMsg("invalidID", UI_MSG_ERROR, true); $AppUI->redirect();
w2PsetMicroTime(); // retrieve any state parameters if (isset($_REQUEST['company_id'])) { $AppUI->setState('CalIdxCompany', intval(w2PgetParam($_REQUEST, 'company_id', 0))); } $company_id = $AppUI->getState('CalIdxCompany', 0); // Using simplified set/get semantics. Doesn't need as much code in the module. $event_filter = $AppUI->checkPrefState('CalIdxFilter', w2PgetParam($_REQUEST, 'event_filter', 'my'), 'EVENTFILTER', 'my'); // get the passed timestamp (today if none) $ctoday = new w2p_Utilities_Date(); $today = $ctoday->format(FMT_TIMESTAMP_DATE); $date = w2PgetParam($_GET, 'date', $today); // get the list of visible companies $company = new CCompany(); $companies = $company->getAllowedRecords($AppUI->user_id, 'company_id,company_name', 'company_name'); $companies = arrayMerge(array('0' => $AppUI->_('All')), $companies); // setup the title block $titleBlock = new CTitleBlock('Monthly Calendar', 'myevo-appointments.png', $m, $m . '.' . $a); $titleBlock->addCrumb('?m=calendar&a=year_view&date=' . $date, 'year view'); $titleBlock->addCrumb('?m=calendar&date=' . $date, 'month view'); $titleBlock->addCrumb('?m=calendar&a=week_view&date=' . $date, 'week view'); $titleBlock->addCrumb('?m=calendar&a=day_view&date=' . $date, 'day view'); $titleBlock->addCell($AppUI->_('Company') . ':'); $titleBlock->addCell(arraySelect($companies, 'company_id', 'onChange="document.pickCompany.submit()" class="text"', $company_id), '', '<form action="' . $_SERVER['REQUEST_URI'] . '" method="post" name="pickCompany" accept-charset="utf-8">', '</form>'); $titleBlock->addCell($AppUI->_('Event Filter') . ':'); $titleBlock->addCell(arraySelect($event_filter_list, 'event_filter', 'onChange="document.pickFilter.submit()" class="text"', $event_filter, true), '', '<form action="' . $_SERVER['REQUEST_URI'] . '" method="post" name="pickFilter" accept-charset="utf-8">', '</form>'); $titleBlock->show(); ?> <script language="javascript" type="text/javascript"> function clickDay( uts, fdate ) {
function getFolderSelectList() { global $AppUI; $folders = array(0 => ''); $q = new DBQuery(); $q->addTable('file_folders'); $q->addQuery('file_folder_id, file_folder_name, file_folder_parent'); $q->addOrder('file_folder_name'); $folders = arrayMerge(array('0' => array(0, $AppUI->_('Root'), -1)), $q->loadHashList('file_folder_id')); return $folders; }
include $AppUI->getLibraryClass('jpgraph/src/jpgraph'); include $AppUI->getLibraryClass('jpgraph/src/jpgraph_gantt'); // get the prefered date format $df = $AppUI->getPref('SHDATEFORMAT'); $user_id = intval(dPgetParam($_REQUEST, 'user_id', $AppUI->user_id)); $proFilter = dPgetParam($_REQUEST, 'proFilter', '-1'); $company_id = intval(dPgetParam($_REQUEST, 'company_id', 0)); $department = intval(dPgetParam($_REQUEST, 'department', 0)); $showLabels = dPgetParam($_REQUEST, 'showLabels', 0); $showInactive = dPgetParam($_REQUEST, 'showInactive', 0); $sortTasksByName = dPgetParam($_REQUEST, 'sortTasksByName', 0); $addPwOiD = dPgetParam($_REQUEST, 'addPwOiD', 0); $m_orig = dPgetParam($_REQUEST, 'm_orig', $m); $a_orig = dPgetParam($_REQUEST, 'a_orig', $a); $projectStatus = dPgetSysVal('ProjectStatus'); $projectStatus = arrayMerge(array('-2' => $AppUI->_('All w/o in progress'), '-3' => $AppUI->_($AppUI->user_id == $user_id ? 'My projects' : "User's projects")), $projectStatus); $pjobj =& new CProject(); $working_hours = $dPconfig['daily_working_hours']; $q = new DBQuery(); /* * Load department info for the case where one * wants to see the ProjectsWithOwnerInDeparment (PwOiD) * instead of the projects related to the given department. */ $owner_ids = array(); if ($addPwOiD && $department > 0) { $q->addTable('users'); $q->addQuery('user_id'); $q->addJoin('contacts', 'c', 'c.contact_id = user_contact'); $q->addWhere('c.contact_department = ' . $department); $owner_ids = $q->loadColumn();
<?php /* TASKS $Id: tasksperuser.php,v 1.5.6.2 2007/03/06 00:34:45 merlinyoda Exp $ */ if (!defined('DP_BASE_DIR')) { die('You should not access this file directly.'); } $AppUI->savePlace(); if (isset($_POST['company_id'])) { $AppUI->setState('CompanyIdxFilter', $_POST['company_id']); } $company_id = $AppUI->getState('CompanyIdxFilter') ? $AppUI->getState('CompanyIdxFilter') : 'all'; $log_all_projects = true; // show tasks for all projects $df = $AppUI->getPref('SHDATEFORMAT'); // get the prefered date format // get CCompany() to filter tasks by company require_once $AppUI->getModuleClass('companies'); $comp = new CCompany(); $companies = $comp->getAllowedRecords($AppUI->user_id, 'company_id,company_name', 'company_name'); $compFilter = arrayMerge(array('all' => $AppUI->_('All Companies')), $companies); // setup the title block $titleBlock = new CTitleBlock('Tasks per User', 'applet-48.png', $m, "{$m}.{$a}"); $titleBlock->addCell($AppUI->_('Company') . ':'); $titleBlock->addCell(arraySelect($compFilter, 'company_id', 'size="1" class="text" onChange="document.companyFilter.submit();"', $company_id, false), '', '<form action="?m=tasks&a=tasksperuser" method="post" name="companyFilter">', '</form>'); $titleBlock->addCrumb("?m=tasks", "tasks list"); $titleBlock->addCrumb("?m=tasks&a=todo&user_id={$user_id}", "my todo"); $titleBlock->show(); // include the re-usable sub view $min_view = false; include DP_BASE_DIR . '/modules/tasks/tasksperuser_sub.php';