Exemple #1
0
 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 '';
 }
Exemple #2
0
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;
    }
}
Exemple #3
0
/**
 * Склонение числительных
 *
 * <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)]];
}