Commit 7c804b3c authored by Telenkov Ruslan's avatar Telenkov Ruslan

ALL TAASK

parent 3e60c79b
......@@ -17,6 +17,7 @@
"drupal/backup_migrate": "^5.0",
"drupal/better_exposed_filters": "^5.0",
"drupal/bootstrap": "^3.24",
"drupal/commerce": "^2.30",
"drupal/config_ignore": "^2.3",
"drupal/config_pages": "^2.9",
"drupal/core": "^9.1",
......
This diff is collapsed.
......@@ -36,14 +36,11 @@ use Drupal\Core\Datetime\Element\Datetime;
foreach ($context['sandbox']['items'] as $row_item) {
//если счетчик не достиг лимита то закидываем каждый элемент
if ($counter != $limit) {
// $this->processItem($row_item,$service);
self::processItem($row_item,$service);
$counter++;
$count++;
$context['sandbox']['progress']++;
// $context['message'] = $this->t('Now processing node' . $counter);
// $context['message'] = t('Now processing Batch API overview', array('Batch API overview' => $counter));
$context['message'] = t('Now processing node :progress of :count', [
':progress' => $context['sandbox']['progress'],
':count' => $context['sandbox']['max'],
......@@ -60,6 +57,7 @@ use Drupal\Core\Datetime\Element\Datetime;
// Increment total processed item values. Will be used in finished
// callback.
$context['results']['processed'] += $count;
//изначально финиш равен 1, если я уберу условие то цикл 1 раз пройдет, пока финиш меньше он будет вновь и вновь заходить
// If not finished all tasks, we count percentage of process. 1 = 100%.
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
......
......@@ -39,40 +39,41 @@ class BatchCommands extends DrushCommands
*/
public function goApi($date = null)
{
//дата 0 - не ввели дату
if ($date === null){
$this->output()->writeln('Вы не ввели дату');
}
else {
$timestamp = strtotime($date);
$service = \Drupal::service('myservice.my');
$request = $service->getResult('https://swapi.dev/api/');
foreach ($request as $api_url) {
$timestamp = strtotime($date); //перевод даты в нужный формат
$service = \Drupal::service('myservice.my'); //обраение к сервису
$request = $service->getResult('https://swapi.dev/api/'); // получение адресов апи
foreach ($request as $api_url) { //цикл для каждого url апишки
$url = $api_url;
do {
$request_items = $service->getResult($url);
$result_items = $request_items->results; // выкинул служебную информацию
$request_items = $service->getResult($url); // обращаюсь к сервису, получаю уже на основе точного url элементы
$result_items = $request_items->results; // выкинул служебную информацию, более структурировано выглядит
foreach ($result_items as $row_item) {
foreach ($result_items as $row_item) { //прохожусь по каждому элементу
$timestamp_swapi = strtotime($row_item->edited);
if ($timestamp < $timestamp_swapi) {
$timestamp_swapi = strtotime($row_item->edited); // получаю дату со свапи
if ($timestamp < $timestamp_swapi) { //если дата меньше чем дата свапи, делаею дальнейшую обработку элемента
$type = $service->nodeType($row_item->url); // получаю ID ноды для дальнейшей проверки из БД
$id = $service->nodeId($row_item->url); // получаю тип ноды для дальнейшей проверки из БД
$nids = $service->existNode($type, $id); // вызываю функцию проверки ноды в БД, если есть, то вернется ID
$this->output()->writeln('Обработана сущность: ' . $type . $id);
$this->output()->writeln('Обработана сущность: ' . $type . $id); // более корректный вывод в самой команде
if (empty($nids)) {
$service->createNode($row_item); // вызываю метод создания ноды из сервиса
$service->updateNode($row_item);
$service->updateNode($row_item); // сразу апдейт, чтобы 2 раза не запускать прогу , если нод реферанца нет - создат и свяжет ТОЛЬКО на нужную референц
} else {
$service->updateNode($row_item);
}
}
}
$url = $request_items->next;
$url = $request_items->next; // меняем УРЛ чтобы перейти на следующую страницу в апи
} while ($url);
} while ($url); // пока есть урл, т е пока у меня есть следующая страница
}
}
}
......
......@@ -120,7 +120,7 @@ class DrushSettingsForm extends FormBase {
/**
* Processor for batch operations.
*/
public function processItems($items,array &$context) {
/* public function processItems($items,array &$context) {
// Elements per operation.
$limit = 5;
......@@ -191,10 +191,11 @@ class DrushSettingsForm extends FormBase {
$service->updateNode($row_item);
}
}
*/
/**
* Finished callback for batch.
*/
/*
public function finished($success, $results, $operations) {
$message = $this->t('Number of nodes affected by batch: @count', [
'@count' => $results['processed'],
......@@ -202,5 +203,5 @@ class DrushSettingsForm extends FormBase {
$this->messenger()
->addStatus($message);
}
*/
}
......@@ -15,6 +15,7 @@ function formApi_theme($existing, $type, $theme, $path) {
* Обработчик переменных для первого примера.
*/
function template_preprocess_form_theme(&$variables) {
$myConfigPage = \Drupal\config_pages\Entity\ConfigPages::config('custom_config');
$variables['string_modal'] = $myConfigPage->get('field_modal_title')->value;
$current_user = \Drupal::currentUser();
......
......@@ -88,7 +88,7 @@ class FormApiTask extends FormBase {
//ВАЛИДАЦИЯ адреса сайта
//она зависит от того, выбрал ли я нужную радиокнопку. Если выбрано "у меня нет сайта" , то валидация не нужна
if ($form_state->getValue('radio') === '1') {
if ($form_state->getValue('radio') === '1') { //выбрал "У меня есть сайт"
$reg = '/(https?:\/\/)?(www.)?([\da-z\.-]+)\.([a-z\.]{2,6})/ui';
if (preg_match($reg, $form_state->getValue('site_address'), $array_of_site_address)) {
// Если пользователь повторно ввел все нормально в это поле, то при сабмите сбросим красную рамку
......@@ -173,9 +173,6 @@ class FormApiTask extends FormBase {
$response->addCommand(new AddCssCommand($style));
}
//после валидации обращаюсь к БД и заполняю поля у таблицы
if ($valid_email && $valid_name && ($valid_site_address || $radio)){
......
......@@ -25,12 +25,11 @@ class DrupalLocalTask {
}
public function swapi($node){
$perms = array_keys(\Drupal::service('user.permissions')->getPermissions());
// $perms = array_keys(\Drupal::service('user.permissions')->getPermissions());
$type = $node->getType();
$id = $node->get('field_swapi_id')->value;
$conc = 'https://swapi.dev/api/'.$type.'/'.$id.'/';
$request = $this->getResult($conc);
// $request = json_encode($request);
return [
'#markup' => $request,
......
......@@ -112,7 +112,7 @@ class MyService
// проверяю, если у ноды есть связанная сущность
$array_of_related_fields = ['species','films', 'starships', 'vehicles' , 'characters' , 'planets' , 'pilots' , 'people', 'residents' ];
//foreach ($row_item as $key => $value){
foreach ($array_of_related_fields as $related_field){
if (!empty($row_item->related_field)){
$array = $row_item->$related_field;
......@@ -215,7 +215,7 @@ class MyService
$node = Node::create(array(
'type' => 'people' ,
'title' => $data->name,
//'field_swapi_id' => $node_id,
'field_swapi_id' => $node_id,
'field_name' =>$data->name,
'field_height' =>$data->height,
'field_mass' =>$data->mass,
......
......@@ -5,7 +5,9 @@ use Drupal\node\NodeInterface;
/**
* Implements hook_node_access().
*/
//хук для сокрытия кнопки редактирования для пользователей, которох нет в данной ноде в поле редакторы
function role_node_access(\Drupal\node\NodeInterface $node, $op, \Drupal\Core\Session\AccountInterface $account) {
//получаю тип ноды текущей
$type = $node
->bundle();
......@@ -15,6 +17,7 @@ function role_node_access(\Drupal\node\NodeInterface $node, $op, \Drupal\Core\Se
$uid_role = $node->get('field_role')->target_id;
// id текущего пользователя
$uid_now = $account->id();
//сравниваю айдишники и если равны то разрешаю доступ на редактирование
if ($uid_now == $uid_role) {
return AccessResult::allowed();
}
......@@ -28,22 +31,24 @@ function role_node_access(\Drupal\node\NodeInterface $node, $op, \Drupal\Core\Se
/**
* Implements hook_form_alter().
*/
function role_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
// если у меня форма редактирования ноды - редакторы это поле не видят и не могут менять
if ($form_id == 'node_editor_edit_form') {
$current_user = \Drupal::currentUser();
if (in_array('redaktory', $current_user->getRoles())){
$form['field_role']['#access'] = false;
$form['field_role']['#access'] = false; // запрещаю доступ к полю
}
}
if ($form_id == 'node_editor_form') {
if ($form_id == 'node_editor_form') { // если форма создания ноды - так же запрещаю видеть это поле редакторам
$current_user = \Drupal::currentUser();
if (in_array('redaktory', $current_user->getRoles())){
$form['field_role']['#access'] = false;
}
}
}
// хук позволяет вставить текущего редактора в поле, ведь у меня поле редактора скрыто
function role_node_insert(Drupal\Core\Entity\EntityInterface $entity)
{
$current_user = \Drupal::currentUser();
......
......@@ -99,7 +99,7 @@ class GetUserByEmailResource extends ResourceBase {
'prev_page' => FALSE,
];
// page = 0;
// смоттрю параметры лимита и страницы которые передал пользователь и если они не переданы то выставляю дефолт
// получаю параметры текущей страницы из запроса пользователя, если нет то выставляю дефолтные значения
$request = \Drupal::request();
$request_query = $request->query;
$request_query_array = $request_query->all();
......@@ -108,9 +108,13 @@ class GetUserByEmailResource extends ResourceBase {
// Find out how many articles do we have.
// Узнаю, сколько всего у меня людей на сайте и устанавливаю предыдущую и следующую страницу
//колличество людей на сайте
$query = \Drupal::entityQuery('node')->condition('type', 'people');
$articles_count = $query->count()->execute();
// текущая позиция - лимит с шагом в 10
$position = $limit * ($page + 1);
//если колличество людей больше текущей позиции - задаю следующую страницу, получаю ее урл
if ($articles_count > $position) {
$next_page_query = $request_query_array;
$next_page_query['page'] = $page + 1;
......@@ -121,7 +125,7 @@ class GetUserByEmailResource extends ResourceBase {
}
$response['count'] = $articles_count;
// если мы перешли на следующую страницу - нужно сделать предыдущую по аналогии
if ($page > 0) {
$prev_page_query = $request_query_array;
$prev_page_query['page'] = $page - 1;
......@@ -248,11 +252,12 @@ foreach ($person_homeworld as $p_h){
}
try {
// для каждого персонажа
foreach ($data as $row){
//делаю запрос в БД для того чтобы узнать колличество нод которые у меня на сайте
$query = \Drupal::entityQuery('node')->condition('type', 'people');
$articles_count = $query->count()->execute();
++$articles_count;
++$articles_count; //нужно для свапи айди
$node = Node::create(array(
'type' => 'people' ,
'title' => $row['name'],
......@@ -268,10 +273,10 @@ foreach ($person_homeworld as $p_h){
'langcode' => 'ru',
'status' => 1,
));
// прохожусь по данным о фильме - айдишник и название
foreach ($row['films'] as $film){
foreach ($film as $key => $value){
$array_films_keys[] = $key;
$array_films_keys[] = $key; // вытягиваю айдишник
}
}
foreach ($row['species'] as $specie){
......
......@@ -5,16 +5,20 @@ use Drupal\Core\Cache\CacheableMetadata;
function mytheme_preprocess_node__people__full(&$variables)
{
//задаю кеш контекст для кеширования с разными параметрами
$variables['#cache'] = ([
'contexts' => ['url.query_args'],
]);
//проверяю вызываю параметр введеный пользователем
$param = \Drupal::request()->query;
$key = $param->get('tab');
$variables['test'] = false;
//если параметр равен films - вызываю код js который делает клик на таб фильмов
if ($key == 'films'){
$variables['#attached']['library'][] = 'mytheme/test';
}
// задаю переменные, которые являются полями ноды текущей
$variables['name'] = $variables['elements']['#node']->get('field_name')->value;
$variables['height'] = $variables['elements']['#node']->get('field_height')->value;
$variables['mass'] = $variables['elements']['#node']->get('field_mass')->value;
......@@ -23,12 +27,13 @@ function mytheme_preprocess_node__people__full(&$variables)
$variables['eye_color'] = $variables['elements']['#node']->get('field_eye_color')->value;
$variables['birth_year'] = $variables['elements']['#node']->get('field_birth_year')->value;
$variables['gender'] = $variables['elements']['#node']->get('field_gender')->value;
//получаю заголовок связанной сущности родной планеты
$homeworld_array = $variables['elements']['#node']->field_homeworld->referencedEntities();
foreach ($homeworld_array as $key => $value){
$value = $value->getTitle();
}
$variables['homeworld'] = $value;
//получаю заголовок связанной сущности фильмов, закидыаю в массив, чтобы правильно вывести в шаблне уже
$films_array = $variables['elements']['#node']->field_films->referencedEntities();
foreach ($films_array as $key => $value){
$value_films[] = $value->getTitle();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment