Задать вопрос
  • Как распарсить стили сообщения в Telegram Bot?

    @edvardpotter
    Возможно вообще не с того начали решать проблему, попробуйте метод editMessageReplyMarkup

    Тогда не нужно будет заново отправлять текст сообщения.
    Ответ написан
    Комментировать
  • Как обеспечить безопасность данных в компании, если сотрудника увольняют?

    @edvardpotter
    Любую информацию которую человек может увидеть, услышать или почувствовать - можно украсть. Для таких вещей есть обязательные требования в договоре. Поэтому если например будет доказано что такой-то человек, опубликовал/передал информацию которая содержит коммерческую тайну, то этого человека уже можно привлечь к материальной ответственности.

    Если же боитесь что сотрудник уничтожит какую-нибудь информацию которая может пригодится компании, то нужно обязать работника хранить всю информацию на ваших серверах(которые соответственно будут бэкапиться)
    Ответ написан
    7 комментариев
  • Декодер ionCube 8.3?

    @edvardpotter
    Использовал этот сервис, искал бесплатные варианты, но нашел только это. Реально декодирует исходники в тот вариант в котором они были изначально до шифрования(комментарии, переменные и т.д). Стоит вроде 10 евро на месяц(что все равно окупиться даже для этого модуля если будете использовать на многих сайтах).
    Ответ написан
    Комментировать
  • Как правильно сделать хэширование паролей?

    @edvardpotter
    Yii::$app->getSecurity()->generatePasswordHash($password);

    Где $password - ваш пароль

    Подробнее

    #UPD

    asferot, если вы делаете регистрацию то шаги должны быть примерно такие:
    1. Пользователь на сайте вводит данные формы.
    2. Создается модель пользователя(допустим у User, есть свойства email и password)
    $model = new User();
    $model->emal = 'user@email.ru';
    $model->setPassword(123456);
    $model->save();

    В модель User, нужно добавить метод - setPassword:
    public function setPassword($password)
    {
        $this->password = Yii::$app->security->generatePasswordHash($password);
    }

    В этом методе вы передаете пароль, yii хеширует его, и сохраняет в свойство $password модели User

    В итоге в бд у вас будет не исходный пароль храниться а хешированный.
    Ответ написан
    7 комментариев
  • Как подключиться к Soap серверу с личным сертификатом?

    @edvardpotter Автор вопроса
    Если wsdl находится на том же хосте где и soap сервер(с проверкой по сертификату), то клиент не сможет считать wsdl даже если передать сертификат в local_cert, поэтому wsdl нужно скачивать и указывать в конструкторе, например так:
    $wsdl = 'C:\wsdl.xml';
    new \SoapClient($wsdl, ['local_cert' => 'path\sign.pem']);
    Ответ написан
    Комментировать
  • Почему отсутствует пункт Codeception в меню Test Frameworks(PhpStorm)?

    @edvardpotter Автор вопроса
    Нужно было установить плагин Codeception, хотя об этом нигде не написано. Возможно в новых версиях шторма он идет из коробки.
    Ответ написан
    Комментировать
  • Как вставить reply кнопки в telegram bot php?

    @edvardpotter
    Если нужна inline клавиатура то отправляете примерно так:
    <?php
    $keyboard = [
        'inline_keyboard' => [
            [
                ['text' => 'Какой-то текст', 'callback_data' => 'данные которые отправятся на webhook когда пользователь нажмет на кнопку']
            ]
        ]
    ];
    $encodedKeyboard = json_encode($keyboard);
    file_get_contents($website . "/sendmessage?chat_id=" . $chatId . "&text=" . $welcomemessage . "&reply_markup=" . $encodedKeyboard);

    P.S. И советую использовать какой-нибудь http клиент, например сURL или guzzle
    Источник: ТЫК
    Ответ написан
    Комментировать
  • Как сделать регистрацию в Telegram боте на php?

    @edvardpotter
    Все тоже самое что и с обычной регистрацией/авторизацией на сайте:
    1. Получаем уникальный ID telegram-пользователя.
    2. Запрашиваем нужные данные(логин и пароль).
    3. Если данные верные то связываем этот логин с ID из первого шага.
    Ответ написан
    Комментировать
  • Как сделать активной вкладку браузера?

    @edvardpotter
    Никак.

    spoiler
    Только если на странице подписываться на событие(меня активировали), а на других страницах при нажатии на ссылку отправлять это событие, и после того как какая-то вкладка получила это событие вызывать на ней alert. Но это так себе решение. Или еще вариант, делать информацию не на отдельных вкладках, а на табах но это уже совсем другая история.
    Ответ написан
    Комментировать
  • Epsilon Mobile Framework - Version 2.0?

    @edvardpotter
    Наверное потому что данный фрейм. не для общего использования?
    В лицензии же написано:
    This stylesheet cannot be resold by anyone else except Enabled and Cosmin Cotor

    Авторы:
    Enabled
    Cosmin Cotor
    Ответ написан
    Комментировать
  • Есть ли возможность сделать табы TabsX Kartik неактивными?

    @edvardpotter
    [
                'label' => '<i class="glyphicon glyphicon-briefcase"></i> Вкладка 3',
                'content' => DetailView::widget([
                    'id'=>'info1',
                    'model' => $model,
                    'panel' => [
                        'heading' => '<h3 class="panel-title">'.$model->Name.'</h3>',
                        'type'=>DetailView::TYPE_SUCCESS,
                    ],
                    'attributes' => $info_three,
                ]),
                'encode'=>false,
                'headerOptions' => ['class'=> $value ? '' : 'disabled']
            ],

    Где вместо $value, ваша переменная которая может быть пустой($model или наверное $info_three)
    Ответ написан
    3 комментария
  • Почему OpenCart 3 перестал открывать страницу карточки товара?

    @edvardpotter
    Это не ошибка а всего лишь предупреждения, на многих сайтах встречал такое, у вас проблема где-то в другом. Попробуйте перегенерировать модули.
    Ответ написан
  • Как получить список серверов пользователя discord?

    @edvardpotter Автор вопроса
    Просмотрел исходный код restcord. И нашел там параметр tokenType. О нем ничего не написано в документации, но если установить его в OAuth то библиотека будет работать в режиме пользователя а не бота. Как правильно использовать:
    $discord = new DiscordClient([
        'token' => 'userToken', 
        'tokenType' => 'OAuth'
    ]);

    Я потратил очень много времени на поиск решения этой проблемы, и я очень удивился что об этом параметре не написано в официальной документации. Надеюсь это сэкономит вам время!
    Ответ написан
    Комментировать
  • Yii2 как сделать несколько модальных окон widget Modal?

    @edvardpotter
    Вопрос наверное больше по bootstrap а не yii2, думаю вам нужно что то вроде этого
    <div id="stack1" class="modal fade" tabindex="-1" data-focus-on="input:first" style="display: none;">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h4 class="modal-title">Stack One</h4>
      </div>
      <div class="modal-body">
        <p>One fine body…</p>
        <p>One fine body…</p>
        <p>One fine body…</p>
        <input class="form-control" type="text" data-tabindex="1">
        <input class="form-control" type="text" data-tabindex="2">
        <button class="btn btn-default" data-toggle="modal" href="#stack2">Launch modal</button>
      </div>
      <div class="modal-footer">
        <button type="button" data-dismiss="modal" class="btn btn-default">Close</button>
        <button type="button" class="btn btn-primary">Ok</button>
      </div>
    </div>
     
    <div id="stack2" class="modal fade" tabindex="-1" data-focus-on="input:first" style="display: none;">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h4 class="modal-title">Stack Two</h4>
      </div>
      <div class="modal-body">
        <p>One fine body…</p>
        <p>One fine body…</p>
        <input class="form-control" type="text" data-tabindex="1">
        <input class="form-control" type="text" data-tabindex="2">
        <button class="btn btn-default" data-toggle="modal" href="#stack3">Launch modal</button>
      </div>
      <div class="modal-footer">
        <button type="button" data-dismiss="modal" class="btn btn-default">Close</button>
        <button type="button" class="btn btn-primary">Ok</button>
      </div>
    </div>
     
    <div id="stack3" class="modal fade" tabindex="-1" data-focus-on="input:first" style="display: none;">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h4 class="modal-title">Stack Three</h4>
      </div>
      <div class="modal-body">
        <p>One fine body…</p>
        <input class="form-control" type="text" data-tabindex="1">
        <input class="form-control" type="text" data-tabindex="2">
      </div>
      <div class="modal-footer">
        <button type="button" data-dismiss="modal" class="btn btn-default">Close</button>
        <button type="button" class="btn btn-primary">Ok</button>
      </div>
    </div>
    <button class="demo btn btn-primary btn-lg" data-toggle="modal" href="#stack1">View Demo</button>


    Пример: jschr.github.io/bootstrap-modal/bs3.html
    Ответ написан
  • Почему Composer удаляет мои файлы?

    @edvardpotter Автор вопроса
    Вероятно данные пакеты были удалены из файла composer.json, но при этом присутствуют в файле ./vendor/composer/installed.json. Последний используется для хранения перечня установленных пакетов.

    Сравнив эти 2 файла композер определит какие пакеты были удалены из composer.json "вручную" и удалит их из папки vendor.

    Удалите из файла installed.json записи относящиеся к пакетам, которые хотите сохранить.
    Источник
    Ответ написан
    Комментировать
  • Как закрыть модальное окно bootstrap при нажатии на кнопку назад в браузере?

    @edvardpotter
    $('.modal').on('hidden.bs.modal', function (e) {
      history.pushState('', document.title, window.location.pathname);
      console.log($(this).attr('data-m'));
    });
    
    $(window).bind('hashchange', function() {
    	if(window.location.hash == ''){//Если после # ничего нет, значит закрываем модальное окно(попробуйте открыть модальное окно и в адресной строке удалить все после # после чего у вас закроется модальное окно)
    		$('.modal').modal('hide');
    	}
    });

    Взял с вашего примера.
    history.pushState - позволяет добавить новую запись в сессию истории текущего окна (вкладки). Добавление записи (элемента) осуществляется в конец сессии истории.

    Т.е. вы просто добавляете страницу якобы предыдущую и там уже обрабатываете нужное вам действие.
    Ответ написан
    1 комментарий
  • Как называется подобного рода дизайн?

    @edvardpotter
    По запросу
    admin dashboard template
    admin panel template
    находится как раз то что вам нужно.
    Ответ написан
    Комментировать
  • Как реализовать веб-сервер и сайт на флешке?

    @edvardpotter
    Похоже что вам нужен OpenServer аля ubuntu, если да то похожий вопрос уже задавался
    Ответ написан
    Комментировать
  • Как отправить post запрос и распарсить ответ?

    @edvardpotter Автор вопроса
    public class Main2Activity extends AppCompatActivity {
        Authorization mt;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            helloTextView = (EditText)findViewById(R.id.editText);
        }
    
        public void onClick(View view) {
            mt = new Authorization();
            mt.execute();
        }
    
        class Authorization extends AsyncTask<Void, Void, Void> {
    
            String resultString = null;
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }
    
            @Override
            protected Void doInBackground(Void... params) {
                try {
                    String myURL = "http://site.ru";
                    String parammetrs = "login=1&password=2";
                    byte[] data = null;
                    InputStream is = null;
    
                    try {
                        URL url = new URL(myURL);
                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                        conn.setRequestMethod("POST");
                        conn.setDoOutput(true);
                        conn.setDoInput(true);
    
                        conn.setRequestProperty("Content-Length", "" + Integer.toString(parammetrs.getBytes().length));
                        OutputStream os = conn.getOutputStream();
                        data = parammetrs.getBytes("UTF-8");
                        os.write(data);
                        data = null;
    
                        conn.connect();
                        int responseCode= conn.getResponseCode();
    
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
                        if (responseCode == 200) {
                            is = conn.getInputStream();
    
                            byte[] buffer = new byte[8192];
                            int bytesRead;
                            while ((bytesRead = is.read(buffer)) != -1) {
                                baos.write(buffer, 0, bytesRead);
                            }
                            data = baos.toByteArray();
                            resultString = new String(data, "UTF-8");
                        }                 
                    } catch (IOException e) {
    
                        //resultString = "IOException:" + e.getMessage();
                    } catch (Exception e) {
    
                        //resultString = "Exception:" + e.getMessage();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
    
            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                if(resultString != null) {
                    Toast toast = Toast.makeText(getApplicationContext(), resultString, Toast.LENGTH_SHORT);
                    toast.show();
                }
    
            }
        }
    }


    Нашел на тостере ответ, очень долго тупил и юзал в потоке активити, т.к. не сразу догадался что нужно было использовать AsyncTask.
    Ответ написан