public function testoverride_value_to_string_recursive() { //execute the method and test if it returns expected values //without keys $tempArray = array('Key1' => 'value1', 'Key2' => 'value2'); $expected = "\$tempArray=array (\n 'Key1' => 'value1',\n 'Key2' => 'value2',\n);"; $actual = override_value_to_string_recursive('', 'tempArray', $tempArray); $this->assertSame($actual, $expected); //with keys $tempArray = array(); $tempArray['Key1']['Key2'] = array('Key3' => 'value', 'Key4' => 'value'); $expected = "\$tempArray['key1']['key2']=array (\n 'Key1' => \n array (\n 'Key2' => \n array (\n 'Key3' => 'value',\n 'Key4' => 'value',\n ),\n ),\n);"; $actual = override_value_to_string_recursive(array('key1', 'key2'), 'tempArray', $tempArray); //var_dump( nl2br($actual)); $this->assertSame($actual, $expected); }
protected function writeVardefExtension($bean_name, $field, $def_override) { //Hack for the broken cases module $vBean = $bean_name == "aCase" ? "Case" : $bean_name; $file_loc = "{$this->base_path}/sugarfield_{$field->name}.php"; $out = "<?php\n // created: " . date('Y-m-d H:i:s') . "\n"; foreach ($def_override as $property => $val) { $out .= override_value_to_string_recursive(array($vBean, "fields", $field->name, $property), "dictionary", $val) . "\n"; } $out .= "\n ?>"; if (!file_exists($this->base_path)) { mkdir_recursive($this->base_path); } if ($fh = @sugar_fopen($file_loc, 'w')) { fputs($fh, $out); fclose($fh); return true; } else { return false; } }
public function test_override_recursive_helper() { $key_names = array(1, 2, 3, 4, 5); $array_name = 'name'; $value = 'foo'; $expected = '$name[1][2][3][4][5]=' . "'" . $value . "';"; $this->assertEquals($expected, override_value_to_string_recursive($key_names, $array_name, $value)); }
/** * Change old labels to new ones in all $module subpanels * @param $module * @return bool */ public function upgradeSubpanelModuleLabels($module) { $upgradeLabels = $this->upgradeLabels[$module]; $upgradeDriver = $this->upgrader; $upgraded = false; // upgrade viewdefs $path = "custom/modules/{$module}/clients/base/views/subpanel-for-*/subpanel-for-*.php"; foreach (glob($path) as $scanFile) { $viewdefs = array(); include $scanFile; // Modification flag $changed = false; array_walk_recursive($viewdefs, function (&$value, $key) use(&$changed, $upgradeLabels, $upgradeDriver, $scanFile) { if ('label' == $key && isset($upgradeLabels[$value])) { $upgradeDriver->log(sprintf('FixCustomLabelsForCoreModules: Fix label name from "%s" to "%s" in file "%s"', $value, $upgradeLabels[$value], $scanFile)); $value = $upgradeLabels[$value]; $changed = true; } }); if ($changed) { $this->backupFile($scanFile); $upgraded = $upgraded || $changed; $keyNames = array(); $viewdefsWrite = $viewdefs; // collect key names for array path "{module}/{platform}/{view_type}/{view}" for ($i = 0; $i < 4; $i++) { if (1 != count($viewdefsWrite)) { break; } $keyNames[] = key($viewdefsWrite); $viewdefsWrite = $viewdefsWrite[key($viewdefsWrite)]; } $out = "<?php\n// created: ' . date('Y-m-d H:i:s')\n"; $out .= override_value_to_string_recursive($keyNames, 'viewdefs', $viewdefsWrite); if (sugar_file_put_contents_atomic($scanFile, $out) !== false) { // record custom writes to file map SugarAutoLoader::addToMap($scanFile); } unset($out); unset($viewdefsWrite); } unset($viewdefs); } // upgrade subpanel_layout $path = "custom/modules/{$module}/metadata/subpanels/*.php"; foreach (glob($path) as $scanFile) { $subpanel_layout = array(); include $scanFile; // Modification flag $changed = false; array_walk_recursive($subpanel_layout, function (&$value, $key) use(&$changed, $upgradeLabels, $upgradeDriver, $scanFile) { if ('vname' == $key && isset($upgradeLabels[$value])) { $upgradeDriver->log(sprintf('FixCustomLabelsForCoreModules: Fix label name from "%s" to "%s" in file "%s"', $value, $upgradeLabels[$value], $scanFile)); $value = $upgradeLabels[$value]; $changed = true; } }); if ($changed) { $upgraded = $upgraded || $changed; $this->backupFile($scanFile); write_array_to_file('subpanel_layout', $subpanel_layout, $scanFile, 'w'); } unset($subpanel_layout); } return $upgraded; }
/** * Write def to file, like DynamicField. * @param array $def * @param string $mod */ public function writeDef($def, $mod) { $base_path = "custom/Extension/modules/{$mod}/Ext/Vardefs"; $fn = "{$base_path}/sugarfield_{$def['name']}.php"; $seed = BeanFactory::getBean($mod); $this->removeField($seed, $def['name']); $vBean = $mod == "aCase" ? "Case" : $mod; $out = "<?php\n // created: " . date('Y-m-d H:i:s') . "\n"; foreach ($def as $property => $val) { $out .= override_value_to_string_recursive(array($vBean, "fields", $def['name'], $property), "dictionary", $val); $out .= "\n"; } file_put_contents($fn, $out); $this->log("New file {$fn} for field {$def['name']} of object {$seed->object_name} created"); }