lvd = new ListViewData(); $this->searchColumns = array(); } function shouldProcess($moduleDir) { if (!empty($GLOBALS['sugar_config']['save_query']) && $GLOBALS['sugar_config']['save_query'] == 'populate_only') { if (empty($GLOBALS['displayListView']) && (!empty($_REQUEST['clear_query']) || $_REQUEST['module'] == $moduleDir && ((empty($_REQUEST['query']) || $_REQUEST['query'] == 'MSI' ) && (empty($_SESSION['last_search_mod']) || $_SESSION['last_search_mod'] != $moduleDir ) ))) { $_SESSION['last_search_mod'] = $_REQUEST['module']; $this->should_process = false; return false; } } $this->should_process = true; return true; } /** * Setup the class * @param seed SugarBean Seed SugarBean to use * @param file File Template file to use * @param string $where * @param offset:0 int offset to start at * @param int:-1 $limit * @param string[]:array() $filter_fields * @param array:array() $params * Potential $params are $params['distinct'] = use distinct key word $params['include_custom_fields'] = (on by default) $params['massupdate'] = true by default; $params['handleMassupdate'] = true by default, have massupdate.php handle massupdates? * @param string:'id' $id_field */ function setup($seed, $file, $where, $params = array(), $offset = 0, $limit = -1, $filter_fields = array(), $id_field = 'id') { $this->should_process = true; if (isset($seed->module_dir) && !$this->shouldProcess($seed->module_dir)) { return false; } if (isset($params['export'])) { $this->export = $params['export']; } if (!empty($params['multiSelectPopup'])) { $this->multi_select_popup = $params['multiSelectPopup']; } if (!empty($params['massupdate']) && $params['massupdate'] != false) { $this->show_mass_update_form = true; $this->mass = new MassUpdate(); $this->mass->setSugarBean($seed); if (!empty($params['handleMassupdate']) || !isset($params['handleMassupdate'])) { $this->mass->handleMassUpdate(); } } $this->seed = $seed; // create filter fields based off of display columns if (empty($filter_fields) || $this->mergeDisplayColumns) { foreach ($this->displayColumns as $columnName => $def) { $filter_fields[strtolower($columnName)] = true; if (isset($this->seed->field_defs[strtolower($columnName)]['type']) && strtolower($this->seed->field_defs[strtolower($columnName)]['type']) == 'currency' && isset($this->seed->field_defs['currency_id'])) { $filter_fields['currency_id'] = true; } if (!empty($def['related_fields'])) { foreach ($def['related_fields'] as $field) { //id column is added by query construction function. This addition creates duplicates //and causes issues in oracle. #10165 if ($field != 'id') { $filter_fields[$field] = true; } } } if (!empty($this->seed->field_defs[strtolower($columnName)]['db_concat_fields'])) { foreach ($this->seed->field_defs[strtolower($columnName)]['db_concat_fields'] as $index => $field) { if (!isset($filter_fields[strtolower($field)]) || !$filter_fields[strtolower($field)]) { $filter_fields[strtolower($field)] = true; } } } } foreach ($this->searchColumns as $columnName => $def) { $filter_fields[strtolower($columnName)] = true; } } $data = $this->lvd->getListViewData($seed, $where, $offset, $limit, $filter_fields, $params, $id_field); // add mz 2015-03-18 // add summary row to list view $sum = array (); $db = $GLOBALS ['db']; $showSumRow = false; foreach ( $this->displayColumns as $name => $val ) { if ($this->displayColumns [$name] ['sumType'] == 'sum') { $sum_q = "SELECT SUM(" . strtolower ( $name ) . ") as sum FROM " . $this->seed->table_name; $kursy = $db->fetchByAssoc ( $db->query ( "select * from currency_nbp_archive order by date desc limit 1" ) ); //print_r($kursy); if ($where && $where != " ") $sum_q .= " WHERE " . $where; $sum [$name] = ($db->fetchByAssoc ( $db->query ( $sum_q ) )['sum']) ; $showSumRow = true; } else if ($this->displayColumns [$name] ['sumType'] == 'avg') { $sum_q = "SELECT AVG(" . strtolower ( $name ) . ") as avg FROM " . $this->seed->table_name; if ($where && $where != " ") $sum_q .= " WHERE " . $where; $sum [$name] = format_number($db->fetchByAssoc ( $db->query ( $sum_q ) )['avg']); $showSumRow = true; } else if ($this->displayColumns [$name] ['sumType'] == 'func') { $func = $this->displayColumns [$name] ['sumFunc']; if (method_exists($seed->object_name,$func) == false) echo 'ListView Summary Error: Method '.$seed->object_name.':'.$func.' not exist.
'; else $sum[$name] = format_number(call_user_func(array($seed->object_name, $func), $where)); } } if ($showSumRow == true) { $sum['showSumRow'] = true; $data ['data'] [] = $sum; } foreach ($this->displayColumns as $columnName => $def) { $seedName = strtolower($columnName); if (!empty($this->lvd->seed->field_defs[$seedName])) { $seedDef = $this->lvd->seed->field_defs[$seedName]; } if (empty($this->displayColumns[$columnName]['type'])) { if (!empty($seedDef['type'])) { $this->displayColumns[$columnName]['type'] = (!empty($seedDef['custom_type'])) ? $seedDef['custom_type'] : $seedDef['type']; } else { $this->displayColumns[$columnName]['type'] = ''; } }//fi empty(...) if (!empty($seedDef['options'])) { $this->displayColumns[$columnName]['options'] = $seedDef['options']; } //C.L. Fix for 11177 if ($this->displayColumns[$columnName]['type'] == 'html') { $cField = $this->seed->custom_fields; if (isset($cField) && isset($cField->bean->$seedName)) { $seedName2 = strtoupper($columnName); $htmlDisplay = html_entity_decode($cField->bean->$seedName); $count = 0; while ($count < count($data['data'])) { $data['data'][$count][$seedName2] = &$htmlDisplay; $count++; } } }//fi == 'html' if (!empty($seedDef['sort_on'])) { $this->displayColumns[$columnName]['orderBy'] = $seedDef['sort_on']; } if (isset($seedDef)) { // Merge the two arrays together, making sure the seedDef doesn't override anything explicitly set in the displayColumns array. $this->displayColumns[$columnName] = $this->displayColumns[$columnName] + $seedDef; } //C.L. Bug 38388 - ensure that ['id'] is set for related fields if (!isset($this->displayColumns[$columnName]['id']) && isset($this->displayColumns[$columnName]['id_name'])) { $this->displayColumns[$columnName]['id'] = strtoupper($this->displayColumns[$columnName]['id_name']); } } $this->process($file, $data, $seed->object_name); return true; } /** * Any additional processing * @param file File template file to use * @param data array row data * @param html_var string html string to be passed back and forth */ function process($file, $data, $htmlVar) { $this->rowCount = count($data['data']); $this->moduleString = $data['pageData']['bean']['moduleDir'] . '2_' . strtoupper($htmlVar) . '_offset'; } /** * Display the listview * @return string ListView contents */ function display() { if (!$this->should_process) return ''; $str = ''; if ($this->multiSelect == true && $this->show_mass_update_form) $str = $this->mass->getDisplayMassUpdateForm(true, $this->multi_select_popup) . $this->mass->getMassUpdateFormHeader($this->multi_select_popup); return $str; } /** * Display the select link * @return string select link html * @param echo Bool set true if you want it echo'd, set false to have contents returned */ function buildSelectLink($id = 'select_link', $total = 0, $pageTotal = 0) { global $app_strings; if ($pageTotal < 0) $pageTotal = $total; $script = ""; $script .= "" . ""; return $script; } /** * Display the actions link * * @param string $id link id attribute, defaults to 'actions_link' * @return string HTML source */ protected function buildActionsLink($id = 'actions_link') { global $app_strings; $closeText = ""; $moreDetailImage = SugarThemeRegistry::current()->getImageURL('MoreDetail.png'); $menuItems = ''; /* // delete if ( ACLController::checkAccess($this->seed->module_dir,'delete',true) && $this->delete ) $menuItems .= $this->buildDeleteLink(); // compose email if ( isset($_REQUEST['module']) && $_REQUEST['module'] != 'Users' && $_REQUEST['module'] != 'Employees' && ( SugarModule::get($_REQUEST['module'])->moduleImplements('Company') || SugarModule::get($_REQUEST['module'])->moduleImplements('Person') ) ) $menuItems .= $this->buildComposeEmailLink($this->data['pageData']['offsets']['total']); // mass update $mass = new MassUpdate(); $mass->setSugarBean($this->seed); if ( ACLController::checkAccess($this->seed->module_dir,'edit',true) && $this->showMassupdateFields && $mass->doMassUpdateFieldsExistForFocus() ) $menuItems .= $this->buildMassUpdateLink(); // merge if ( $this->mailMerge ) $menuItems .= $this->buildMergeLink(); if ( $this->mergeduplicates ) $menuItems .= $this->buildMergeDuplicatesLink(); // add to target list if ( isset($_REQUEST['module']) && in_array($_REQUEST['module'],array('Contacts','Prospects','Leads','Accounts'))) $menuItems .= $this->buildTargetList(); // favorites ( for reports ) if ( isset($_REQUEST['module']) && ($_REQUEST['module'] == 'Reports') && (isset($_REQUEST['favorite']) && $_REQUEST['favorite'] == 1) ) $menuItems .= $this->buildRemoveFavoritesLink(); elseif ( isset($_REQUEST['module']) && ($_REQUEST['module'] == 'Reports') ) $menuItems .= $this->buildFavoritesLink(); // export if ( ACLController::checkAccess($this->seed->module_dir,'export',true) && $this->export ) $menuItems .= $this->buildExportLink(); */ // mh global $current_user; if ($_REQUEST['module'] == 'EcmServices') { // Close $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_SERVICE_CLOSE'] . ''; // FK $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_SERVICE_INVOICE'] . ''; // RW $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_SERVICE_RW'] . ''; } if ($_REQUEST['module'] == 'Contacts') $this->actionsMenuExtraItems[] = 'Usuń zaznaczone'; if ($_REQUEST['module'] == 'Accounts') $this->actionsMenuExtraItems[] = 'Usuń zaznaczone'; if ($_REQUEST['module'] == 'ContactLeads') $this->actionsMenuExtraItems[] = 'Usuń zaznaczone'; if ($_REQUEST['module'] == 'Leads') $this->actionsMenuExtraItems[] = 'Usuń zaznaczone'; //add component in InsideOrders if ($_REQUEST['module'] == 'EcmInsideOrders') $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_IMPORT_COMPONENTS'] . ''; //create PZ from selected PurchaseOrders in action menu if ($_REQUEST['module'] == 'EcmPurchaseOrders') $this->actionsMenuExtraItems[] = 'Wystaw fakturę'; //create Invoice from selected WZ Documents in action menu if ($_REQUEST['module'] == 'EcmStockDocOuts'){ $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_CREATE_INVOICE'] . ''; $this->actionsMenuExtraItems[] = ' Wystaw fakturę zbiorczą '; } if ($_REQUEST['module'] == 'Documents') if($current_user->is_admin==1){ $this->actionsMenuExtraItems[] = 'Zmień status na: do zapłaty'; $this->actionsMenuExtraItems[] = 'Zmień status na: przekazano do autoryzacji'; $this->actionsMenuExtraItems[] = 'Zmień status na: zapłacono'; $this->actionsMenuExtraItems[] = 'Zmień status na: kompensata'; $this->actionsMenuExtraItems[] = 'Zmień status na: Inne'; } //realizationList if ($_REQUEST['module'] == 'EcmSales'){ if($current_user->fetched_row['delete_zs']==1){ $this->actionsMenuExtraItems[] = 'Usuń zaznaczone'; } $this->actionsMenuExtraItems[] = 'Zmień status'; $this->actionsMenuExtraItems[] = ' Generuj zbiorczy PDF '; } if ($_REQUEST['module'] == 'EcmStockDocIns') $this->actionsMenuExtraItems[] = 'Wygeneruj zbiorczy pdf'; //sale order from quote if ($_REQUEST['module'] == 'EcmQuotes') $this->actionsMenuExtraItems[] = ' Wystaw fakturę '; if ($_REQUEST['module'] == 'Accounts') $this->actionsMenuExtraItems[] = ' Pokaż na mapie '; //end mz if ($_REQUEST['module'] == 'EcmProducts') if($current_user->is_admin==1){ $this->actionsMenuExtraItems[] = 'Utwórz grupę produktową'; } if ($_REQUEST['module'] == 'EcmStockDocOuts') $this->actionsMenuExtraItems[] = 'Wygeneruj zbiorczy pdf'; if ($_REQUEST['module'] == 'EcmStockDocCorrects') $this->actionsMenuExtraItems[] = 'Wygeneruj zbiorczy pdf'; foreach ($this->actionsMenuExtraItems as $item) $menuItems .= $item; $menuItems = str_replace('"', '\"', $menuItems); if (empty($menuItems)) return ''; return << {$app_strings['LBL_LINK_ACTIONS']}  EOHTML; } /** * Builds the export link * * @return string HTML */ protected function buildExportLink() { global $app_strings; return "{$app_strings['LBL_EXPORT']}"; } /** * Builds the massupdate link * * @return string HTML */ protected function buildMassUpdateLink() { global $app_strings; return "{$app_strings['LBL_MASS_UPDATE']}"; } /** * Builds the compose email link * * @return string HTML */ protected function buildComposeEmailLink( $totalCount ) { global $app_strings, $dictionary; if (!is_array($this->seed->field_defs)) { return ''; } $foundEmailField = false; // Search for fields that look like an email address foreach ($this->seed->field_defs as $field) { if (isset($field['type']) && $field['type'] == 'link' && isset($field['relationship']) && isset($dictionary[$this->seed->object_name]['relationships'][$field['relationship']]) && $dictionary[$this->seed->object_name]['relationships'][$field['relationship']]['rhs_module'] == 'EmailAddresses') { $foundEmailField = true; break; } } if (!$foundEmailField) { return ''; } $userPref = $GLOBALS['current_user']->getPreference('email_link_type'); $defaultPref = $GLOBALS['sugar_config']['email_default_client']; if ($userPref != '') $client = $userPref; else $client = $defaultPref; if ($client == 'sugar') $script = "' . $app_strings['LBL_EMAIL_COMPOSE'] . ''; else $script = "' . $app_strings['LBL_EMAIL_COMPOSE'] . ''; return $script; } // fn /** * Builds the favorites link ( for reports ) * * @return string HTML */ protected function buildFavoritesLink() { global $app_strings; return "{$app_strings['LBL_MARK_AS_FAVORITES']}"; } /** * Builds the remote favorites link ( for reports ) * * @return string HTML */ protected function buildRemoveFavoritesLink() { global $app_strings; return "{$app_strings['LBL_REMOVE_FROM_FAVORITES']}"; } /** * Builds the delete link * * @return string HTML */ protected function buildDeleteLink() { global $app_strings; return "{$app_strings['LBL_DELETE_BUTTON_LABEL']}"; } /** * Display the selected object span object * * @return string select object span */ function buildSelectedObjectsSpan($echo = true, $total = 0) { global $app_strings; $selectedObjectSpan = "{$app_strings['LBL_LISTVIEW_SELECTED_OBJECTS']}"; return $selectedObjectSpan; } /** * Builds the mail merge link * The link can be disabled by setting module level duplicate_merge property to false * in the moudle's vardef file. * * @return string HTML */ protected function buildMergeDuplicatesLink() { global $app_strings, $dictionary; $return_string = ''; $return_string.= isset($_REQUEST['module']) ? "&return_module={$_REQUEST['module']}" : ""; $return_string.= isset($_REQUEST['action']) ? "&return_action={$_REQUEST['action']}" : ""; $return_string.= isset($_REQUEST['record']) ? "&return_id={$_REQUEST['record']}" : ""; //need delete and edit access. if (!(ACLController::checkAccess($_REQUEST['module'], 'edit', true)) or !(ACLController::checkAccess($_REQUEST['module'], 'delete', true))) { return ''; } if (isset($dictionary[$this->seed->object_name]['duplicate_merge']) && $dictionary[$this->seed->object_name]['duplicate_merge'] == true) { return "seed->module_dir}\",\"$return_string\");} else {alert(\"{$app_strings['LBL_LISTVIEW_TWO_REQUIRED']}\");return false;}'>" . $app_strings['LBL_MERGE_DUPLICATES'] . ''; } return ''; } /** * Builds the mail merge link * * @return string HTML */ protected function buildMergeLink() { require_once('modules/MailMerge/modules_array.php'); global $current_user, $app_strings; $admin = new Administration(); $admin->retrieveSettings('system'); $user_merge = $current_user->getPreference('mailmerge_on'); $module_dir = (!empty($this->seed->module_dir) ? $this->seed->module_dir : ''); $str = ''; if ($user_merge == 'on' && isset($admin->settings['system_mailmerge_on']) && $admin->settings['system_mailmerge_on'] && !empty($modules_array[$module_dir])) { $str = "' . $app_strings['LBL_MAILMERGE'] . ''; } return $str; } /** * Builds the add to target list link * * @return string HTML */ protected function buildTargetList() { global $app_strings; $js = <<{$app_strings['LBL_ADD_TO_PROSPECT_LIST_BUTTON_LABEL']}"; } /** * Display the bottom of the ListView (ie MassUpdate * @return string contents */ function displayEnd() { $str = ''; if ($this->show_mass_update_form) { $str .= $this->mass->getMassUpdateForm(true); $str .= $this->mass->endMassUpdateForm(); } return $str; } /** * Display the multi select data box etc. * @return string contents */ function getMultiSelectData() { $str = "\n"; $massUpdateRun = isset($_REQUEST['massupdate']) && $_REQUEST['massupdate'] == 'true'; $uids = empty($_REQUEST['uid']) || $massUpdateRun ? '' : $_REQUEST['uid']; $select_entire_list = isset($_REQUEST['select_entire_list']) && !$massUpdateRun ? $_REQUEST['select_entire_list'] : 0; $str .= "\n" . "\n" . "\n"; return $str; } }