public function updateModel($model_path, $element)
{
$data = file_get_contents($model_path);
if (preg_match('/public function rules.*?\\}/si', $data, $m)) {
$replace = '';
foreach (explode(chr(10), $m[0]) as $line) {
if (preg_match('/array\\(([a-zA-Z0-9_ ,\']+),[\\s\\t]*\'safe\'\\),/', $line, $n)) {
$fields = preg_replace('/[, \']+$/', '', preg_replace('/^[ ,\']+/', '', $n[1]));
foreach ($element['fields'] as $num => $field) {
if ($field['type'] != 'Multi select') {
$fields .= ', ' . $field['name'];
}
}
$replace .= "\t\t\tarray('{$fields}', 'safe'),\n";
} elseif (preg_match('/array\\(([a-zA-Z0-9_ ,\']+),[\\s\\t]*\'required\'\\),/', $line, $n)) {
$fields = preg_replace('/[, \']+$/', '', preg_replace('/^[ ,\']+/', '', $n[1]));
foreach ($element['fields'] as $num => $field) {
if ($field['required'] && $field['type'] != 'Multi select') {
$fields .= ', ' . $field['name'];
}
}
$replace .= "\t\t\tarray('{$fields}', 'required'),\n";
} elseif (preg_match('/array\\(([a-zA-Z0-9_ ,\']+),[\\s\\t]*\'safe\',[\\s\\t]*\'on\'[\\s\\t]*=>[\\s\\t]*\'search\'\\),/', $line, $n)) {
$fields = preg_replace('/[, \']+$/', '', preg_replace('/^[ ,\']+/', '', $n[1]));
foreach ($element['fields'] as $num => $field) {
if ($field['type'] != 'Multi select') {
$fields .= ', ' . $field['name'];
}
}
$replace .= "\t\t\tarray('{$fields}', 'safe', 'on' => 'search'),\n";
} else {
$replace .= $line . "\n";
}
}
$data = str_replace($m[0], $replace, $data);
}
if (preg_match('/public function relations.*?\\}/si', $data, $m)) {
$relations = "public function relations()\n\t{\n\t\t// NOTE: you may need to adjust the relation name and the related\n\t\t// class name for the relations automatically generated below.\n\t\treturn array(\n";
foreach (explode(chr(10), $m[0]) as $line) {
if (preg_match('/\\(self::/', $line)) {
$relations .= $line . "\n";
}
}
foreach ($element['relations'] as $relation) {
$relations .= "\t\t\t'{$relation['name']}' => array(self::{$relation['type']}, '{$relation['class']}', '{$relation['field']}'),\n";
}
$relations .= "\t\t);\n\t}";
$data = str_replace($m[0], $relations, $data);
}
if (preg_match('/public function attributeLabels.*?\\}/si', $data, $m)) {
$labels = "public function attributeLabels()\n\t{\n\t\treturn array(\n";
foreach (explode(chr(10), $m[0]) as $line) {
if (preg_match('/=>/', $line)) {
$labels .= "\t\t\t" . preg_replace('/^[\\s\\t]+/', '', $line) . "\n";
}
}
foreach ($element['fields'] as $field) {
$labels .= "\t\t\t'{$field['name']}' => '{$field['label']}',\n";
}
$labels .= "\t\t);\n\t}";
$data = str_replace($m[0], $labels, $data);
}
file_put_contents($model_path, $data);
}