Приложение "Toolbox": различия между версиями

Материал из CMS Sitebill Wiki
Перейти к навигации Перейти к поиску
Строка 15: Строка 15:
  
 
=== Пользовательские контроллеры ===
 
=== Пользовательские контроллеры ===
Пользовательские контроллеры
+
Пользовательские контроллеры создаются путем размещения в каталоге /apps/toolbox/useractions/ классов определенного вида.
 +
 
 +
<pre>
 +
class recalc extends Object_Manager {
 +
   
 +
    public function getName(){
 +
        return 'Имя';
 +
    }
 +
   
 +
    public function run(){
 +
        $counts = array();
 +
        $DBC=DBC::getInstance();
 +
        $query = 'SELECT COUNT(`id`) AS _c, `user_id` FROM '.DB_PREFIX.'_data GROUP BY `user_id`';
 +
        $stmt = $DBC->query($query, $query_vals);
 +
 
 +
 
 +
        if ($stmt) {
 +
            $timelimit = time() - $item['t'] * 24 * 3600;
 +
            while ($ar = $DBC->fetch($stmt)) {
 +
                $counts[$ar['user_id']] = $ar['_c'];
 +
            }
 +
        }
 +
       
 +
        $query = 'UPDATE '.DB_PREFIX.'_user SET `objcount`=0 WHERE 1';
 +
        $stmt = $DBC->query($query);
 +
       
 +
        if(!empty($counts)){
 +
            $query = 'UPDATE '.DB_PREFIX.'_user SET `objcount`=? WHERE user_id=?';
 +
            foreach($counts as $user_id=>$count){
 +
                $stmt = $DBC->query($query, array($count, $user_id));
 +
            }
 +
        }
 +
        return 'Выполнено';
 +
        //print_r($counts);
 +
    }
 +
}
 +
</pre>

Версия 16:55, 22 января 2020

Приложение для выполнения рутинных массовых задач.

Подгонка превьюшек

Используется для подгонки уменьшенных изображений картинок для объявлений. Применимо только к элементу типа Uploadify_image.
Принцип работы: выбирает все картинки объявлений и пересоздает их уменьшенные копии согласно настроек apps.realty.data_image_preview_height, apps.realty.data_image_preview_width и apps.realty.preview_smart_resizing. Поскольку за исходное изображение берется нормальное изображение, то не уменьшенных изображениях, в результате этой операции, возможно появление водяного знака, если он был нанесен на нормальные изображения.

Из Uploadify в Uploads

Мигратор картинок из элемента типа Uploadify_image (базовая поставка) в элемент типа Uploads. Применяется для объявлений. Для своей работы требует указания системного имени элемента типа Uploads в который будут помещены изображения (при использовании Uploadify_image изображения хранятся во внешней таблице БД).

Перед миграцией необходимо дополнить, в случае отсутствия, таблицу re_image полями title VARCHAR(255) и description TEXT.

Если миграция не выполнена, но старый элемент типа Uploadify_image заменен одноименным элементом типа Uploads, присоединенные картинки будут доступны только на просмотр с фронта, но не будут доступны на редактирование из админки. Эта доступность сохранится до первой загрузки картинки в элемент типа Uploads. После этого все изображения, которые были подхвачены из старого элемента, будут утеряны.

Пользовательские контроллеры

Пользовательские контроллеры создаются путем размещения в каталоге /apps/toolbox/useractions/ классов определенного вида.

class recalc extends Object_Manager {
    
    public function getName(){
        return 'Имя';
    }
    
    public function run(){
        $counts = array();
        $DBC=DBC::getInstance();
        $query = 'SELECT COUNT(`id`) AS _c, `user_id` FROM '.DB_PREFIX.'_data GROUP BY `user_id`';
        $stmt = $DBC->query($query, $query_vals);


        if ($stmt) {
            $timelimit = time() - $item['t'] * 24 * 3600;
            while ($ar = $DBC->fetch($stmt)) {
                $counts[$ar['user_id']] = $ar['_c'];
            }
        }
        
        $query = 'UPDATE '.DB_PREFIX.'_user SET `objcount`=0 WHERE 1';
        $stmt = $DBC->query($query);
        
        if(!empty($counts)){
            $query = 'UPDATE '.DB_PREFIX.'_user SET `objcount`=? WHERE user_id=?';
            foreach($counts as $user_id=>$count){
                $stmt = $DBC->query($query, array($count, $user_id));
            }
        }
        return 'Выполнено';
        //print_r($counts);
    }
}