V

V

Был в сети 09 сентября 2025, 19:21
Заказы не принимаю
Нашел уязвимость(?), файлы с вотермаркой, допустим, сохраняются тут /assets/images/resources/1/big/image.jpg

Если потенциальный вор картинок будет знаком с ms2Gallery или msGallery, он сможет получить доступ к оригиналам без вотермарки по пути /assets/images/resources/1/image.jpg
нужно сделать копию свойства color (то что в базе сохраняется в json), но в поле в базе ничего не сохраняется, кто-нибудь подскажет в чем проблема?

все другие типы полей, которые я создавал, сохраняются нормально.

лексиконы создал, в базе поля создал, в админке свойство отображается, но значение в базе не сохораняется.

если убрать
'phptype' => 'json',
то значение сохраняет.

вот мои файлы и база:



core/components/minishop2/plugins/carsPlugin/index.php
<?php
return array(
    'map' => array(
        'msProductData' => require_once 'msproductdata.map.inc.php',
    ),
    'manager' => array(
        'msProductData' => MODX_ASSETS_URL . 'components/minishop2/plugins/carsPlugin/msproductdata.js',
    )
);
core/components/minishop2/plugins/carsPlugin/msproductdata.map.inc.php
<?php
return array(
    'fields' => array (
        'interior_color' => NULL
      ),
    'fieldMeta' => array (
        'interior_color' => 
        array (
          'dbtype' => 'text',
          'phptype' => 'json',
          'null' => true,
        )
    )
);
assets/components/minishop2/plugins/carsPlugin/msproductdata.js
miniShop2.plugin.pluginname = {
    getFields: function(config) {
        return {
            interior_color: {
                xtype: 'minishop2-combo-options',
                name: 'interior_color',
                hiddenName: 'interior_color',
                description: '<b>[[+interior_color]]</b><br />' + _('ms2_product_interior_color_help')
            }
        }
    },
    getColumns: function() {
        return {
            interior_color: {
                width: 50,
                sortable: false,
                editor: {
                    xtype: 'minishop2-combo-options'
                }
            }
        }
    }
};
скачиваете все сайты кроме 1, остальные удаляете, чистите оставшийся сайт, скачиваете его, удаляете его, закачиваете следующий сайт, чистите и т.д.

в общем бекапите все и чистите по одному сайту на аккаунте, чтоб не успел перепрыгнуть.
Есть ли еще метод проще и быстрее, который будет выводить id ресурса и количество посмотревших пользователей? Не слишком шарю в запросах к БД, возможно что-то лишнее:
{'!pdoResources' | snippet : [
    'loadModels'=>'siteStatistics',
    'parents'=>15,
    'limit'=>0,
    'tpl'=>'@INLINE {$id} - {$users}
',
    'leftJoin'=>'{
        "Statistics": {
            "class": "PageStatistics",
            "on": "modResource.id = Statistics.rid"
        }
    }',
    'select'=>'{
        "modResource": "id",
        "Statistics": "COUNT(DISTINCT user_key) as users"
    }',
    'groupby'=>'modResource.id',
    'showLog'=>1
]}
Плейсхолдер граватара — {$gravatar}, вот только судя по коду
$row['gravatar'] = $gravatarDefault;
    if(!empty($row['user_email'])) {
        $row['gravatar'] = 'https://www.gravatar.com/avatar/'.md5(strtolower($row['user_email'])).'?s=50';
        if(!empty($gravatarDefault)) {
            $row['gravatar'] .= '&d='.urlencode($gravatarDefault);
        }
    }
зачем-то размер аватара прописан жестко, хотя в настройках есть параметр ec_gravatar_size. Плюс нельзя выбрать тип граватара.

Я решил сделать вот так:
<img src="https://www.gravatar.com/avatar/{if $user_email?}{$user_email | lower | md5}{else}{$user_name | lower | md5}{/if}?s=24&d=identicon" alt="Аватар">