Pull to refresh

Comments 5

Не очень понятна задача — регулярно парсить неизвестные XML?

А вот самое, по-моему, интересное в коде не описали. У вас там система хуков вроде как наличествует. Зачем и почему такая схема?
Нет, если конкретно, то (не в целях рекламы) есть сервис 77reports.com
Основная функция сервиса — удобное представление данных из highrise, их графическое и табличное представление.
Делать в реальном времени кучу вызовов АПИ чтобы нарисовать график не очень удобно. Удобнее это делать когда все находится в теплой ламповой базе.
Стали думать как это сделать, в итоге и получилась эта библиотека. Пользователь предоставляет нам свой api-ключ для highrise, а мы в свою очередь раз в сутки подключаемся и забираем данные пользователя с сервиса, попутно удобно располагая их в БД. Таким образом единожды синхронизировав пользователя с highrise мы можем сделать кучу отчетов на этой основе больше его не дергая.
По поводу отчетов вообще тема отдельная.
Шаблоны отчетов находятся в XML файлах, где мы можем описать расположение графиков в отчете, элементы отчета, sql-запросы для каждого графика. Все очень динамично. Фактически, по запросу пользователя мы можем создать для него абсолютно уникальный шаблон отчета под его потребности в течении 1-2 часов.
Касательно хуков — хуки нужны для подготовки и изменения данных. Интерфейс хуков тут
К примеру в нашем сервисе мы используем их для добавления новых полей к таблице (в функции beforeTableCreation добавляем новые поля в структуру fields), для добавления данных в эти поля (beforeDataAdding) и для подготовки структуры БД (в функции beforeSyncing).
Хуки подключаются по названию сервиса.
К примеру для highrise это будет: sync_hook_highrise.php
Пример содержания хука:
<?php

require_once dirname(__FILE__) . '/sync_hook.php';

class SyncHook_Highrise extends SyncHook
{
    /**
     * @param string $tableName
     * @param array $fields, each item is of format: fieldName => array('value' => 'field value', 'type' => 'field type')
     */
    public function beforeTableCreation($tableName, &$fields)
    {
        if ($tableName == 'deal')
        {
            $fields['closing-date'] = array(
                'value' => '0000-00-00 00:00:00',
                'type' => 'datetime'
            );
            
            $fields['stage-percent'] = array(
                'value' => '',
                'type' => 'string'
            );
        }
        else if($tableName == 'party')
        {
            if( !isset($fields['name']) )
            {
                $fields['name'] = array(
                    'value' => '',
                    'type' => 'string'
                );
            }
        }
    }
}


Вот как-то так.
Плюс за старания.

Не хватает:
— тестов;
— composer.json;
— PSR.
Спасибо большое.
Правда мне еще не приходилось пользоваться этим composer, но слышал что это модно сейчас.
Sign up to leave a comment.

Articles