Страницы

воскресенье, 2 августа 2015 г.

Как создать правило в Alphauserpoints

Компонент Alphauserpoints используется на форумах для формирования системы баллов, рангов, медалей, проведения лотерей, организации реферальной системы.
Я его использую в связке с форумом Kunena и Joomla для раздачи медалей особо отличившимся участникам форума. Медали могут выдаваться автоматически в соответствии с правилами или вручную. При установке компонента появляются несколько готовых правил, рангов и медалей – активным участникам, новым участникам, сказавшим и получившим спасибо и так далее. Но все равно часто возникает необходимость создать новые медали и правила.
Рассмотрим способ создания нового плагина и применение его для выдачи медалей без написания длинного дополнительного кода.
Итак, допустим, надо как-то отмечать медалькой не только активных и добросовестных участников форума, но и разных нехороших личностей. При этом влиять на выдачу такой медальки должны другие участники форума, а не сама администрация ресурса.
Среди стандартных свойств Kunena есть репутация. Вот ее и будем использовать. При минусе в репутации будем добавлять 2 наказательных балла, при плюсе – убирать один. И заодно еще добавим баллов минусовальщику, просто так, вдруг кому-то потом понадобится такая статистика.
Для создания плагина нужно добавить код в файл components\com_kunena\controllers\user.php.
Ищем в нем функцию karma($karmaDelta), которая и осуществляет изменение репутации. Ближе к концу функции вносим код:

/*Баллы за повышение или понижение репутации*/   
        $api_AUP = JPATH_SITE.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php';

        if ( file_exists($api_AUP))
        {
            require_once ($api_AUP);
            $auptarget = AlphaUserPointsHelper::getAnyUserReferreID($target->userid);
            $root = AlphaUserPointsHelper::getAnyUserReferreID($this->me->userid);
            if ($karmaDelta > 0)
            {
                AlphaUserPointsHelper::newpoints( 'plgaup_kunena_karmachange', $auptarget, '', '' ,-$karmaDelta);
            }
            else
            {
                AlphaUserPointsHelper::newpoints( 'plgaup_kunena_karmachange', $auptarget, '', '' ,-2*$karmaDelta);
                AlphaUserPointsHelper::newpoints( 'plgaup_kunena_karmadown', $root, '', '' ,-$karmaDelta);
            }
        }
        /*********************************************************************/


Здесь  target – пользователь, которому изменили репутацию, а root – пользователь, который изменил. Вызываем функцию newpoints с параметрами – название функции, юзер, которому добавляем/убираем баллы, два пустых параметра, сама сумма баллов, которую рассчитаем от репутации.
Сохраняем файл. Переходим в админке к списку правил и добавляем новое правило, в котором пишем название, описание, тип плагина, уникальное имя функции, которое мы передавали в параметре (например, plgaup_kunena_karmachange), фиксированные баллы – нет, процент – нет, автоматическое утверждение – да, метод – всякий раз. Можно поставить срок истечения баллов. Сохраняем и публикуем это правило. Если нужно считать отдельно баллы тех, кто минусует, то добавьте еще одно правило с другой функцией (plgaup_kunena_karmadown).
Ну, и осталось еще добавить медали и привязать их к созданным правилам. Это делается обычным образом, без особенностей.
Таким способом можно побудить пользователей активней использовать репутацию, но при этом не переборщить – возможность изменения репы ограничивается в настройках.
Вот как выглядит профиль AUP для того, кто минусует:


А вот профиль того, кого минусуют и плюсуют:


Такие правила можно создавать для разных компонентов, не только для форума.