This commit is contained in:
Александр Рыбкин 2024-11-20 15:59:13 +03:00
commit f3c0f9d890
6 changed files with 252 additions and 0 deletions

89
Settings.php Normal file
View File

@ -0,0 +1,89 @@
<?php
namespace dominion\settings;
use Yii;
/**
* This is the model class for table "settings".
*
* @property int $id
* @property string $code
* @property string $value
*/
class Settings extends \yii\db\ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'settings';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['code'], 'required'],
[['code'], 'string', 'max' => 500],
[['value'], 'string', 'max' => 5000],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'code' => 'Code',
'value' => 'Value',
];
}
public static function getData($params, $root)
{
$query = self::find();
$root->andWhere($query, $params, ['id', 'code']);
$root->andWhereLike($query, $params, ['value']);
$root->setMetaByQuery($query);
$root->orderBy($query, $params, ['id', 'code', 'value']);
return $root->getItemsByPage($query);
}
/**
* Получить настройки
*
* @param string $code символьный код уникальный
* @param string $defaulValue значение по умолчанию
* @return string
*/
public static function getValue($code, $defaulValue = false)
{
$model = Settings::find()->andWhere(['code' => $code])->one();
return empty($model) ? $defaulValue : $model->value ;
}
/**
* Сохранить настройк
*
* @param type $code
* @param type $value
*/
public static function setValue($code, $value)
{
$model = Settings::find()->andWhere(['code' => $code])->one();
if(empty($model))
{
$model = new Settings;
$model->code = $code;
}
$model->value = (string)$value;
return $model->save();
}
}

21
composer.json Normal file
View File

@ -0,0 +1,21 @@
{
"name": "dominion/settings",
"description": "Функционал для работы с settings",
"type": "yii2-extension",
"keywords": ["yii2","extension"],
"license": "MIT",
"authors": [
{
"name": "Rybkin Sasha",
"email": "ribkin@dominion.ru"
}
],
"require": {
"yiisoft/yii2": "~2.0.0"
},
"autoload": {
"psr-4": {
"dominion\\settings\\": ""
}
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace dominion\settings\schema;
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
use dominion\settings\Settings;
class SettingsMutationType extends ObjectType
{
public function __construct()
{
$config = [
'fields' => function() {
return [
'save' => [
'type' => Type::int(),
'description' => 'Сохранение наклейки',
'args' => [
'code' => Type::nonNull(Type::string()),
'value' => Type::nonNull(Type::string()),
],
'resolve' => function($root, $args) {
return Settings::setValue($args['code'], $args['value']);
},
],
];
}
];
parent::__construct($config);
}
}

View File

@ -0,0 +1,48 @@
<?php
namespace dominion\settings\schema;
use GraphQL\Type\Definition\Type;
use dominion\api\GraphQLSchemaPagination;
use dominion\settings\Settings;
use dominion\api\GraphQLPagination;
class SettingsPaginationType extends GraphQLSchemaPagination
{
public function __construct()
{
$config = [
'fields' => function(){
$output = $this->getCustomFields();
$output['data'] = [
'type' => Type::listOf(Types::settings()),
'description' => 'Настройки',
'args' => GraphQLPagination::argumentModify([
'id' => [
'type' => Type::int(),
'description' => 'Id',
],
'code' => [
'type' => Type::string(),
'description' => 'символьный код',
'modify' => true,
'modifyOption' => ['in'],
],
'sort' => [
'type' => Type::string(),
'description' => 'Сортировка (пример "isNew_asc" или "isVisible_desc")',
],
]),
'resolve' => function($root, $args){
return Settings::getData($args, $root);
}
];
return $output;
}
];
parent::__construct($config);
}
}

34
schema/SettingsType.php Normal file
View File

@ -0,0 +1,34 @@
<?php
namespace dominion\settings\schema;
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
class SettingsType extends ObjectType
{
public function __construct()
{
$config = [
'fields' => function() {
return [
'id' => [
'type' => Type::int(),
'description' => 'Id',
],
'code' => [
'type' => Type::string(),
'description' => 'code',
],
'value' => [
'type' => Type::string(),
'description' => 'value',
],
];
}
];
parent::__construct($config);
}
}

26
schema/Types.php Normal file
View File

@ -0,0 +1,26 @@
<?php
namespace dominion\settings\schema;
trait Types
{
private static $settings;
private static $settingsPagination;
//
private static $settingsMutation;
public static function settings()
{
return self::$settings ?: (self::$settings = new SettingsType());
}
public static function settingsPagination()
{
return self::$settingsPagination ?: (self::$settingsPagination = new SettingsPaginationType());
}
//
public static function settingsMutation()
{
return self::$settingsMutation ?: (self::$settingsMutation = new SettingsMutationType());
}
}