function get($key, $default = null) { if (!isset($this->_cached_values[$key])) { if (!class_exists('SugarArray', true)) { require 'include/utils/array_utils.php'; } $this->_cached_values[$key] = isset($GLOBALS['sugar_config']) ? SugarArray::staticGet($GLOBALS['sugar_config'], $key, $default) : $default; } return $this->_cached_values[$key]; }
private function getFieldValue($bean, $result, $source_field) { $def = $this->getModuleFieldDef($bean->module_dir, $source_field); $out_field = $source_field; if (!empty($def['output'])) { $out_field = $def['output']; } $value = SugarArray::staticGet($result, $out_field); if (is_array($def)) { if (!empty($def['function'])) { $function = $def['function']; if (is_array($function) && isset($function['name'])) { $function = $def['function']['name']; if (!empty($def['function']['include'])) { require_once $def['function']['include']; } } $value = $function($bean, $out_field, $value); } } return $value; }
/** * createQuickSearchCode * This function creates the $sqs_objects array that will be used by the quicksearch Javascript * code. The $sqs_objects array is wrapped in a $json->encode call. * * @param array $def The vardefs.php definitions * @param array $defs2 The Meta-Data file definitions * @param string $view * @param strign $module * @return string */ public function createQuickSearchCode($defs, $defs2, $view = '', $module = '') { $sqs_objects = array(); require_once 'include/QuickSearchDefaults.php'; if (isset($this) && $this instanceof TemplateHandler) { $qsd = QuickSearchDefaults::getQuickSearchDefaults($this->getQSDLookup()); } else { $qsd = QuickSearchDefaults::getQuickSearchDefaults(array()); } $qsd->setFormName($view); if (preg_match('/^SearchForm_.+/', $view)) { if (strpos($view, 'popup_query_form')) { $qsd->setFormName('popup_query_form'); $parsedView = 'advanced'; } else { $qsd->setFormName('search_form'); $parsedView = preg_replace("/^SearchForm_/", "", $view); } //Loop through the Meta-Data fields to see which ones need quick search support foreach ($defs as $f) { $field = $f; $name = $qsd->form_name . '_' . $field['name']; if ($field['type'] == 'relate' && isset($field['module']) && preg_match('/_name$|_c$/si', $name)) { if (preg_match('/^(Campaigns|Teams|Users|Contacts|Accounts)$/si', $field['module'], $matches)) { if ($matches[0] == 'Campaigns') { $sqs_objects[$name . '_' . $parsedView] = $qsd->loadQSObject('Campaigns', 'Campaign', $field['name'], $field['id_name'], $field['id_name']); } else { if ($matches[0] == 'Users') { if (!empty($f['name']) && !empty($f['id_name'])) { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSUser($f['name'], $f['id_name']); } else { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSUser(); } } else { if ($matches[0] == 'Campaigns') { $sqs_objects[$name . '_' . $parsedView] = $qsd->loadQSObject('Campaigns', 'Campaign', $field['name'], $field['id_name'], $field['id_name']); } else { if ($matches[0] == 'Accounts') { $nameKey = $name; $idKey = isset($field['id_name']) ? $field['id_name'] : 'account_id'; //There are billingKey, shippingKey and additionalFields entries you can define in editviewdefs.php //entry to allow quick search to autocomplete fields with a suffix value of the //billing/shippingKey value (i.e. 'billingKey' => 'primary' in Contacts will populate //primary_XXX fields with the Account's billing address values). //addtionalFields are key/value pair of fields to fill from Accounts(key) to Contacts(value) $billingKey = isset($f['displayParams']['billingKey']) ? $f['displayParams']['billingKey'] : null; $shippingKey = isset($f['displayParams']['shippingKey']) ? $f['displayParams']['shippingKey'] : null; $additionalFields = isset($f['displayParams']['additionalFields']) ? $f['displayParams']['additionalFields'] : null; $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSAccount($nameKey, $idKey, $billingKey, $shippingKey, $additionalFields); } else { if ($matches[0] == 'Contacts') { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSContact($field['name'], $field['id_name']); } } } } } } else { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSParent($field['module']); if (!isset($field['field_list']) && !isset($field['populate_list'])) { $sqs_objects[$name . '_' . $parsedView]['populate_list'] = array($field['name'], $field['id_name']); $sqs_objects[$name . '_' . $parsedView]['field_list'] = array('name', 'id'); } else { $sqs_objects[$name . '_' . $parsedView]['populate_list'] = $field['field_list']; $sqs_objects[$name . '_' . $parsedView]['field_list'] = $field['populate_list']; } } } else { if ($field['type'] == 'parent') { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSParent(); } } //if-else } //foreach foreach ($sqs_objects as $name => $field) { foreach ($field['populate_list'] as $key => $fieldname) { $sqs_objects[$name]['populate_list'][$key] = $sqs_objects[$name]['populate_list'][$key] . '_' . $parsedView; } } } else { //Loop through the Meta-Data fields to see which ones need quick search support foreach ($defs2 as $f) { if (!isset($defs[$f['name']])) { continue; } $field = $defs[$f['name']]; if ($view == "ConvertLead") { $field['name'] = $module . $field['name']; if (isset($field['module']) && isset($field['id_name']) && substr($field['id_name'], -4) == "_ida") { $lc_module = strtolower($field['module']); $ida_suffix = "_" . $lc_module . $lc_module . "_ida"; if (preg_match('/' . $ida_suffix . '$/', $field['id_name']) > 0) { $field['id_name'] = $module . $field['id_name']; } else { $field['id_name'] = $field['name'] . "_" . $field['id_name']; } } else { if (!empty($field['id_name'])) { $field['id_name'] = $field['name'] . "_" . $field['id_name']; } } } $name = $qsd->form_name . '_' . $field['name']; if ($field['type'] == 'relate' && isset($field['module']) && (preg_match('/_name$|_c$/si', $name) || !empty($field['quicksearch']))) { if (!preg_match('/_c$/si', $name) && (!isset($field['id_name']) || !preg_match('/_c$/si', $field['id_name'])) && preg_match('/^(Campaigns|Teams|Users|Contacts|Accounts)$/si', $field['module'], $matches)) { if ($matches[0] == 'Campaigns') { $sqs_objects[$name] = $qsd->loadQSObject('Campaigns', 'Campaign', $field['name'], $field['id_name'], $field['id_name']); } else { if ($matches[0] == 'Users') { if ($field['name'] == 'reports_to_name') { $sqs_objects[$name] = $qsd->getQSUser('reports_to_name', 'reports_to_id'); // Bug #52994 : QuickSearch for a 1-M User relationship changes assigned to user } elseif ($field['name'] == 'assigned_user_name') { $sqs_objects[$name] = $qsd->getQSUser('assigned_user_name', 'assigned_user_id'); } else { $sqs_objects[$name] = $qsd->getQSUser($field['name'], $field['id_name']); } } else { if ($matches[0] == 'Campaigns') { $sqs_objects[$name] = $qsd->loadQSObject('Campaigns', 'Campaign', $field['name'], $field['id_name'], $field['id_name']); } else { if ($matches[0] == 'Accounts') { $nameKey = $name; $idKey = isset($field['id_name']) ? $field['id_name'] : 'account_id'; //There are billingKey, shippingKey and additionalFields entries you can define in editviewdefs.php //entry to allow quick search to autocomplete fields with a suffix value of the //billing/shippingKey value (i.e. 'billingKey' => 'primary' in Contacts will populate //primary_XXX fields with the Account's billing address values). //addtionalFields are key/value pair of fields to fill from Accounts(key) to Contacts(value) $billingKey = SugarArray::staticGet($f, 'displayParams.billingKey'); $shippingKey = SugarArray::staticGet($f, 'displayParams.shippingKey'); $additionalFields = SugarArray::staticGet($f, 'displayParams.additionalFields'); $sqs_objects[$name] = $qsd->getQSAccount($nameKey, $idKey, $billingKey, $shippingKey, $additionalFields); } else { if ($matches[0] == 'Contacts') { $sqs_objects[$name] = $qsd->getQSContact($field['name'], $field['id_name']); if (preg_match('/_c$/si', $name) || !empty($field['quicksearch'])) { $sqs_objects[$name]['field_list'] = array('salutation', 'first_name', 'last_name', 'id'); } } } } } } } else { $sqs_objects[$name] = $qsd->getQSParent($field['module']); if (!isset($field['field_list']) && !isset($field['populate_list'])) { $sqs_objects[$name]['populate_list'] = array($field['name'], $field['id_name']); // now handle quicksearches where the column to match is not 'name' but rather specified in 'rname' if (!isset($field['rname'])) { $sqs_objects[$name]['field_list'] = array('name', 'id'); } else { $sqs_objects[$name]['field_list'] = array($field['rname'], 'id'); $sqs_objects[$name]['order'] = $field['rname']; $sqs_objects[$name]['conditions'] = array(array('name' => $field['rname'], 'op' => 'like_custom', 'end' => '%', 'value' => '')); } } else { $sqs_objects[$name]['populate_list'] = $field['field_list']; $sqs_objects[$name]['field_list'] = $field['populate_list']; } } } else { if ($field['type'] == 'parent') { $sqs_objects[$name] = $qsd->getQSParent(); } } //if-else // Bug 53949 - Captivea (sve) - Partial fix : Append metadata fields that are not already included in $sqs_objects array // (for example with hardcoded modules before, metadata arrays are not taken into account in 6.4.x 6.5.x) // As QuickSearchDefault methods are called at other places, this will not fix the SQS problem for everywhere, but it fixes it on Editview //merge populate_list && field_list with vardef if (!empty($field['field_list']) && !empty($field['populate_list'])) { for ($j = 0; $j < count($field['field_list']); $j++) { //search for the same couple (field_list_item,populate_field_item) $field_list_item = $field['field_list'][$j]; $field_list_item_alternate = $qsd->form_name . '_' . $field['field_list'][$j]; $populate_list_item = $field['populate_list'][$j]; $found = false; for ($k = 0; $k < count($sqs_objects[$name]['field_list']); $k++) { if (($field_list_item == $sqs_objects[$name]['populate_list'][$k] || $field_list_item_alternate == $sqs_objects[$name]['populate_list'][$k]) && $populate_list_item == $sqs_objects[$name]['field_list'][$k]) { $found = true; break; } } if (!$found) { $sqs_objects[$name]['field_list'][] = $field['populate_list'][$j]; // as in lines 462 and 463 $sqs_objects[$name]['populate_list'][] = $field['field_list'][$j]; } } } } //foreach } //Implement QuickSearch for the field if (!empty($sqs_objects) && count($sqs_objects) > 0) { $quicksearch_js = '<script language="javascript">'; $quicksearch_js .= 'if(typeof sqs_objects == \'undefined\'){var sqs_objects = new Array;}'; $json = getJSONobj(); foreach ($sqs_objects as $sqsfield => $sqsfieldArray) { $quicksearch_js .= "sqs_objects['{$sqsfield}']={$json->encode($sqsfieldArray)};"; } return $quicksearch_js . '</script>'; } return ''; }
public function testStaticMethodCanReturnDefaultOnUnknownValue() { $random = rand(100, 200); $this->assertEquals(SugarArray::staticGet(array(123, 321), 'unknown', $random), $random); }
/** * createQuickSearchCode * This function creates the $sqs_objects array that will be used by the quicksearch Javascript * code. The $sqs_objects array is wrapped in a $json->encode call. * * @param array $def The vardefs.php definitions * @param array $defs2 The Meta-Data file definitions * @param string $view * @param strign $module * @return string */ public function createQuickSearchCode($defs, $defs2, $view = '', $module = '') { $sqs_objects = array(); require_once 'include/QuickSearchDefaults.php'; if (isset($this) && $this instanceof TemplateHandler) { $qsd = QuickSearchDefaults::getQuickSearchDefaults($this->getQSDLookup()); } else { $qsd = QuickSearchDefaults::getQuickSearchDefaults(array()); } $qsd->setFormName($view); if (preg_match('/^SearchForm_.+/', $view)) { if (strpos($view, 'popup_query_form')) { $qsd->setFormName('popup_query_form'); $parsedView = 'advanced'; } else { $qsd->setFormName('search_form'); $parsedView = preg_replace("/^SearchForm_/", "", $view); } //Loop through the Meta-Data fields to see which ones need quick search support foreach ($defs as $f) { $field = $f; $name = $qsd->form_name . '_' . $field['name']; if ($field['type'] == 'relate' && isset($field['module']) && preg_match('/_name$|_c$/si', $name)) { if (preg_match('/^(Campaigns|Teams|Users|Contacts|Accounts)$/si', $field['module'], $matches)) { if ($matches[0] == 'Campaigns') { $sqs_objects[$name . '_' . $parsedView] = $qsd->loadQSObject('Campaigns', 'Campaign', $field['name'], $field['id_name'], $field['id_name']); } else { if ($matches[0] == 'Users') { if (!empty($f['name']) && !empty($f['id_name'])) { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSUser($f['name'], $f['id_name']); } else { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSUser(); } } else { if ($matches[0] == 'Campaigns') { $sqs_objects[$name . '_' . $parsedView] = $qsd->loadQSObject('Campaigns', 'Campaign', $field['name'], $field['id_name'], $field['id_name']); } else { if ($matches[0] == 'Accounts') { $nameKey = $name; $idKey = isset($field['id_name']) ? $field['id_name'] : 'account_id'; //There are billingKey, shippingKey and additionalFields entries you can define in editviewdefs.php //entry to allow quick search to autocomplete fields with a suffix value of the //billing/shippingKey value (i.e. 'billingKey' => 'primary' in Contacts will populate //primary_XXX fields with the Account's billing address values). //addtionalFields are key/value pair of fields to fill from Accounts(key) to Contacts(value) $billingKey = isset($f['displayParams']['billingKey']) ? $f['displayParams']['billingKey'] : null; $shippingKey = isset($f['displayParams']['shippingKey']) ? $f['displayParams']['shippingKey'] : null; $additionalFields = isset($f['displayParams']['additionalFields']) ? $f['displayParams']['additionalFields'] : null; $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSAccount($nameKey, $idKey, $billingKey, $shippingKey, $additionalFields); } else { if ($matches[0] == 'Contacts') { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSContact($field['name'], $field['id_name']); } } } } } } else { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSParent($field['module']); if (!isset($field['field_list']) && !isset($field['populate_list'])) { $sqs_objects[$name . '_' . $parsedView]['populate_list'] = array($field['name'], $field['id_name']); $sqs_objects[$name . '_' . $parsedView]['field_list'] = array('name', 'id'); } else { $sqs_objects[$name . '_' . $parsedView]['populate_list'] = $field['field_list']; $sqs_objects[$name . '_' . $parsedView]['field_list'] = $field['populate_list']; } } } else { if ($field['type'] == 'parent') { $sqs_objects[$name . '_' . $parsedView] = $qsd->getQSParent(); } } //if-else } //foreach foreach ($sqs_objects as $name => $field) { foreach ($field['populate_list'] as $key => $fieldname) { $sqs_objects[$name]['populate_list'][$key] = $sqs_objects[$name]['populate_list'][$key] . '_' . $parsedView; } } } else { //Loop through the Meta-Data fields to see which ones need quick search support foreach ($defs2 as $f) { if (!isset($defs[$f['name']])) { continue; } $field = $defs[$f['name']]; if ($view == "ConvertLead") { $field['name'] = $module . $field['name']; if (!empty($field['id_name'])) { $field['id_name'] = $field['name'] . "_" . $field['id_name']; } } $name = $qsd->form_name . '_' . $field['name']; if ($field['type'] == 'relate' && isset($field['module']) && (preg_match('/_name$|_c$/si', $name) || !empty($field['quicksearch']))) { if (!preg_match('/_c$/si', $name) && (!isset($field['id_name']) || !preg_match('/_c$/si', $field['id_name'])) && preg_match('/^(Campaigns|Teams|Users|Contacts|Accounts)$/si', $field['module'], $matches)) { if ($matches[0] == 'Campaigns') { $sqs_objects[$name] = $qsd->loadQSObject('Campaigns', 'Campaign', $field['name'], $field['id_name'], $field['id_name']); } else { if ($matches[0] == 'Users') { if ($field['name'] == 'reports_to_name') { $sqs_objects[$name] = $qsd->getQSUser('reports_to_name', 'reports_to_id'); } else { if ($view == "ConvertLead" || $field['name'] == 'created_by_name' || $field['name'] == 'modified_by_name') { $sqs_objects[$name] = $qsd->getQSUser($field['name'], $field['id_name']); } else { $sqs_objects[$name] = $qsd->getQSUser(); } } } else { if ($matches[0] == 'Campaigns') { $sqs_objects[$name] = $qsd->loadQSObject('Campaigns', 'Campaign', $field['name'], $field['id_name'], $field['id_name']); } else { if ($matches[0] == 'Accounts') { $nameKey = $name; $idKey = isset($field['id_name']) ? $field['id_name'] : 'account_id'; //There are billingKey, shippingKey and additionalFields entries you can define in editviewdefs.php //entry to allow quick search to autocomplete fields with a suffix value of the //billing/shippingKey value (i.e. 'billingKey' => 'primary' in Contacts will populate //primary_XXX fields with the Account's billing address values). //addtionalFields are key/value pair of fields to fill from Accounts(key) to Contacts(value) $billingKey = SugarArray::staticGet($f, 'displayParams.billingKey'); $shippingKey = SugarArray::staticGet($f, 'displayParams.shippingKey'); $additionalFields = SugarArray::staticGet($f, 'displayParams.additionalFields'); $sqs_objects[$name] = $qsd->getQSAccount($nameKey, $idKey, $billingKey, $shippingKey, $additionalFields); } else { if ($matches[0] == 'Contacts') { $sqs_objects[$name] = $qsd->getQSContact($field['name'], $field['id_name']); if (preg_match('/_c$/si', $name) || !empty($field['quicksearch'])) { $sqs_objects[$name]['field_list'] = array('salutation', 'first_name', 'last_name', 'id'); } } } } } } } else { $sqs_objects[$name] = $qsd->getQSParent($field['module']); if (!isset($field['field_list']) && !isset($field['populate_list'])) { $sqs_objects[$name]['populate_list'] = array($field['name'], $field['id_name']); // now handle quicksearches where the column to match is not 'name' but rather specified in 'rname' if (!isset($field['rname'])) { $sqs_objects[$name]['field_list'] = array('name', 'id'); } else { $sqs_objects[$name]['field_list'] = array($field['rname'], 'id'); $sqs_objects[$name]['order'] = $field['rname']; $sqs_objects[$name]['conditions'] = array(array('name' => $field['rname'], 'op' => 'like_custom', 'end' => '%', 'value' => '')); } } else { $sqs_objects[$name]['populate_list'] = $field['field_list']; $sqs_objects[$name]['field_list'] = $field['populate_list']; } } } else { if ($field['type'] == 'parent') { $sqs_objects[$name] = $qsd->getQSParent(); } } //if-else } //foreach } //Implement QuickSearch for the field if (!empty($sqs_objects) && count($sqs_objects) > 0) { $quicksearch_js = '<script language="javascript">'; $quicksearch_js .= 'if(typeof sqs_objects == \'undefined\'){var sqs_objects = new Array;}'; $json = getJSONobj(); foreach ($sqs_objects as $sqsfield => $sqsfieldArray) { $quicksearch_js .= "sqs_objects['{$sqsfield}']={$json->encode($sqsfieldArray)};"; } return $quicksearch_js . '</script>'; } return ''; }
/** * Go through each of the team_sets_modules and find sets that are no longer in use * */ public static function cleanUp() { $teamSetModule = BeanFactory::getBean('TeamSetModules'); //maintain a list of the team set ids we would like to remove $setsToRemove = array(); $setsToRemain = array(); $tsmResult = $teamSetModule->db->query('SELECT team_sets_modules.* FROM team_sets_modules where team_sets_modules.deleted=0', true, "Error retrieving TeamSetModule list: "); while ($tsmRow = $teamSetModule->db->fetchByAssoc($tsmResult)) { //pull off the team_set_id and module and run a query to see if we find if the module is still using this team_set //of course we have to be careful not to remove a set before we have gone through all of the modules containing that //set otherwise. $module_table_name = $tsmRow['module_table_name']; $team_set_id = $tsmRow['team_set_id']; //if we have a user_preferences table then we do not need to check the db. $pos = strpos($module_table_name, 'user_preferences'); if ($pos !== false) { $tokens = explode('-', $module_table_name); if (count($tokens) >= 3) { //we did find that this team_set was going to be removed from user_preferences $userPrefResult = $GLOBALS['db']->query("SELECT contents FROM user_preferences WHERE category = '" . $tokens[1] . "' AND deleted = 0", false, 'Failed to load user preferences'); while ($userPrefRow = $teamSetModule->db->fetchByAssoc($userPrefResult)) { $prefs = unserialize(base64_decode($userPrefRow['contents'])); $team_set_id = SugarArray::staticGet($prefs, implode('.', array_slice($tokens, 2))); if (!empty($team_set_id)) { //this is the team set id that is being used in user preferences we have to be sure to not remove it. $setsToRemain[$team_set_id] = true; } } //end while } //fi } else { $query = "SELECT count(*) count FROM {$module_table_name} WHERE" . " team_set_id = '{$team_set_id}' AND deleted = 0"; $result = $teamSetModule->db->query($query); if ($row = $teamSetModule->db->fetchByAssoc($result)) { if (empty($row['count'])) { $setsToRemove[$team_set_id] = true; } else { $setsToRemain[$team_set_id] = true; } } } } //compute the difference between the sets that have been designated to remain and those set to remove $arrayDiff = array_diff_key($setsToRemove, $setsToRemain); //now we have our list of team_set_ids we would like to remove, let's go ahead and do it and remember //to update the TeamSetModule table. foreach ($arrayDiff as $team_set_id => $key) { //1) remove from team_sets_teams $query1 = "DELETE FROM team_sets_teams WHERE team_set_id = '{$team_set_id}'"; $teamSetModule->db->query($query1); //2) remove from team_sets $query2 = "DELETE FROM team_sets WHERE id = '{$team_set_id}'"; $teamSetModule->db->query($query2); //3) remove from team_sets_modules $query3 = "DELETE FROM {$teamSetModule->table_name} WHERE team_set_id = '{$team_set_id}'"; $teamSetModule->db->query($query3); } //clear out the cache self::flushBackendCache(); }
public function teststaticGet() { //execute the method and test if it returns expected values //test for a top level key $haystack = array('key1' => array('key2' => 'value2', 'key3' => 'value3'), 'key4' => 'value4'); $expected = 'value4'; $actual = SugarArray::staticGet($haystack, 'key4'); $this->assertSame($expected, $actual); //test for a child level key with dot notation $haystack = array('key1' => array('key2' => 'value2', 'key3' => 'value3'), 'key4' => 'value4'); $expected = 'value3'; $actual = SugarArray::staticGet($haystack, 'key1.key3'); $this->assertSame($expected, $actual); }