/** * Test split_set_assoc() with both ordered and associated parts */ function test_split_set_assoc_Mixed() { $this->assertSame(array('a' => 'test', 'abc', 'x' => 'adam'), Q\split_set(';', 'a=test;abc;x=adam'), "Simple"); $this->assertSame(array('a' => 'test', 'abc;def', 'x' => 'adam;eva', 'qqq', 'def'), Q\split_set(';', 'a=test;"abc;def";x="adam;eva";"qqq";def'), "Quoted"); $this->assertSame(array('a' => 'test', 'abc', 'x' => '"adam"', '"qqq"', 'def'), Q\split_set(';', 'a=test;abc;x="adam";"qqq";def', false), "Don't unquote"); $this->assertSame(array('a' => 'test', 'abc', 'x' => 'adam', 'qqq', 'def'), Q\split_set(';~&^', 'a=test;abc;x=adam~"qqq"^def'), "Other seperators"); }
/** * Describe a table. * * @param string $table Use a different table * @param boolean $return Do not output, but return XML * @return string */ public function describe($table = null, $return = false) { if (empty($table) && !$this->td) { throw new Exception("No table argument specified"); } $td = empty($table) ? $this->td : ($table instanceof DB_Table ? $table : DB::i()->table($table)); $xml = '<props table="' . htmlspecialchars($td->getName(), ENT_COMPAT, 'UTF-8') . '" description="' . htmlspecialchars($td['description'], ENT_COMPAT, 'UTF-8') . '"' . (isset($td['icon']) ? ' icon=' . htmlspecialchars($td['icon'], ENT_COMPAT, 'UTF-8') . '"' : '') . ' descfield="' . htmlspecialchars($this->td->getFieldProperty('#role:description', 'name'), ENT_COMPAT, 'UTF-8') . '">'; foreach ($td->getProperties() as $index => $field) { if ($index[0] == '#' || !empty($field['hidden']) || empty($field['type']) && empty($field['datatype'])) { continue; } $datatype = !empty($field['datatype']) ? $field['datatype'] : $field['type']; unset($values); $xml .= '<prop select="' . htmlspecialchars(isset($field['orm']) ? $field['orm'] : $field['name'], ENT_COMPAT, 'UTF-8') . '" datatype="' . htmlspecialchars($datatype, ENT_COMPAT, 'UTF-8') . '" caption="' . htmlspecialchars($field['caption'], ENT_COMPAT, 'UTF-8') . '"' . (isset($field['info']) ? ' info="' . htmlspecialchars($field['info'], ENT_COMPAT, 'UTF-8') . '"' : '') . (isset($field['default']) ? ' default="' . htmlspecialchars($field['default'], ENT_COMPAT, 'UTF-8') . '"' : '') . (!empty($field['frozen']) ? ' frozen="1"' : '') . ($field['required'] ? ' required="1"' : '') . (isset($field['maxlength']) ? ' maxlength="' . (int) $field['maxlength'] . '"' : '') . (isset($field['decimals']) ? ' decimals="' . (int) $field['decimals'] . '"' : '') . (isset($field['mask']) ? ' mask="' . htmlspecialchars($field['mask'], ENT_COMPAT, 'UTF-8') . '"' : '') . (isset($field['validate']) ? ' validate="' . htmlspecialchars($field['validate'], ENT_COMPAT, 'UTF-8') . '"' : ''); switch ($datatype) { case 'children': $xml .= ' type="children" multiple="' . $field['multiple'] . '">' . $this->describe($field['foreign_table'], true) . "</prop>"; break; case 'juntion': $xml .= ' multiple="' . $field['multiple'] . '"'; case 'lookupkey': case 'parentkey': $xml .= ' type="lookup" foreign_table="' . htmlspecialchars($field['foreign_table'], ENT_COMPAT, 'UTF-8') . '" descfield="' . htmlspecialchars(DB::i()->table($field['foreign_table'])->getFieldProperty('#role:description', 'name'), ENT_COMPAT, 'UTF-8') . '" />'; break; case 'boolean': if (!isset($field['values'])) { $values = array(0 => 'Nee', 1 => 'Ja'); } case 'enum': if (!isset($values)) { $values = is_array($field['values']) ? $field['values'] : Q\split_set($field['values'], ','); $options = isset($field['options']) ? is_array($field['options']) ? $field['options'] : Q\split_set($field['options'], ',') : $values; $values = array_combine($options, $values); } case 'set': if (!isset($values)) { $values = Q\binset(is_array($field['values']) ? $field['values'] : Q\split_set($field['values'])); $xml .= ' multiple="' . $field['multiple'] . '"'; } $xml .= " type=\"dropdown\">"; foreach ($values as $i => $value) { $xml .= "<item value=\"{$i}\">" . htmlspecialchars($value, ENT_COMPAT, 'UTF-8') . "</item>"; } $xml .= "</prop>"; break; case 'html': $xml .= ' type="custom" form="winEditor" mask="[Bewerken]"/>'; break; default: $xml .= '/>'; break; } } $xml .= '</props>'; if ($return) { return $xml; } self::outputXML($xml); return null; }