Registry is more strong

This commit is contained in:
Romain Neutron
2012-10-05 15:11:55 +02:00
parent 8459996df3
commit c762e7f0ab
4 changed files with 25 additions and 40 deletions

View File

@@ -29,7 +29,6 @@ class registry implements registryInterface
protected static $_instance; protected static $_instance;
const TYPE_BOOLEAN = 'boolean'; const TYPE_BOOLEAN = 'boolean';
const TYPE_ARRAY = 'array';
const TYPE_ENUM_MULTI = 'enum_multi'; const TYPE_ENUM_MULTI = 'enum_multi';
const TYPE_INTEGER = 'integer'; const TYPE_INTEGER = 'integer';
const TYPE_ENUM = 'enum'; const TYPE_ENUM = 'enum';
@@ -105,7 +104,6 @@ class registry implements registryInterface
$value = (int) $row['value']; $value = (int) $row['value'];
break; break;
case self::TYPE_ENUM_MULTI: case self::TYPE_ENUM_MULTI:
case self::TYPE_ARRAY:
$value = unserialize($row['value']); $value = unserialize($row['value']);
break; break;
case self::TYPE_STRING: case self::TYPE_STRING:
@@ -118,12 +116,6 @@ class registry implements registryInterface
break; break;
} }
if ($row['type'] == self::TYPE_BINARY) {
if (!is_executable($value)) {
continue;
}
}
$this->cache->save($row['key'], $value); $this->cache->save($row['key'], $value);
} }
if ($loaded === true) if ($loaded === true)
@@ -161,7 +153,6 @@ class registry implements registryInterface
$this->load(); $this->load();
switch ($type) { switch ($type) {
case self::TYPE_ARRAY:
case self::TYPE_ENUM_MULTI: case self::TYPE_ENUM_MULTI:
$sql_value = serialize($value); $sql_value = serialize($value);
$value = (array) $value; $value = (array) $value;
@@ -185,6 +176,12 @@ class registry implements registryInterface
break; break;
} }
if ($value != '' && $type == self::TYPE_BINARY) {
if (!is_executable($value)) {
return $this;
}
}
$conn = connection::getPDOConnection(); $conn = connection::getPDOConnection();
$sql = 'REPLACE INTO registry (`id`, `key`, `value`, `type`) $sql = 'REPLACE INTO registry (`id`, `key`, `value`, `type`)

View File

@@ -127,7 +127,6 @@ class setup
case registry::TYPE_INTEGER: case registry::TYPE_INTEGER:
case registry::TYPE_BOOLEAN: case registry::TYPE_BOOLEAN:
case registry::TYPE_STRING: case registry::TYPE_STRING:
case registry::TYPE_ARRAY:
$type = $datas['type']; $type = $datas['type'];
break; break;
default: default:
@@ -174,13 +173,15 @@ class setup
} }
} }
$type = 'string'; $type = $variable['type'];
switch ($variable['type']) { switch ($variable['type']) {
case 'string': case \registry::TYPE_STRING:
case 'password': case \registry::TYPE_BINARY:
case \registry::TYPE_TEXT:
case \registry::TYPE_TIMEZONE:
$datas[$variable['name']] = (string) trim($datas[$variable['name']]); $datas[$variable['name']] = (string) trim($datas[$variable['name']]);
break; break;
case 'enum': case \registry::TYPE_ENUM:
if (!isset($variable['available'])) { if (!isset($variable['available'])) {
$variable['error'] = 'avalaibility'; $variable['error'] = 'avalaibility';
} elseif (!is_array($variable['available'])) { } elseif (!is_array($variable['available'])) {
@@ -189,25 +190,16 @@ class setup
$variable['error'] = 'avalaibility'; $variable['error'] = 'avalaibility';
} }
break; break;
case 'enum_multi': case \registry::TYPE_ENUM_MULTI:
if (!isset($datas[$variable['name']])) if (!isset($datas[$variable['name']]))
$datas[$variable['name']] = null; $datas[$variable['name']] = null;
$datas[$variable['name']] = ($datas[$variable['name']]); $datas[$variable['name']] = ($datas[$variable['name']]);
$type = 'array';
break; break;
case 'boolean': case \registry::TYPE_BOOLEAN:
$datas[$variable['name']] = strtolower($datas[$variable['name']]) === 'true' ? '1' : '0'; $datas[$variable['name']] = strtolower($datas[$variable['name']]) === 'true' ? '1' : '0';
$type = 'boolean';
break; break;
case 'integer': case \registry::TYPE_INTEGER:
$datas[$variable['name']] = (int) trim($datas[$variable['name']]); $datas[$variable['name']] = (int) trim($datas[$variable['name']]);
$type = 'integer';
break;
case 'text':
$datas[$variable['name']] = trim($datas[$variable['name']]);
break;
case 'timezone':
$datas[$variable['name']] = trim($datas[$variable['name']]);
break; break;
default: default:
$error = true; $error = true;

View File

@@ -1633,7 +1633,7 @@
</field> </field>
<field> <field>
<name>type</name> <name>type</name>
<type>enum('string','boolean','array','integer')</type> <type>enum('string','boolean','array','integer','text','binary','timezone','enum_multi','enum')</type>
<null></null> <null></null>
<extra></extra> <extra></extra>
<default>string</default> <default>string</default>

View File

@@ -164,19 +164,20 @@ foreach ($GV as $section) {
switch ($value['type']) { switch ($value['type']) {
case 'boolean': case \registry::TYPE_BOOLEAN:
$input = ' $input = '
<input class="checkbox" ' . ($readonly ? 'readonly="readonly"' : '') . ' ' . ( $currentValue == '0' ? 'checked="selected"' : '' ) . ' type="radio" name="' . $value['name'] . '" value="False" id="id_' . $value['name'] . '_no" /><label for="id_' . $value['name'] . '_no">False</label> <input class="checkbox" ' . ($readonly ? 'readonly="readonly"' : '') . ' ' . ( $currentValue == '0' ? 'checked="selected"' : '' ) . ' type="radio" name="' . $value['name'] . '" value="False" id="id_' . $value['name'] . '_no" /><label for="id_' . $value['name'] . '_no">False</label>
<input class="checkbox" ' . ($readonly ? 'readonly="readonly"' : '') . ' ' . ( $currentValue == '1' ? 'checked="checked"' : '' ) . ' type="radio" name="' . $value['name'] . '" value="True" id="id_' . $value['name'] . '_yes" /><label for="id_' . $value['name'] . '_yes">True</label> <input class="checkbox" ' . ($readonly ? 'readonly="readonly"' : '') . ' ' . ( $currentValue == '1' ? 'checked="checked"' : '' ) . ' type="radio" name="' . $value['name'] . '" value="True" id="id_' . $value['name'] . '_yes" /><label for="id_' . $value['name'] . '_yes">True</label>
'; ';
break; break;
case 'string': case \registry::TYPE_BINARY:
case \registry::TYPE_STRING:
$input = '<input ' . ($readonly ? 'readonly="readonly"' : '') . ' name="' . $value['name'] . '" id="id_' . $value['name'] . '" type="text" value="' . str_replace('"', '&quot;', $currentValue) . '"/>'; $input = '<input ' . ($readonly ? 'readonly="readonly"' : '') . ' name="' . $value['name'] . '" id="id_' . $value['name'] . '" type="text" value="' . str_replace('"', '&quot;', $currentValue) . '"/>';
break; break;
case 'text': case \registry::TYPE_TEXT:
$input = '<textarea ' . ($readonly ? 'readonly="readonly"' : '') . ' name="' . $value['name'] . '" id="id_' . $value['name'] . '">' . str_replace('"', '&quot;', $currentValue) . '</textarea>'; $input = '<textarea ' . ($readonly ? 'readonly="readonly"' : '') . ' name="' . $value['name'] . '" id="id_' . $value['name'] . '">' . str_replace('"', '&quot;', $currentValue) . '</textarea>';
break; break;
case 'enum': case \registry::TYPE_ENUM:
$input = '<select ' . ($readonly ? 'readonly="readonly"' : '') . ' name="' . $value['name'] . '" id="id_' . $value['name'] . '">'; $input = '<select ' . ($readonly ? 'readonly="readonly"' : '') . ' name="' . $value['name'] . '" id="id_' . $value['name'] . '">';
if (isset($value['available']) && is_array($value['available'])) { if (isset($value['available']) && is_array($value['available'])) {
foreach ($value['available'] as $k => $v) foreach ($value['available'] as $k => $v)
@@ -186,7 +187,7 @@ foreach ($GV as $section) {
} }
$input .= '</select>'; $input .= '</select>';
break; break;
case 'enum_multi': case \registry::TYPE_ENUM_MULTI:
if (isset($value['available']) && is_array($value['available'])) { if (isset($value['available']) && is_array($value['available'])) {
foreach ($value['available'] as $k => $v) foreach ($value['available'] as $k => $v)
$input .= '<input class="checkbox" type="checkbox" name="' . $value['name'] . '[]" ' . ($readonly ? 'readonly="readonly"' : '') . ' value="' . $k . '" ' . ( ( ! is_array($currentValue) || in_array($k, $currentValue)) ? 'checked="checked"' : '' ) . '/><label>' . $v . '</label><br>'; $input .= '<input class="checkbox" type="checkbox" name="' . $value['name'] . '[]" ' . ($readonly ? 'readonly="readonly"' : '') . ' value="' . $k . '" ' . ( ( ! is_array($currentValue) || in_array($k, $currentValue)) ? 'checked="checked"' : '' ) . '/><label>' . $v . '</label><br>';
@@ -194,16 +195,11 @@ foreach ($GV as $section) {
echo '<p style="color:red;">erreur avec la valeur ' . $value['name'] . '</p>'; echo '<p style="color:red;">erreur avec la valeur ' . $value['name'] . '</p>';
} }
break; break;
case 'list': case \registry::TYPE_INTEGER:
break;
case 'integer':
$input .= '<input ' . ($readonly ? 'readonly="readonly"' : '') . ' name="' . $value['name'] . '" id="id_' . $value['name'] . '" type="text" value="' . $currentValue . '"/>'; $input .= '<input ' . ($readonly ? 'readonly="readonly"' : '') . ' name="' . $value['name'] . '" id="id_' . $value['name'] . '" type="text" value="' . $currentValue . '"/>';
break; break;
case 'password':
$input .= '<input ' . ($readonly ? 'readonly="readonly"' : '') . ' name="' . $value['name'] . '" id="id_' . $value['name'] . '" type="password" value="' . str_replace('"', '\"', stripslashes($currentValue)) . '"/>';
break; break;
case 'timezone': case \registry::TYPE_TIMEZONE:
if (trim($currentValue) === '') { if (trim($currentValue) === '') {
$datetime = new DateTime(); $datetime = new DateTime();
$currentValue = $datetime->getTimezone()->getName(); $currentValue = $datetime->getTimezone()->getName();