예제 #1
0
파일: T1_now.php 프로젝트: 4gekkman/M3
 public function handle()
 {
     /**
      * Оглавление
      *
      *  1. Выполнить команду
      *  2. В случае неудачи, вывести текст ошибки
      *  3. В случае успеха, вывести соотв.сообщение
      *
      */
     // 1. Выполнить команду
     $result = runcommand('\\M3\\Commands\\C1_now', ['utcoffset' => $this->option('utcoffset')]);
     // 2. В случае неудачи, вывести текст ошибки
     if ($result['status'] != 0) {
         $this->error('Error: ' . $result['data']);
         return;
     }
     // 3. В случае успеха, вывести время
     $this->info($result['data']['carbon']->toDateTimeString() . ' UTC' . $result['data']['utcoffset']);
 }
예제 #2
0
 public function handle()
 {
     /**
      * Оглавление
      *
      *  1. Выполнить команду
      *  2. В случае неудачи, вывести текст ошибки
      *  3. В случае успеха, вывести соотв.сообщение
      *
      */
     // 1. Выполнить команду
     $result = runcommand('\\M2\\Commands\\C2_limitator');
     // 2. В случае неудачи, вывести текст ошибки
     if ($result['status'] != 0) {
         $this->error('Error: ' . $result['data']);
         return;
     }
     // 3. В случае успеха, вывести соотв.сообщение
     $this->info("Success");
 }
예제 #3
0
 public function handle()
 {
     /**
      * Оглавление
      *
      *  1. Получить входящие аргументы
      *  2. Преобразовать $msg в строку
      *  3. Провести валидацию
      *  4. Добавить новую запись в лог
      *  5. Добавить в M2_tags те теги, которых там ещё нет
      *  6. Связать запись $newnote со всеми тегами из $tags
      *  7. Применить заданные в настройках ограничения на объем хранимых в логе данных
      *
      *  N. Вернуть статус 0
      *
      */
     //---------------------------------------------------------//
     // Добавить запись в лог, связать с тегами, если требуется //
     //---------------------------------------------------------//
     $res = call_user_func(function () {
         try {
             DB::beginTransaction();
             // 1. Получить входящие аргументы
             $msg = $this->data['msg'];
             $tags = $this->data['tags'] == 'empty' ? [] : $this->data['tags'];
             // 2. Преобразовать $msg в строку
             switch (gettype($msg)) {
                 case 'boolean':
                     $msg = '(boolean) ' . $msg;
                     break;
                 case 'integer':
                     $msg = '(integer) ' . $msg;
                     break;
                 case 'double':
                     $msg = '(double) ' . $msg;
                     break;
                 case 'string':
                     $msg = '(string) ' . $msg;
                     break;
                 case 'array':
                     $msg = '(array) ' . json_encode($msg, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
                     break;
                 case 'object':
                     $msg = '(object) ' . json_encode($msg, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
                     break;
                 case 'resource':
                     $msg = '(resource) ' . 'write2log не может преобразовать переменную типа resource в строку';
                     break;
                 case 'NULL':
                     $msg = 'NULL';
                     break;
                 case 'unknown type':
                     $msg = '(unknown type) ' . 'write2log не может преобразовать переменную типа unknown type в строку';
                     break;
                 default:
                     $msg = 'write2log не может преобразовать переменную не опознанного типа в строку';
                     break;
             }
             // 3. Провести валидацию
             // Сообщение
             //if( !preg_match("/^[0-9а-яА-ЯёЁa-zA-Z-\/\\\\_!№@#$&:=()\[\]{}*%?\"'`.,\r\n +->\"]*$/ui", $msg) )
             //  throw new \Exception('При добавлении записи в лог произошла ошибка, сообщение не прошло влидацию.');
             // Теги
             foreach ($tags as $tag) {
                 if (!preg_match("/^[0-9а-яА-ЯёЁa-zA-Z-\\/\\\\_!№@#\$&:=()\\[\\]{}*%?\"'`.,\r\n +-]*\$/ui", $tag)) {
                     throw new \Exception('При добавлении записи в лог произошла ошибка, один из тегов не прошел влидацию.');
                 }
             }
             // 4. Добавить новую запись в лог
             // 4.1. Если класса \M2\Models\MD1_log не существует
             // - Сообщить и завершить
             if (!class_exists('\\M2\\Models\\MD1_log')) {
                 throw new \Exception('Класс "\\M2\\Models\\MD1_log" не существует.');
             }
             // 4.2. Создать новый eloquent-объект
             $newnote = new \M2\Models\MD1_log();
             // 4.3. Наполнить $newnote
             $newnote->message = $msg;
             // 4.4. Сохранить $newnote в БД
             $newnote->save();
             // 4.5. Получить ID новой записи
             $newnote_id = $newnote->id;
             // 5. Добавить в M2_tags те теги, которых там ещё нет
             // - Все теги приводить к нижнему регистру
             // 5.1. Получить коллекцию всех тегов из БД в виде массива
             $tags_in_db = \M2\Models\MD2_tags::all()->toArray();
             // 5.2. Вычислить расхождения массивов $tags с $tags_in_db
             // - Все сравнения проводить в нижнем регистре
             // - В нём будут те теги из $tags, которых в БД ещё нет
             $result_arr = [];
             foreach ($tags as $tag) {
                 $is = 0;
                 foreach ($tags_in_db as $tag_in_db) {
                     if (mb_strtolower($tag) == mb_strtolower($tag_in_db['tagname'])) {
                         $is = 1;
                         break;
                     }
                 }
                 if (!$is) {
                     array_push($result_arr, $tag);
                 }
             }
             // 5.3. Добавить теги из $result_arr в БД, в таблицу тегов
             foreach ($result_arr as $newtagname) {
                 // 1] Создать новый eloquent-объект настроек
                 $newtag = new \M2\Models\MD2_tags();
                 // 2] Наполнить $newtag
                 $newtag->tagname = mb_strtolower($newtagname);
                 $newtag->description = '';
                 $newtag->color = '#000';
                 $newtag->priority = 0;
                 // 3] Сохранить $newtag в БД
                 $newtag->save();
             }
             // 6. Связать запись $newnote со всеми тегами из $tags
             // 6.1. Получить массив ID всех тегов из $tags из БД
             $tags_ids = \M2\Models\MD2_tags::whereIn('tagname', $tags)->lists('id');
             // 6.1. Связать
             foreach ($tags_ids as $tagid) {
                 $newnote->tags()->attach($tagid);
             }
             // 7. Применить заданные в настройках ограничения на объем хранимых в логе данных
             runcommand('\\M2\\Commands\\C2_limitator');
             DB::commit();
         } catch (\Exception $e) {
             $errortext = 'Invoking of command C1_write2log from M-package M2 have ended with error: ' . $e->getMessage();
             DB::rollback();
             Log::info($errortext);
             return ["status" => -2, "data" => $errortext];
         }
     });
     if (!empty($res)) {
         return $res;
     }
     //---------------------//
     // N. Вернуть статус 0 //
     //---------------------//
     return ["status" => 0, "data" => ""];
 }
예제 #4
0
파일: T4_clear.php 프로젝트: 4gekkman/M2
 public function handle()
 {
     /**
      * Оглавление
      *
      *  1. Выполнить команду
      *  2. В случае неудачи, вывести текст ошибки
      *  3. В случае успеха, вывести соотв.сообщение
      *
      */
     // 1. Выполнить команду
     $this->info('Произвожу полную очистку лога...');
     $result = runcommand('\\M2\\Commands\\C3_clear');
     // 2. В случае неудачи, вывести текст ошибки
     if ($result['status'] != 0) {
         $this->error('Error: ' . $result['data']);
         return;
     }
     // 3. В случае успеха, вывести соотв.сообщение
     $this->info("Очистка завершена успешно");
 }
예제 #5
0
 public function handle(\R2\Event $event)
 {
     /**
      * Оглавление
      *
      *  A. Проверить ключи и получить входящие данные
      *
      *  1.
      *  2.
      *
      *  X. Вернуть результат
      *
      */
     //--------------------//
     // A. Проверить ключи //
     //--------------------//
     try {
         // 1.1. Получить ключи, присланные с событием
         $eventkeys = $event->data['keys'];
         // 1.2. Получить ключи, поддерживаемые обработчиком
         $handlerkeys = ["m2:write2log"];
         // 1.3. Если ни один ключ не подходит, завершить
         $testkeys = array_intersect($handlerkeys, $eventkeys);
         if (empty($testkeys)) {
             return;
         }
         // 1.4. Получить входящие данные
         $data = $event->data;
     } catch (\Exception $e) {
         $errortext = 'Keys checking in event handler H1_catch2log of M-package M2 have ended with error: ' . $e->getMessage();
         Log::info($errortext);
         write2log($errortext, ['M1', 'parseapp']);
         return ["status" => -2, "data" => $errortext];
     }
     //---------------------------------------------------//
     // Выполнить команду, добавляющую новую запись в лог //
     //---------------------------------------------------//
     $res = call_user_func(function () use($event) {
         try {
             // 1] Получить сообщение и массив с тегами
             $msg = $event->data['msg'];
             $tags = $event->data['tags'];
             // 2] Сформировать массив аргументов для команды
             $args = ['msg' => $msg, 'tags' => $tags];
             // 3] Выполнить команду, добавляющую новую запись в лог
             runcommand('\\M2\\Commands\\C1_write2log', $args);
         } catch (\Exception $e) {
             $errortext = 'Invoking of event handler H1_catch2log of M-package M2 have ended with error: ' . $e->getMessage();
             Log::info($errortext);
             return ["status" => -2, "data" => $errortext];
         }
     });
     if (!empty($res)) {
         return $res;
     }
     //----------------------//
     // X. Вернуть результат //
     //----------------------//
     return ["status" => 0, "data" => ""];
 }
예제 #6
0
 public function handle()
 {
     // 1. Получить дату и время с UTC-смещением, указанным в настрйоках
     $results = runcommand('\\M3\\Commands\\C1_now', [])['data'];
     // 2. Возбудить вещательнео событие
     return Event::fire(new \R2\Broadcast(['channels' => ['m3:now'], 'queue' => 'time', 'utcoffset' => $results['utcoffset'], 'year' => $results['year'], 'month' => $results['month'], 'day' => $results['day'], 'hour' => $results['hour'], 'minute' => $results['minute'], 'second' => $results['second']]));
 }
예제 #7
0
 public function handle()
 {
     /**
      * Оглавление
      *
      *  1. Выполнить команду
      *  2. В случае неудачи, вывести текст ошибки
      *  3. В случае успеха, вывести соотв.сообщение
      *
      */
     // 1. Выполнить команду
     $result = runcommand('\\M2\\Commands\\C1_write2log', ['msg' => $this->argument('msg'), 'tags' => $this->argument('tags')], 0, ['on' => true, 'delaysecs' => '']);
     // 2. В случае неудачи, вывести текст ошибки
     if ($result['status'] != 0) {
         $this->error('Error: ' . $result['data']);
         return;
     }
     // 3. В случае успеха, вывести соотв.сообщение
     $this->info("Success");
 }