Компьютер

ЧП Куликов Михаил Михайлович

Тел:

+380-(50)-589-55-02

Loading
Мы в социальных сетях...

    -  Вконтакте
    -  Facebook
    -  Google+
    -  Twitter
    -  LiveJournal
    -  Я.ру
    -  Одноклассники
    -  RSS
    -  Мой Круг
    -  YouTube
Прочее...

/images/certificate_small.png

Анализ: траст сайта it-kmm.com
Внимание!!! Заработал на 100% новый сервис.

Ошибки и исправления в AVA Panel

В результате работы с данным продуктом накопилось множество найденных как ошибок, так и просто исправлений и дополнений. Что-бы самому не забыть, да и просто поделиться с другими, решил составить это перечень. По мере нахождения других буду дополнять, ну или исправлять. Хронологии и группировки никакой нет, просто по порядку следования.

  1. Error 10. Ошибка перенаправления на регистрацию после длительного простоя или выхода из "гибернации"

    Решение от разработчика: Надо в exceptions.php в строку примерно 38 после if($exc->errorCode == 10){ добавить:

    if(Library::constVal('IN_ADMIN') && !empty($_POST['go_auth'])){
    header('Location: '._D.ADMIN_FOLDER);
    exit;
    }
    

    Еще от себя добавил: В exeptions.php где-то line 40
    Было просто

    if(!$GLOBALS['Core']->getUserId()) $replaces['formId'] = $GLOBALS['Core']->callModAndGetFormId('main', 'login', 'login');;

    Заменил на

    if(!$GLOBALS['Core']->getUserId())
    			if (!Library::constVal('IN_ADMIN')) $replaces['formId'] = $GLOBALS['Core']->callModAndGetFormId('main', 'login', 'login');
    			else $replaces['formId'] = $GLOBALS['Core']->callModAndGetFormId('admin_main', 'authAdmin', 'auth_admin');

  2. Ошибки в модуле биллинга при расширении функционала с помощью servconnectObject

    В общем не вызывались функции delAcc, suspendAcc и unsuspendAcc
    Т.к. не был установлен параметр auto
    Вот исправление на примере delAcc
    Необходимо добавить в mod_billing.php в строку примерно 1067, после $list[$e] = $this->getActionServiceValues($i);

    $list[$e]['auto'] = true;

    А здесь готовый исправленный модуль биллинга

  3. Не работает перекрытие плагином функции "вместо"

    Похоже на чисто машинальную ошибку при разработке.
    В модуле core.php где-то в районе строки 551
    Записан вот такой код

    		$instead = false;
    		if(isset($this->replaceFuncsPlugs['instead'][$func])){
    			foreach($this->replaceFuncsPlugs['before'][$func] as $i => $e){
    				if($obj instanceof $i){
    					$instead = $e;
    					break;
    				}
    			}
    		}
    

    просто заменить 'before' на 'instead'

  4. При начальной установке получаем Maximum function nesting level of '100'

    Все банально просто - переполнился стек рекурсивных вызовов установленный для отладчика php.
    Ну я например, поступил вот таким образом. В файле install/index.php после строки
    ini_set('display_errors', 1); добавил

    ini_set('xdebug.max_nesting_level', 10000);
    
  5. Опять mod_bill.php

    При повторной блокировке/разблокировке не проверяется что операция уже выполнена.
    Точнее ошибка обнаруживается и складируется для последующего отображения, но до
    отображения дело не доходит, т.к. вылетает по exeption при работе с базой данных.
    Исправление на примере unsuspnend. В файле modules/billing/mod_bill.php исправленная функция

    public function __ava__unsuspendServices(){
    	/*
    		Добровольная блокировка услуг
    	*/
    
    	$orders = array();
    	foreach($this->values['entry'] as $i => $e){
    		$o = $this->addUnsuspendOrder($i, 'accord');
    		if (!$o) continue;
    		$orders[$i] = $o;
    	}
    
    	$this->setMeta('Заявка на разблокировку услуг');
    	$this->setContent($this->showUnsuspendConfirmForm($orders));
    }
    
  6. При инсталляции новых модулей получаем Maximum function nesting level of '100' reached, aborting!

    Проблема обусловлена глубиной рекурсивных вызовов метода paramReplaces, которая в параметрах ищет
    и заменяет конструкции вида {Call:xxxxxx}.
    В файле admin/index.php перед строкой define('IN_ADMIN', '1'); добавил

    ini_set('max_input_nesting_level','100000');
    ini_set('max_execution_time','100000'); 
    ini_set('xdebug.max_nesting_level', 10000);
    
  7. Ошибки в модуле биллинга при расчете модификации услуги

    При нулевой стоимости услуги за первый месяц (а похоже у всех с периодом не кратным суткам)
    была ошибка из-за того, что биллинг хранит даты в секундах и месяц в секундах
    равен абстрактным 30,5 суток.
    Необходимо изменить условие с "больше" на "больше или равно" в gen_billing.php в строке примерно 1588

    foreach($e as $i1 => $e1){
    if($payCounter - $periods[$i][$i1]['new_price2'] >= 0 || $oPkgData['service_modify_type'] == 'balance') $periods[$i][$i1]['new_term'] = $periods[$i][$i1]['old_term'];
    elseif($payCounter > 0){
    
  8. Ошибки в модуле биллинга при заказе услуги

    Если услуга одноразовая (нет периодов заказа и т.п.) происходит сбой с выдачей ошибки "не указан срок"
    Необходимо изменить в gen_billing.php в строке примерно 2002 на следующий код

    //if($eData['entry_type'] == 'new') $paid_to = $eData['date'] + Dates::term2sec($pkgData['base_term'], $term) + Dates::term2sec($pkgData['test_term'], $test_term);
    $__base_term = 0;
    $__test_term = 0;
    if (!empty($pkgData['base_term'])) $__base_term = Dates::term2sec($pkgData['base_term'], $term);
    if (!empty($pkgData['test_term'])) $__test_term = Dates::term2sec($pkgData['test_term'], $test_term);
    if($eData['entry_type'] == 'new') $paid_to = $eData['date'] + $__base_term + $__test_term;
    elseif($eData['entry_type'] == 'prolong'){
    	$sData = $this->getOrderedService($eData['service_order_id']);
    	$paid_to = $sData['paid_to'] + $base_term + $test_term;
    }
    
  9. Ошибки в модуле биллинга при формировании карты сайта

    Не увеличевался счетчик для индекса массива результата (возвращалась только последняя услуга)
    Необходимо изменить в gen_billing.php в строке примерно 220 на следующий код

    if($subblock) $return[$j++] = array('name' => $e, 'link' => 'index.php?mod='.$this->mod.'&func=packages&service='.$i, 'subblock' => $subblock);
    
  10. Ошибки в ядре

    Не заполняются контент-блоки.
    Необходимо изменить в core.php в строке примерно 1152 на следующий код

    foreach($this->getTemplateBlocks() as $i => $e){
    	$this->mainModObj->setContent($e, $i, 'pre');
    }
    if ($this->getModuleName($this->mainModObj->getMod()) == 'Main') {
    	foreach($this->DB->columnFetch(array('contentblocks', '*', 'name')) as $i => $e){
    		if($e['show'] != '1') continue;
    		$e['vars'] = Library::unserialize($e['vars']);
    		$this->mainModObj->setNewContent($e['vars']['matrix']['value'], $i);
    	}
    }
    
  11. Ошибки в структуре таблиц БД

    Не достаточно длины поля таблицы для заполнения значением (Имя ТП может быть больше 255).
    Необходимо изменить в {prefix}billorder_entries тип поля entry_caption на TEXT

  12. Ошибки в шаблоне письма termFinishService

    Не указано действие. Правильный текст шаблона для ссылки следующий:
    <a href='<?=_D?>index.php?mod={CURRENT_MOD}&func=myServicesActions&service={service}&entry[{id}]=1&action=prolong'><?=_D?>index.php?mod={CURRENT_MOD}&func=myServicesActions&service={service}&entry[{id}]=1&action=prolong</a>

  13. Ошибки в модуле биллинга при продлении/удалении

    Удалялись одноразовые услуги. Это не правильно. Услуги с type = onetime предоставлены и оплачены один раз и на всегда.
    Необходимо добавить в gen_billing.php в строке примерно 5930 после кода

    	$filter = '('.implode(' OR ', $filter).') AND (`step`=0 OR `step`=1)';
    
    	foreach($this->DB->columnFetch(array('order_services', array('service', 'package', 'paid_to', 'step', 'server', 'ident'), 'id', $filter, 'paid_to')) as $i => $e){
    'paid_to')) as $i => $e){
    

    следующий код

        $type = $this->DB->cellFetch(array('services', 'type', "`name`='{$e['service']}'"));
        if($type == 'onetime') continue; /* Пропустим одноразовые */
    
        $pData = $this->serviceData($e['service'], $e['package']);
        $price = $pData['price']+$pData['install_price'];
        if ($price <= 0) continue; /* Пропустим free тарифы для не одноразовых */
    
  14. Ошибки в модуле биллинга при формировании meta-ключей

    В случае вызова функции для отображения списка тарифов с параметром pkg-тариф была ошибка.
    Необходимо изменить код в mod_billing.php в строке примерно 74 на следующий код

    if($pkg){
        if(!$pkgData = $this->DB->rowFetch(array('order_packages', '*', "`name`='$pkg'"))){
            throw new AVA_NotFound_Exception('{Call:Lang:modules:billing:dliaehtojgru}', 404);
        }
    
        $wh .= " AND t1.`name`='$pkg'";
        $meta = empty($pkgData['text']) ? '' : $pkgData['text'];
    }
    
  15. Ошибки в модуле биллинга при оформлении заказа

    Если создавался заказ с нулевой стоимостью или достаточно средств на балансе для оплаты
    и установлен соответсвующий режим в админке, ничего не работало, т.к. не верно проверялся
    этап создания ордера. Step = -1 установлен у удаленных ордеров. Ну и зачем его оплачивать?
    Необходимо изменить код в mod_billing.php в строке примерно 610 на следующий код

    if(
        ($oData['step'] == 3) &&
        (
            ($this->Core->getParam('autoAddStyle', $this->mod) == 1 && ($oData['total'] == 0)) ||
            ($this->Core->getParam('autoAddStyle', $this->mod) == 2 && ($oData['total'] <= $cData['balance']))
    
  16. Ошибки в модуле CMS

    Если для контент-блока задать свойство Для каждой страницы можно выставить положение... блок не отображался вообще.
    Необходимо изменить код в mod_cms.php в строке примерно 157 на следующий код
    Ошибочный вариант кода закомментирован.

    if(empty($data['vars']['blocks'][$i])) $blocks[$i] = ''; /* if(empty($blocks[$i])) $blocks[$i] = ''; */
    
  17. Ошибки в сервисах ядра

    Не смотря на "заявленные" допустимые "-" и "." их проверка не проходила
    Необходимо изменить код функции ident regexp.php в строке примерно 81 на следующий код

    return preg_match("/^[A-Za-z]{1}[\.\-\w]{1,31}$/iUs", $str);
    
  18. Ошибки в модуле gen_billing

    При удалении услуги проверялась не стоимость удаления, а стоимость установки.
    Строку кода, позиция где-то 3046 заменить с

    if($dData['total'] > 0 && !$this->checkBalance($sData['client_id'], $dData['total'], $this->getParamByServiceId($dData['service_order_id'], 'currency'))){
    

    на

    if($dData['delete_price'] > 0 && !$this->checkBalance($sData['client_id'], $dData['delete_price'], $this->getParamByServiceId($dData['service_order_id'], 'currency'))){
    
  19. Ошибки в модуле gen_billing

    При запросе всего списка тарифов через функцию getPackagesByGrp($i, '')
    с пустым именем группы, для тарифов с группами возвращался пустой массив.
    Строку кода, позиция где-то 4083 заменить с

    $r['groups'] = Library::str2arrKeys($r['groups']);
    

    на

    if ($r['groups'] = Library::str2arrKeys($r['groups'])) $r['groups'][''] = 1;
    

Автор: Михаил Куликов.



Комментарии к посту «Ошибки и исправления в AVA Panel»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

DT

Курсы валют:

UAH

1 USD = 24.938 24.570
1 EUR = 27.473 26.882
1 RUR = 00.389 00.354

Антивирусы в формате SaaS
Подписаться письмом

Спонсоры...

SP:   LF:   PP:  

ubuntu == © Куликов М.М. (2011)
Сертифицированный партнер Dr.Web Free secondary DNS uaRating Rambler's Top100 Рейтинг@Mail.ru bigmir)net TOP 100 Яндекс цитирования Ranker Рейтинг сайта в веб-каталоге misto.zp.ua TOP.zp.ua