• Обновляем calendar, libcalendaring, libkolab, tasklist

 #10629   IgorA100
 29 июн 2022, 19:12
Обновляем calendar, libcalendaring, libkolab, tasklist. Это все из одного проекта и все взаимосвязано.
Домашняя страница проекта: https://git.kolab.org/diffusion/RPK/
Скачиваем:
Код: Выделить всёgit clone https://git.kolab.org/diffusion/RPK/roundcubemail-plugins-kolab.git

Если появляется ошибка типа:
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output

то необходимо изменить размер буфера:
Код: Выделить всёgit config --global http.postBuffer 1048576000

Копируем необходимые плагины в папку с установленным Roundcube и выполняем:
Код: Выделить всёchown -R cwpsvc:cwpsvc ./roundcube

Далее заходим в каждый плагин и обновляем БД командами типа:
Код: Выделить всё./updatedb.sh --package=calendar-kolab --version=3.5.11 --dir=../plugins/calendar/drivers/database/SQL
./updatedb.sh --package=tasklist-database --version=3.5.10 --dir=../plugins/tasklist/drivers/database/SQL

Если с обновлением беда (что бывает довольно часто), нужно разбираться, ну или грохнуть ОПРЕДЕЛЕННЫЕ таблицы в БД (потеряются все данные, если они не были синхронизированы!!!) и заново установить:
Код: Выделить всёbin/initdb.sh --dir=plugins/calendar/drivers/database/SQL
bin/initdb.sh --dir=plugins/tasklist/drivers/database/SQL

Для "libkolab" можно выполнить или:
Код: Выделить всёbin/initdb.sh --dir=plugins/libkolab/SQL

или:
Код: Выделить всёmysql -u root -p roundcube < SQL/mysql.initial.sql


Так-же заходим в каждую папку (точно необходимо для libcalendaring ) нового/обновленного плагина и запускаем:
Код: Выделить всёcomposer install


Создаем симлинки:
Код: Выделить всёln -s /usr/local/cwpsrv/var/services/roundcube/program /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_auth
ln -s /usr/local/cwpsrv/var/services/roundcube/program /usr/local/cwpsrv/var/services/roundcube/plugins/tasklist



С libcolab какая-то проблема с путями и зависимостями...
Пробуем исправить, создавая симлинки:
Код: Выделить всёln -s /usr/local/cwpsrv/var/services/roundcube/program /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/net_url2/Net /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/HTTP
cd /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/HTTP
mkdir HTTP
cd HTTP
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2 /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/HTTP/HTTP
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/HTTP /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2/Adapter
mkdir /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2/HTTP
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2 /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2/HTTP
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/Request2.php /usr/local/cwpsrv/var/services/roundcube/plugins/libkolab/vendor/pear/http_request2/HTTP/HTTP/Request2.php


Если у Вас на сервере стоит древняя PHP типа 5.4.X, то updatedb.sh и initdb.sh откажутся работать, значит необходимо ВРЕМЕННО заменить версию PHP :)
Код: Выделить всёmv /usr/local/bin/php /usr/local/bin/php_5.4.X
cp /usr/local/cwp/php71/bin/php /usr/local/bin/php

Можно еще переименовать и скопировать файлы php-cgi и php-config, но это необязательно, должно и без них заработать.
ВАЖНО: phpBB использует php-cgi !
 #10632   IgorA100
 10 июл 2022, 22:10
Исходники доп. плагина: https://git.kolab.org/diffusion/C/
Загружаем себе:
Код: Выделить всё git clone https://git.kolab.org/diffusion/C/chwala.git

Немного устаревший форк: https://github.com/detrout/chwala
1. В папке плагина "roundcube/plugins/kolab_files" создать папку "chwala", в которую разархивировать все из папки "public_html" из архива.
2. В папку "roundcube/plugins/kolab_files/lib" скопировать папку "/lib/viewers/" из архива
В конфиге kolab_files указать:
Код: Выделить всё$config['kolab_files_url'] = '/plugins/kolab_files/chwala/';

3. Скопировать файл "/roundcube/plugins/kolab_files/skins/elastic/templates/files.html" в папку "/roundcube/skins/elastic/templates"
4. Скопировать файл "/roundcube/plugins/kolab_files/skins/larry/templates/files.html" в папку "/roundcube/skins/larry/templates"
5. Из файла "/roundcube/plugins/kolab_files/chwala/js/files_api.js" в файл "/roundcube/plugins/kolab_files/file_api.js" перенести функцию
Код: Выделить всёthis.url = function(action, query)

6. Создать симлинки для работы API chwala
Код: Выделить всёln -s /usr/local/cwpsrv/var/services/roundcube/program/lib/Roundcube /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files/lib
ln -s /usr/local/cwpsrv/var/services/roundcube/config /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files
ln -s /usr/local/cwpsrv/var/services/roundcube/logs /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files
ln -s /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_folders /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files/lib/drivers/kolab/plugins
ln -s /usr/local/cwpsrv/var/services/roundcube/program /usr/local/cwpsrv/var/services/roundcube/plugins/kolab_files/chwala/api

7. Скопировать свежую версию класса PEAR по ссылке: https://pear.php.net/package/PEAR/download/
Из архива файл "PEAR.php" перезаписать вместо "/roundcube/plugins/kolab_files/lib/ext/PEAR.php" в противном случае будет ошибка
child 24333 said into stderr: "NOTICE: PHP message: PHP Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; PEAR_Error has a deprecated constructor in .../roundcube/plugins/kolab_files/lib/ext/PEAR.php on line 831"
child 24333 said into stderr: "NOTICE: PHP message: PHP Deprecated: Non-static method PEAR::setErrorHandling() should not be called statically in .../roundcube/program/lib/Roundcube/bootstrap.php on line 103"
 #10633   IgorA100
 12 июл 2022, 11:59
Функции работы с файлами из RC:
Основная функция формирования списка файлов (при нажатии кнопки "переименовать" данная функция НЕ срабатывает.:
Файл
\plugins\kolab_files\kolab_files.js

Код: Выделить всёthis.file_list = function(params)

Переименовать:
Файл
\plugins\kolab_files\kolab_files.js

Код: Выделить всёthis.file_rename = function(oldfile, newfile)


Сохранение вложений из электронной почты:
Файл
\roundcube\plugins\kolab_files\lib\kolab_files_engine.php

Код: Выделить всё protected function action_save_file()


Загрузка файлов:
Файл
\plugins\kolab_files\kolab_files.js

Код: Выделить всёrcube_webmail.prototype.files_upload = function(form)
{
  if (form)
    file_api.file_upload(form);
};

  // file upload request
  this.file_upload = function(form)
  {
    var form = $(form),
      field = $('input[type=file]', form).get(0),
      files = field.files ? field.files.length : field.value ? 1 : 0;

    if (!files || !this.file_upload_size_check(field.files))
      return;

    // submit form and read server response
    this.file_upload_form(form, 'file_upload', function(event) {
      var doc, response;
      try {
        doc = this.contentDocument ? this.contentDocument : this.contentWindow.document;
        response = doc.body.innerHTML;
        // response may be wrapped in <pre> tag
        if (response.slice(0, 5).toLowerCase() == '<pre>' && response.slice(-6).toLowerCase() == '</pre>') {
          response = doc.body.firstChild.firstChild.nodeValue;
        }
        response = eval('(' + response + ')');
      }
      catch (err) {
        response = {status: 'ERROR'};
      }

      file_api.file_upload_progress_stop(event.data.ts);

      // refresh the list on upload success
      file_api.file_upload_response(response);
    });
  };

Код: Выделить всё  // post the given form to a hidden iframe
  this.file_upload_form = function(form, action, onload)
  {
    var ts = new Date().getTime(),
      frame_name = 'fileupload' + ts;

    // upload progress support
    if (rcmail.env.files_progress_name) {
      var fname = rcmail.env.files_progress_name,
        field = $('input[name='+fname+']', form);

      if (!field.length) {
        field = $('<input>').attr({type: 'hidden', name: fname});
        field.prependTo(form);
      }

      field.val(ts);
      this.file_upload_progress(ts, true);
    }

    rcmail.display_progress({name: ts});

    // have to do it this way for IE
    // otherwise the form will be posted to a new window
    if (document.all) {
      var html = '<iframe id="'+frame_name+'" name="'+frame_name+'"'
        + ' src="' + rcmail.assets_path('program/resources/blank.gif') + '"'
        + ' style="width:0;height:0;visibility:hidden;"></iframe>';
      document.body.insertAdjacentHTML('BeforeEnd', html);
    }
    // for standards-compliant browsers
    else
      $('<iframe>')
        .attr({name: frame_name, id: frame_name})
        .css({border: 'none', width: 0, height: 0, visibility: 'hidden'})
        .appendTo(document.body);

    // handle upload errors, parsing iframe content in onload
    $('#'+frame_name).on('load', {ts:ts}, onload);
    $(form).attr({
      target: frame_name,
      action: this.env.url + this.url(action, {folder: this.env.folder, token: this.env.token}),
      method: 'POST'
    }).attr(form.encoding ? 'encoding' : 'enctype', 'multipart/form-data')
      .submit();
  };

 #10639   IgorA100
 10 авг 2022, 17:12
После попытки установить calendar с поддержкой CalDAV (https://github.com/JodliDev/calendar) и ручным разруливанием (а не композером) зависимостей при установленной модификации kolab_files с поддержкой NextCloud WebDAV возникает момент, когда при выполнении команды
$response = new Response();

Создается экземпляр класса либо из /plugins/calendar/vendor/sabre/http/lib/Response.php (Message.php), либо из /plugins/kolab_files/lib/vendor/sabre/http/lib/Sabre/HTTP/Response.php (Message.php)
Необходимо из calendar (здесь свежее) перенести в kolab_files