<?php
$sql_query = 'DELETE FROM `' . $config["table_prefix"] . 'calc_template`';
run_query($sql_query);
$sql_query = 'INSERT INTO `' . $config["table_prefix"] . 'calc_template`';
$sql_query .= <<<'EOT'
(`id`, `name`, `calculate_tpl`, `params`, `type`, `tpl_name`, `javascript_tpl`) VALUES
(1,	'Сумма из подтаблицы в основную запись',	'if ($line[\'{$gen_field.link_field_id}\'][\'raw\'] > 0) {\n    if ($event[\'type\'] == \'delete\') {\n        $sql = \' AND id <> \' . $ID;\n    }\n    $result = data_select_field($table_id, \"sum({$cur_field}) as f_sum\", \"status = 0 AND {$gen_field.link_field_id} = \" . $line[\'{$gen_field.link_field_id}\'][\'raw\'] . $sql);\n    $row = sql_fetch_assoc($result);\n    $line[\'{$gen_field.link_field_id}\'][\'{$gen_field.field}\'] = $row[\'f_sum\'];\n}',	'{\n    \"title\": \"Сумма из подтаблицы в основную запись\",\n    \"help\": \"tpl_sum_from_subtable\",\n    \"parameters\": {\n        \"cur_field\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field\",\n            \"description\": \"Выберите поле, по которому считать сумму\",\n            \"type_field\": 1\n        },\n        \"gen_field\": {\n            \"type\": \"TableField\",\n            \"name\": \"gen_field\",\n            \"description\": \"Выберите основную таблицу\",\n            \"field_description\": \"Выберите поле, в которое подтягивать сумму\",\n            \"only_parent\": true,\n            \"type_field\": 1\n        }\n    }\n}',	'calc',	'calc_1.tpl',	''),
(2,	'Заполнение поля значением другого',	'if (!$line[\'{$cur_field1}\']) {\n    $line[\'{$cur_field1}\'] = $line[\'{$cur_field2}\'];\n}',	'{\n    \"title\": \"Заполнение поля значением другого\",\n    \"help\": \"tpl_field_to_field\",\n    \"parameters\": {\n        \"cur_field1\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field1\",\n            \"description\": \"Выберите поле-получатель\"\n        },\n        \"cur_field2\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field2\",\n            \"description\": \"Выберите поле-источник\"\n        }\n    }\n}',	'calc',	'calc_2.tpl',	''),
(3,	'Добавление к дате дней',	'$line[\'{$cur_field3}\'] = date(\'Y-m-d H:i:s\', strtotime($line[\'{$cur_field1}\']) + $line[\'{$cur_field2}\'] * 3600 * 24);',	'{\n    \"title\": \"Добавление к дате дней\",\n    \"help\": \"tpl_add_to_date\",\n    \"parameters\": {\n        \"cur_field1\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field1\",\n            \"description\": \"Выберите исходную дату\",\n            \"type_field\": [\n                2,\n                12\n            ]\n        },\n        \"cur_field2\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field2\",\n            \"description\": \"Выберите поле с числом дней\",\n            \"type_field\": 1\n        },\n        \"cur_field3\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field3\",\n            \"description\": \"Выберите поле для записи результата\",\n            \"type_field\": 2\n        }\n    }\n}',	'calc',	'calc_3.tpl',	''),
(4,	'Значение по умолчанию',	'if ($event[\'is_new_line\']) {\n    $line[\'{$cur_field}\'] = $line[\'{$gen_field.link_field_id}\'][\'{$gen_field.field}\'];\n}',	'{\n    \"title\": \"Значение по умолчанию\",\n    \"help\": \"tpl_default_value\",\n    \"parameters\": {\n        \"cur_field\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field\",\n            \"description\": \"Выберите поле, в которое подставлять значение\",\n            \"no_system\": true\n        },\n        \"gen_field\": {\n            \"type\": \"TableField\",\n            \"name\": \"gen_field\",\n            \"description\": \"Выберите основную таблицу\",\n            \"field_description\": \"Выберите поле, из которого тянуть значение\",\n            \"only_parent\": \"true\"\n        }\n    }\n}',	'calc',	'calc_4.tpl',	''),
(5,	'Заполнение поля из поля связи',	'$line[\'{$cur_field}\'] = $line[\'{$gen_field.link_field_id}\'][\'{$gen_field.field}\'];',	'{\n    \"title\": \"Заполнение поля из поля связи\",\n    \"help\": \"tpl_link_to_field\",\n    \"parameters\": {\n        \"cur_field\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field\",\n            \"description\": \"Выберите поле, в которое сохранять значение\",\n            \"no_system\": true\n        },\n        \"gen_field\": {\n            \"type\": \"TableField\",\n            \"name\": \"gen_field\",\n            \"description\": \"Выберите таблицу, из которой тянуть значение\",\n            \"field_description\": \"Выберите поле, из которого тянуть значение\",\n            \"only_parent\": \"true\"\n        }\n    }\n}',	'calc',	'calc_5.tpl',	''),
(6,	'Подстановка текущей даты',	'$line[\'{$cur_field}\'] = date(\'Y-m-d H:i:s\');',	'{\n    \"title\": \"Заполнение поля текущей датой\",\n    \"help\": \"tpl_cur_date\",\n    \"parameters\": {\n        \"cur_field\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field\",\n            \"description\": \"Выберите поле, в которое сохранять дату\",\n            \"type_field\": 2,\n            \"no_system\": true\n        }        \n    }\n}',	'button',	'cur_date.tpl',	''),
(7,	'Заполнение поля значением другого',	'$line[\'{$cur_field1}\'] = $line[\'{$cur_field2}\'];',	'{\n    \"title\": \"Заполнение поля значением другого\",\n    \"help\": \"tpl_field_to_field\",\n    \"parameters\": {\n        \"cur_field1\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field1\",\n            \"description\": \"Выберите поле-получатель\"\n        },\n        \"cur_field2\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field2\",\n            \"description\": \"Выберите поле-источник\"\n        }\n    }\n}',	'button',	'change_field.tpl',	''),
(8,	'Заполнение поля из поля связи',	'$line[\'{$cur_field}\'] = $line[\'{$gen_field.link_field_id}\'][\'{$gen_field.field}\'];',	'{\n    \"title\": \"Заполнение поля из поля связи\",\n    \"help\": \"tpl_link_to_field\",\n    \"parameters\": {\n        \"cur_field\": {\n            \"type\": \"Field\",\n            \"name\": \"cur_field\",\n            \"description\": \"Выберите поле, в которое сохранять значение\",\n            \"no_system\": true\n        },\n        \"gen_field\": {\n            \"type\": \"TableField\",\n            \"name\": \"gen_field\",\n            \"description\": \"Выберите таблицу, из которой тянуть значение\",\n            \"field_description\": \"Выберите поле, из которого тянуть значение\",\n            \"only_parent\": \"true\"\n        }\n    }\n}',	'button',	'change_field_on_link.tpl',	''),
(10,	'Смена значения поля типа «Список» при изменении поля',	'if($line[\'{$cond_field}\'] == \'{$eq_value}\') {\r\n    $line[\'{$put_field}\'] = \'{$put_value}\';\r\n}',	'{\r\n    \"title\": \"Смена значения поля типа «Список» при изменении поля\",\r\n    \"help\": \"Данное вычисление заменяет значение поля типа «Список», если поле проверки равно выбранному значению.\",\r\n    \"parameters\": {\r\n    \"cond_field\": {\r\n        \"type\": \"Field\",\r\n            \"name\": \"cond_field\",\r\n            \"description\": \"Выберите поле для проверки\",\r\n            \"no_system\": true\r\n        },\r\n        \"eq_value\": {\r\n        \"type\": \"String\",\r\n            \"name\": \"eq_value\",\r\n            \"description\": \"Введите значение, которому должно быть равно поле\"\r\n        },\r\n        \"put_field\": {\r\n        \"type\": \"Field\",\r\n            \"name\": \"put_field\",\r\n            \"type_field\":{\"1\":\"1\",\"2\":\"2\",\"3\":\"3\",\"4\":\"4\"},\r\n            \"description\": \"Выберите для замены значения поле типа «Список»\",\r\n            \"no_system\": true\r\n        },\r\n        \"put_value\": {\r\n        \"type\": \"String\",\r\n            \"name\": \"put_value\",\r\n            \"description\": \"Введите значение, которое должно быть присвоено полю типа «Список»\"\r\n        }\r\n    }\r\n}',	'calc',	'calc_7.tpl',	''),
(11,	'Дата (или время) из поля типа «Дата/время» в другое поле',	'if(\'{$put_value}\' == 1){\n    $line[\'{$put_field}\'] = date(\'d.m.Y\',strtotime($line[\'{$cond_field}\']));\n} elseif(\'{$put_value}\' == 2){\n    $line[$params[\'put_field\']] = date(\'H:m:s\',strtotime($line[$params[\'cond_field\']]));\n}',	'{\n    \"title\": \"Дата (или время) из поля типа «Дата/время» в другое поле\",\n    \"help\": \"tpl_date_to_field\",\n    \"parameters\": {\n        \"cond_field\": {\n            \"type\": \"Field\",\n            \"name\": \"cond_field\",\n            \"type_field\": \"2\",\n            \"description\": \"Выберите поле, из которого будут тянутся данные\"\n        },\n        \"put_field\": {\n            \"type\": \"Field\",\n            \"name\": \"put_field\",\n            \"type_field\": \"3\",\n            \"description\": \"Выберите поле, которое должно быть заполнено данными\",\n            \"no_system\": true\n        },\n        \"put_value\": {\n            \"type\": \"List\",\n            \"name\": \"put_value\",\n            \"values\":{\"1\":\"Дата\",\"2\":\"Время\"},\n            \"description\": \"Выберите данные, которые должны быть переданы\"\n        }\n    }\n}',	'calc',	'calc_8.tpl',	''),
(12,	'Поиск и замена значений поля',	'$line[\'{$cond_field}\'] = str_replace(\'{$give_value}\', \'{$put_value}\', $line[\'{$cond_field}\']);',	'{\n    \"title\": \"Поиск и замена значений поля\",\n    \"help\": \"tpl_replace\",\n    \"parameters\": {\n        \"cond_field\": {\n            \"type\": \"Field\",\n            \"name\": \"cond_field\",\n            \"type_field\": \"3\",\n            \"description\": \"Выберите поле, которое должно быть изменено\"\n        },\n        \"give_value\": {\n            \"type\": \"String\",\n            \"name\": \"give_value\",\n            \"description\": \" Введите значение для поиска\"\n        },\n        \"put_value\": {\n            \"type\": \"String\",\n            \"name\": \"put_value\",\n            \"description\": \"Введите значение для замены\"\n        }\n    }\n}',	'calc',	'calc_9.tpl',	''),
(13,	'Среднее значение из подтаблицы в основную запись',	'if($event[\'type\'] === \'delete\'){\n    $not_id = \' and id != \' . $line[\'id\'];\n}\n$res = data_select_field($table[\'id\'],\'COUNT(id) AS cnt, SUM(\' . \'{$cond_field}\' . \') AS sum\',\'status = 0 AND \' . \'{$cond_table.link_field_id}\' . \' = \' . $line[\'{$cond_table.link_field_id}\'][\'raw\'] . $not_id);\nif ($row = sql_fetch_assoc($res)) {\n    $line[\'{$cond_table.link_field_id}\'][\'{$cond_table.field}\'] = $row[\'sum\'] / $row[\'cnt\'];\n} else {\n    $line[\'{$cond_table.link_field_id}\'][\'{$cond_table.field}\'] = 0;\n}\n',	'{\n    \"title\": \"Среднее значение из подтаблицы в основную запись\",\n    \"help\": \"tpl_average\",\n    \"parameters\": {\n        \"cond_table\": {\n            \"type\": \"TableField\",\n            \"name\": \"cond_table\",\n            \"only_parent\": \"true\",\n            \"description\": \"Выберите таблицу, в которую будет записан результат\",\n            \"field_description\": \"Выберите поле, в которое будет записан результат\"\n        },\n        \"cond_field\": {\n            \"type\": \"Field\",\n            \"name\": \"cond_field\",\n            \"type_field\": \"1\",\n            \"description\": \"Выберите поле, по которому будет считаться среднее арифметическое\"\n        }\n    }\n}',	'calc',	'calc_10.tpl',	''),
(14,	'Выбор имени или имени и отчества из ФИО',	'$array = explode(\" \", $line[\'{$cond_field}\']);\nif (\'{$put_value}\' === \'1\') {\n    $line[\'{$cond_field}\'] = $array[\'1\'];\n} else {\n    $line[\'{$cond_field}\'] = $array[\'1\'] . \' \' . $array[\'2\'];\n}',	'{\n    \"title\": \"Выбор имени или имени и отчества из ФИО\",\n    \"help\": \"tpl_explode_name\",\n    \"parameters\": {\n        \"cond_field\": {\n            \"type\": \"Field\",\n            \"name\": \"cond_field\",\n            \"type_field\": \"3\",\n            \"description\": \"Выберите поле, содержащее ФИО\"\n        },\n        \"put_value\": {\n            \"type\": \"List\",\n            \"name\": \"put_value\",\n            \"values\":{\"1\":\"Имя\",\"2\":\"Имя и отчество\"},\n            \"description\": \"Выберите данные, которые останутся в поле.\"\n        }\n    }\n}',	'calc',	'calc_11.tpl',	''),
(17,	'Отмена редактирования поля',	'$line[\'{$field}\'] = $event[\'changed\'][substr(\'{$field}\',1)][\'old\'];',	'{\n    \"title\": \"Отмена редактирования поля\",\n    \"help\": \"Вычисление на отмену редактирования некоторого поля\",\n    \"parameters\": {\n        \"field\": {\n            \"type\": \"Field\",\n            \"name\": \"field\",\n            \"description\": \"Запрет редактирования поля\",\n            \"no_system\": true\n        }\n    }\n}',	'calc',	'disabled_edit_field.tpl',	''),
(18,	'Перевод суммы из числа в текст',	'$line[\'{$field2}\'] = num2str($line[\'{$field1}\'], \"\", \"\", 0, 0, 0, \"\");\n',	'{\n    \"title\": \"Перевод суммы из числа в текст\",\n    \"help\": \"tpl_num_to_text\",\n    \"parameters\": {\n        \"field1\": {\n            \"type\": \"Field\",\n            \"name\": \"field1\",\n            \"type_field\": \"1\",\n            \"description\": \"Выберите исходное поле(число)\",\n            \"no_system\": true\n        },\n        \"field2\": {\n            \"type\": \"Field\",\n            \"name\": \"field2\",\n            \"type_field\": \"3\",\n            \"description\": \"Выберите поле записи суммы (текст)\",\n            \"no_system\": true\n        }\n    }\n}',	'calc',	'intsum_to_stringsum.tpl',	''),
(21,	'Изменение даты на текущую при изменении поля ',	'$line[\'{$field2}\'] = date(\'Y-m-d H:i:s\');',	'{\n    \"title\": \"Изменение даты на текущую при изменении поля\",\n    \"help\": \"tpl_change_date\",\n    \"parameters\": {\n        \"field2\": {\n            \"type\": \"Field\",\n            \"name\": \"field2\",\n            \"description\": \"Выберите поле, в котором будет изменена дата\",\n            \"type_field\": {\"2\":\"2\"}\n        }\n    }\n}',	'calc',	'calc_13.tpl',	''),
(22,	'Очистка поля при изменении/очистке другого',	'$line[\'{$field1}\'] = \'\';',	'{\n    \"title\": \"Очистка поля при изменении/очистке другого\",\n    \"help\": \"tpl_clear_field\",\n    \"parameters\": {\n        \"field1\": {\n            \"type\": \"Field\",\n            \"name\": \"field1\",\n            \"description\": \"Выберите поле для замены значения\",\n            \"no_system\": true\n        }\n    }\n}',	'calc',	'calc_14.tpl',	''),
(23,	'Разница между двумя датами',	'$datetime1 = date_create($line[\'{$field}\']);\n$datetime2 = date_create($line[\'{$field1}\']);\n$interval = date_diff($datetime1, $datetime2);\n$date = $interval->format(\'%a д. %H ч. %I м.\');\n$result = str_replace(\'0 д.,\',\'\',$date);\n$result = str_replace(\'0 м.,\',\'\',$result);\n$result = str_replace(\'0 ч.,\',\'\',$result);\n$line[\'{$value}\'] = $result;',	'{\n    \"title\": \"Разница между двумя датами\",\n    \"help\": \"tpl_diff_dates\",\n    \"parameters\": {\n        \"field\": {\n            \"type\": \"Field\",\n            \"name\": \"field\",\n            \"type_field\": 2,\n            \"description\": \"Выберите поле первой даты\",\n            \"no_system\": true\n        },\n        \"field1\": {\n            \"type\": \"Field\",\n            \"name\": \"field1\",\n            \"type_field\": 2,\n            \"description\": \"Выберите поле второй даты\",\n            \"no_system\": true\n        },\n        \"value\": {\n            \"type\": \"Field\",\n            \"name\": \"value\",\n            \"type_field\": 3,\n            \"description\": \"Выберите поле, в которое сохранять значение\",\n            \"no_system\": true\n        }\n    }\n}',	'calc',	'calc_15.tpl',	''),
(24,	'Сохранение даты изменения поля',	'$field = str_replace(\'f\',\'\', \'{$field}\');\nif (isset($event[\'changed\'][$field])) {\n    $line[\'{$value}\'] = date(\'Y-m-d H:i:s\');\n}',	'{\n    \"title\": \"Сохранение даты изменения поля\",\n    \"help\": \"tpl_date_changed_field\",\n    \"parameters\": {\n        \"field\": {\n            \"type\": \"Field\",\n            \"name\": \"field\",\n            \"description\": \"Выберите поле, которое будет проверяться на изменение\"\n        },\n        \"value\": {\n            \"type\": \"Field\",\n            \"name\": \"value\",\n            \"type_field\": 2,\n            \"description\": \"Выберите поле, в которое сохранять значение\",\n            \"no_system\": true\n        }\n    }\n}',	'calc',	'calc_16.tpl',	''),
(25,	'Сохранение пользователя, который измененил поле',	'$line[\'{$value}\'] = $user[\'id\'];',	'{\n    \"title\": \"Сохранение пользователя, который измененил поле\",\n    \"help\": \"tpl_save_user_changed_field\",\n    \"parameters\": {\n        \"value\": {\n            \"type\": \"Field\",\n            \"name\": \"value\",\n            \"type_field\": 7,\n            \"description\": \"Выберите поле, в которое сохранять значение\",\n            \"no_system\": true\n        }\n    }\n}',	'calc',	'calc_17.tpl',	''),
(26,	'Математические формулы',	'$keys = [];\n$values = [];\n$fields = explode(\'&\', \'{$flex_data}\');\nforeach ($fields as $field => $value) {\n    $parts = explode(\'=\', $value);\n    array_push($keys, $parts[0]);\n    array_push($values, $parts[1]);\n}\n$func_row = str_replace($keys, $values, \'{$func_row}\');\n$keys = [\n  \'{\',\n  \'}\'\n];\n$values = [\n    \'$line[\"\',\n    \'\"]\'\n];\n$func_row = str_replace($keys, $values, $func_row);\n$func = \'$line[\"{$result}\"\"] = \' . $func_row . \';\';\neval($func);\n\n',	'{\n     \"title\": \"Математические формулы\",\n     \"help\": \"tpl_math_formulas\",\n     \"parameters\": {\n         \"field1\": {\n             \"type\": \"Field\",\n             \"name\": \"field1\",\n             \"description\": \"Выберите поле\",\n             \"type_field\": 1\n         },\n         \"func_row\": {\n             \"type\": \"String\",\n             \"name\": \"func_row\",\n             \"description\": \"Поле записи функции\"\n         },\n         \"result\": {\n             \"type\": \"Field\",\n             \"name\": \"result\",\n             \"description\": \"Выберите поле записи результата\",\n             \"type_field\": 1\n         },\n         \"flex_data\": {\n             \"type\": \"String\",\n             \"name\": \"flex_data\",\n             \"description\": \"\"\n         }\n     }\n}\n',	'calc',	'math_functions.tpl',	''),
(28,	'Вычисление на нумерацию',	'if ($event[\'line_id\'] === \'new\') {\n    $res = data_select($table_id,\'status=0 and id!=\' . $line[\'id\'] . \' ORDER BY id DESC LIMIT 1\');\n    $row = sql_fetch_assoc($res);\n    if (date(\'Y\',strtotime($row[\'add_time\'])) >= date(\'Y\')) {\n        $line[\'{$field}\'] = $row[\'{$field}\'] + 1;\n    } else {\n        $line[\'{$field}\'] = 1;\n    }\n}\n',	'{\n    \"title\": \"Вычисление на нумерацию\",\n    \"help\": \"tpl_calc_numeric\",\n    \"parameters\": {\n        \"field\": {\n            \"type\": \"Field\",\n            \"name\": \"field\",\n            \"description\": \"Выберите поле\",\n            \"type_field\": 1\n        }\n    }\n}\n',	'calc',	'autonum.tpl',	'');
EOT;
run_query($sql_query);
$sql_query = 'UPDATE ' . $config["table_prefix"] . 'calc SET expert_mode = 1;';
run_query($sql_query);
$file_path = $config['site_path'] . '/constructs/button/sum_of_two_fields.tpl';
if (file_exists($file_path)) {
    unlink($file_path);
}
$file_path = $config['site_path'] . '/constructs/calc/calc_12.tpl';
if (file_exists($file_path)) {
    unlink($file_path);
}
$file_path = $config['site_path'] . '/constructs/calc/user_select.tpl';
if (file_exists($file_path)) {
    unlink($file_path);
}