function linked($tablename = false) { if ($tablename == false) { return $this->_options['table']; } //Случай первый: Catalog->_goods (many_to_one): дочерние if ($this->table_exists(strtolower(to_p(get_class($this))))) { $column_name = et(to_o($this->_options['table']) . '_id'); //catalog_id if ($this->column_exists($column_name, $tablename)) { //Получаем массив идентификаторов $ids = $this->fast_all_of('id'); $model = activerecord_factory_from_table($tablename)->where($column_name . ' IN (?)', $ids); return $model; } } else { $column_name = et(strtolower(get_class($this)) . '_id'); //catalog_id if ($this->column_exists($column_name, $tablename)) { //Получаем массив идентификаторов $ids = $this->fast_all_of('id'); $model = activerecord_factory_from_table($tablename)->where($column_name . ' IN (?)', $ids); return $model; } } //Случай третий: Good->_catalogs (one_to_many): родительские if ($this->table_exists($tablename)) { $column_name = et(to_o($tablename) . '_id'); //catalog_id if ($this->column_exists($column_name)) { //Получаем массив идентификаторов $ids = $this->fast_all_of($column_name); $model = activerecord_factory_from_table($tablename)->where('id IN (?)', $ids); return $model; } } else { if (class_exists(to_o($tablename))) { $column_name = et(to_o($tablename) . '_id'); //catalog_id if ($this->column_exists($column_name)) { //Получаем массив идентификаторов $ids = $this->fast_all_of($column_name); $model = activerecord_factory_from_table($tablename)->where('id IN (?)', $ids); return $model; } } } //Случай второй: Catalog->goods (many_to_many) //Случай непонятный return ''; }
function admin_save_data($params) { if (!iam_allow(url(3))) { return 'Вам запрещён доступ к этому разделу.'; } //TODO: Новое API для добавление новых элементов в базу данных; $elemid = url(4); $scenario = 0; if (isset($_POST['_scenario']) && $_POST['_scenario'] == 'add') { $scenario = 2; } if (isset($_POST['_scenario']) && $_POST['_scenario'] == 'edit') { $scenario = 1; } $orig_params = $params; $iterations = array(); if (isset($_POST['_enable_multiple']) && $_POST['_enable_multiple'] == '1' && url(4) == 'add') { $images = explode(';', $params['image']); foreach ($images as $image) { $params_row = $orig_params; $params_row['image'] = $image; $iterations[] = $params_row; } } else { $iterations[0] = $params; } //FIXME: костыль foreach ($iterations as $params) { $elemid = url(4); if ($elemid == 'add') { if (substr(url(3), -8) == '__fields' && isset($params['field_name']) && $params['field_name'] != '') { if (!preg_match('/^[a-z]+[a-z0-9_]+$/', $params['field_name'])) { d()->_field_name_error_situation = true; d()->_field_name_error = 'Поле должно начинаться с буквы, содержать только латинские буквы и цифры.'; return d()->view(); } if (strlen($params['field_name']) > 75) { d()->_field_name_error_situation = true; d()->_field_name_error = 'Длина поля должна быть менее 80 символов.'; return d()->view(); } if (substr($params['field_name'], 0, 8) == 'deleted_') { d()->_field_name_error_situation = true; d()->_field_name_error = 'Поле не должно начинаться с deleted_ во избежания проблем в будущем.'; return d()->view(); } //Проверка на уже существующий столбец в базе данных полей (метаинформации) if (count(d()->db->query('select * from ' . et(url(3)) . ' where field_name = ' . e($params['field_name']))->fetchAll()) != 0) { d()->_field_name_error_situation = true; d()->_field_name_error = 'Такое поле уже есть.'; return d()->view(); } //Проверка на существование поля в искомой таблице $tablename = substr(url(3), 0, -8); $res = d()->db->query('select * from ' . et($tablename) . ' limit 0'); for ($i = 0; $i < $res->columnCount(); $i++) { $col = $res->getColumnMeta($i); $columns[] = $col['name']; } $columns = array_flip($columns); if (isset($columns[$params['field_name']])) { d()->_field_name_error_situation = true; d()->_field_name_error = 'Вы не можете управлять этим полем.'; return d()->view(); } } } if ($elemid == 'add' || $scenario == '2') { // $params['sort']=$elemid; //Добавление элементов - делаем малой кровью - предварительно создаём строку в таблице $model = activerecord_factory_from_table(et(url(3)), '_safe')->new; $model->save(); //d()->db->exec("insert into `".et(url(3))."` () values ()"); $elemid = $model->insert_id; } if ($scenario == '1') { //Добавление элементов - делаем малой кровью - предварительно создаём строку в таблице $result = d()->db->query("select * from `" . et(url(3)) . "` where `url` = " . e(url(4)) . ""); if ($result) { $line = $result->fetch(); $elemid = $line['id']; } else { // d()->db->exec("insert into `".et(url(3))."` () values ()"); // $elemid=d()->db->lastInsertId(); $model = activerecord_factory_from_table(et(url(3)), '_safe')->new; $model->save(); $elemid = $model->insert_id; } } if (substr(url(3), -8) == '__fields' && url(4) == 'add' && (!isset($params['field_name']) || $params['field_name'] == '')) { $params['field_name'] = 'field' . $elemid; } //FIXME: костыль if (isset($params['url'])) { if ($params['url'] == '') { $params['url'] = to_o(url(3)) . $elemid; } if (substr($params['url'], 0, 1) == '/') { $params['url'] = substr($params['url'], 1); } //$params['url']=str_replace('/','_',$params['url']); } /* $result_str="update `".et(url(3))."` set "; */ $i = 0; $options_field = array(); foreach ($params as $key => $value) { if (preg_match('/\\<img\\ssrc=\\"\\/cms\\/external\\/tiny_mce\\/plugins\\/mymodules\\/module\\.php\\?[\\@\\-\\_0-9a-z\\=A-Z\\&]+\\".[^\\>]*\\>/', $value)) { $options_field[$key] = 1; } } if (count($options_field) != 0) { $params['admin_options'] = serialize($options_field); } else { $params['admin_options'] = ''; } $model = activerecord_factory_from_table(et(url(3)), '_safe')->find($elemid); foreach ($params as $field_name => $value) { $model->{$field_name} = $value; } $model->save(); if (substr(url(3), -8) == '__fields' && url(4) == 'add') { //Добавление столбца в таблицу $tablename = substr(url(3), 0, -8); d()->Scaffold->create_field($tablename, $params['field_name']); } } /* //Устаревший вариант, комментарий будет удалён в ближайших версиях //todo: обеспечить в API foreach($params as $key=>$value) { $i++; if (substr($key,-3)=='_id' && $value == '') { $result_str.=" `" . $key . "`= NULL "; } else { $result_str.=" `" . $key . "`= ".e($value)." "; } if ($i<count($params)) $result_str.=' , '; } $result_str.=" where `id`=".(int)($elemid); $not_reqursy=0; doitClass::$instance->db->exec($result_str); $error_code=doitClass::$instance->db->errorInfo(); $error_code=$error_code[1]; if (1054 == $error_code) { $_res=doitClass::$instance->db->query('SHOW COLUMNS FROM `'.et(url(3)).'`'); $list_of_existing_columns=array(); foreach ($_res->fetchAll(PDO::FETCH_NUM) as $_tmpline) { $list_of_existing_columns[] = $_tmpline[0]; } foreach($params as $value=>$key){ if(!in_array($value,$list_of_existing_columns)){ doitClass::$instance->Scaffold->create_field(et(url(3)),$value); } } doitClass::$instance->db->exec($result_str); } */ if (isset($_POST['_save_and_add'])) { print ' <script> parent.$(".js-iframe-flyer").css("top","20%"); setTimeout(function(){ parent.$(".js-iframe-flyer").css("top","-50%"); },2000); parent.$(".admin_edit_form").removeAttr("target"); </script>'; exit; } if ($_POST['admin_command_redirect_close'] == 'yes') { $tableortype = url(3); if (isset($_GET['type']) && $_GET['type'] != '') { $tableortype = to_p($_GET['type']); } if (isset($_GET['fields']) && $_GET['fields'] != '') { $tableortype = $_GET['fields']; } d()->load_and_parse_ini_file('app/fields/' . $tableortype . '.ini'); if (isset(d()->admin['urlredirect']) && url(4) != 'add') { return "<script> window.opener.document.location.href='" . d()->admin['urlredirect'] . h($params['url']) . "';window.open('','_self','');window.close();</script>"; } else { return "<script> window.opener.document.location.href=window.opener.document.location.href;window.open('','_self','');window.close();</script>"; } } else { header('Location: ' . $_POST['_http_referer']); exit; } }
/** * Склонение числительных * * <code> * declOfNum(4, array('помидор', 'помидора', 'помидоров') * </code> * * @param $number * @param $titles * @return string */ function declOfNum($number, $words = false, $word2 = false, $word3 = false) { if (is_array($number)) { $arr = $number; $number = $arr[0]; if (isset($arr[1])) { $words = $arr[1]; } if (isset($arr[2])) { $word2 = $arr[2]; } if (isset($arr[3])) { $word3 = $arr[3]; } } $words_result = $words; $checks = array(2, 0, 1, 1, 1, 2); if (is_string($words) && is_string($word2) && is_string($word3)) { $words_result = array($words, $word2, $word3); } if (is_string($words) && $word2 == false) { //Режим магии $word1 = $words; $word2 = $words; $word3 = $words; if (preg_match('#[a-z]#i', $word1)) { if ($number == 1) { return $word1; } else { return to_p($word1); } } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ий') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ия'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'иев'; } elseif ($word1 == 'человек') { $word2 = 'человека'; $word3 = 'человек'; } elseif ($word1 == 'раз') { $word2 = 'раза'; $word3 = 'раз'; } elseif (mb_substr($word1, -4, 4, "UTF-8") == 'деец') { $word2 = mb_substr($word1, 0, -4, "UTF-8") . 'дейца'; $word3 = mb_substr($word1, 0, -4, "UTF-8") . 'дейцев'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'еец') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'ейца'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'йцев'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'аец') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'айца'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'айцев'; } elseif (mb_substr($word1, -4, 4, "UTF-8") == 'анец') { $word2 = mb_substr($word1, 0, -4, "UTF-8") . 'анца'; $word3 = mb_substr($word1, 0, -4, "UTF-8") . 'анцев'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'нец') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'нца'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'нцов'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'оец') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'ойца'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'ойцов'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'дец') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'дца'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'дцов'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ец') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ца'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'цев'; } elseif (mb_substr($word1, -1, 1, "UTF-8") == 'р') { $word2 = mb_substr($word1, 0, -1, "UTF-8") . 'ра'; $word3 = mb_substr($word1, 0, -1, "UTF-8") . 'ров'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'во') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ва'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'в'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ло') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ла'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'л'; } elseif (mb_substr($word1, -1, 1, "UTF-8") == 'о') { $word2 = mb_substr($word1, 0, -1, "UTF-8") . 'а'; $word3 = mb_substr($word1, 0, -1, "UTF-8") . 'ов'; } elseif (mb_substr($word1, -1, 1, "UTF-8") == 'ц') { $word2 = mb_substr($word1, 0, -1, "UTF-8") . 'ца'; $word3 = mb_substr($word1, 0, -1, "UTF-8") . 'цев'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'век') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'века'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'веков'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ек') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ка'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'ков'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ёк') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ька'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'ьков'; } elseif (in_array(mb_substr($word1, -1, 1, "UTF-8"), array('б', 'в', 'г', 'д', 'ж', 'з', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ч', 'ш', 'щ'))) { $word2 = $word1 . 'а'; $word3 = $word1 . 'ов'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'сь') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'си'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'сей'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ть') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ти'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'тей'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'ень') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'ня'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'ней'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'нь') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ни'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'ней'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'брь') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'бря'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'брей'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'рь') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ри'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'рей'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ль') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ли'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'лей'; } elseif (mb_substr($word1, -1, 1, "UTF-8") == 'ь') { $word2 = mb_substr($word1, 0, -1, "UTF-8") . 'я'; $word3 = mb_substr($word1, 0, -1, "UTF-8") . 'ей'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'цы') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ц'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'ц'; } elseif (mb_substr($word1, -1, 1, "UTF-8") == 'ы') { $word2 = mb_substr($word1, 0, -1, "UTF-8") . 'ов'; $word3 = mb_substr($word1, 0, -1, "UTF-8") . 'ов'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ия') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ии'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'ий'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'еля') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'ели'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'ель'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ля') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ли'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'лей'; } elseif (mb_substr($word1, -1, 1, "UTF-8") == 'я') { $word2 = mb_substr($word1, 0, -1, "UTF-8") . 'и'; $word3 = mb_substr($word1, 0, -1, "UTF-8") . 'ь'; } elseif (mb_substr($word1, -3, 3, "UTF-8") == 'ька') { $word2 = mb_substr($word1, 0, -3, "UTF-8") . 'ьки'; $word3 = mb_substr($word1, 0, -3, "UTF-8") . 'ек'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ка') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ки'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'к'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'га') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ги'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'г'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ча') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'чи'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'ч'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'жа') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'жи'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'ж'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ша') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'ши'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'ш'; } elseif (mb_substr($word1, -2, 2, "UTF-8") == 'ща') { $word2 = mb_substr($word1, 0, -2, "UTF-8") . 'щи'; $word3 = mb_substr($word1, 0, -2, "UTF-8") . 'щ'; } elseif (mb_substr($word1, -1, 1, "UTF-8") == 'а') { $word2 = mb_substr($word1, 0, -1, "UTF-8") . 'ы'; $word3 = mb_substr($word1, 0, -1, "UTF-8") . ''; } elseif (mb_substr($word1, -1, 1, "UTF-8") == 'и') { $word2 = mb_substr($word1, 0, -1, "UTF-8") . 'ов'; $word3 = mb_substr($word1, 0, -1, "UTF-8") . 'ов'; } elseif (mb_substr($word1, -1, 1, "UTF-8") == 'е') { $word2 = mb_substr($word1, 0, -1, "UTF-8") . 'я'; $word3 = mb_substr($word1, 0, -1, "UTF-8") . 'й'; } $words_result = array($word1, $word2, $word3); } return $words_result[$number % 100 > 4 && $number % 100 < 20 ? 2 : $checks[min($number % 10, 5)]]; }