Диалоговые окна на boostrap5 + jquery

Лень двигатель прогресса (с). В одной из задач, используется довольно большое количество однотипных окон с вопросами и кнопками -Да, Нет, Ок и т.д. Чтобы не рисовать каждый раз эти окна руками в коде html, можно поступить лучше: оформить создание диалогового окна «на лету» с вызовом пользовательской функции по нажатию какой-то из кнопок.

Решение:

function UUID_V4() {
    var S4 = function() {
       return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
    };
    return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}

function Dialog(title,message,buttons=Array(),callback=function(){}){
  var uuid=UUID_V4();  
       html='<div class="modal fade" id="'+uuid+'" tabindex="-1" role="dialog" aria-labelledby="'+uuid+'Label" aria-hidden="true">';
  html=html+' <div class="modal-dialog modal-lg">';
  html=html+'  <div class="modal-content">';
  html=html+'    <div class="modal-header">';
  html=html+'      <h5 class="modal-title" id=""'+uuid+'Label">'+title+'</h5>';
  html=html+'      <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>';
  html=html+'    </div>';
  html=html+'    <div class="modal-body">';
  html=html+'        <p>'+message+'</p>';
  html=html+'    </div>';
  html=html+'    <div class="modal-footer">';
  buttons.forEach(function(bt, index, array) {
    if (index==0){
      html=html+'<button type="button" onclick="'+callback.name+'(\''+bt+'\')" class="btn btn-secondary" data-bs-dismiss="modal">'+bt+'</button>';  
    } else {
      html=html+'<button type="button" onclick="'+callback.name+'(\''+bt+'\')" class="btn btn-primary" data-bs-dismiss="modal">'+bt+'</button>';  
    };    
  });
  html=html+'    </div>';
  html=html+'  </div>';
  html=html+' </div>';
  html=html+'</div>';
  $("body").append(html);
  $("#"+uuid).modal("show");
  $("#"+uuid).on("hidden.bs.modal", function () {
    console.log("--закрыли окно");
    $("#"+uuid).remove();
  });
};
Dialog("Привет","Тут какой-то текст",["Ок","Отмена"],ResultTestDialog);

function ResultTestDialog(result){
    console.log("!",result);
}

ТиС: ошибка обмена с сайтом Bitrix

Словил ошибку:

bitrix Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.Ответ сервера:MySQL Query Error!Ответ сервера: MySQL Query Error!

Возможно эти ошибки уйдут, если проверите: 

1) Нет места на ж/д на хостинге
2) Превышено количество файлов/папок в каталоге upload
3) Уже фоново выполняется в 1с процесс обмена. Остановите все фоновые задачи

PostgreeSQL: бекап и востановление таблиц по маске

Задача: сделать бекап таблиц по маске и их восстановление

Решение:

для создания бекапа добавим ключи:

—if-exists — если есть, то удалить таблицу

—inserts — вместо copy использовать nsert

-c — очистка данных перед вставкой

pg_dump  --table=xyz* -Fc --file=ocpi.dump2 база-dev -U юзер_pg --if-exists --inserts -c

pg_restore --dbname база -Fc ocpi.dump2 -U юзер_pg

Bitrix: восстановление пароля администратора

Задача: восстановить утерянный пароль администратора

Решение 1: создать в корне сайта файл вида:

<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
global $USER;
$USER->Authorize(1);
LocalRedirect("/bitrix/admin/");

, где вместо цифры 1 можно использовать id вашего пользователя. Но обычно подходит и 1. Далее необходимо его открыть в браузере

Решение 2: если мы помним логин, и есть доступ к БД, то

  1. Ищем id пользователя с правами администратора:
select * from b_user_group where USER_ID IN (select id from b_user where email like "%vasya%") and GROUP_ID=1;

Меняем пароль на любимый:

 UPDATE b_user SET PASSWORD = MD5('test') WHERE ID=3;

PHP: как проверить, вызван ли метод класса из экземпляра, или статически

Задача: при вызове метода класса, использовать разный код в зависимости от того, как вызвана функция: статически или из класса. Т.е. результат выполнения кода:

 $tr=new TRabbit();
 $res= $tr->Producer("ocpi_queue", "Hello!");

и кода:

$res= TRabbit::Producer("ocpi_queue", "Hello!");

, должен быть разным.

Решение:

объявим в классе статическую переменную, которая будет изменять свое значение, если был создан экземпляр класса.

class TRabbit { 
    public static $isInstance=false;                 
    public function __construct(){
        self::$isInstance=true;
    }    
    public static function Producer($queue,$message,$delay=0) {  
      if (self::$isInstance==true) {
          echo "Код один\n";
      } else {
          echo "Код другой\n";
      }
    }
}
1 71 72 73 74 75 300