Задался вопросом интеграции Zoo 2.х и JomSocial.
Что для этого необходимо:
1. Элемент Zoo - ссылка в материале на профиль. В стандартной комплектации Zoo имеется элемент
itemauthor, но он не выводит ссылку.
Создал элемент
Author Link. Выводит ссылку на профиль и аватар (JomSocial/СВ). Стиль отображения можно подредактировать в CSS.
Распаковываем
authorlink.zip и его содержимое помещаем в каталог:
/administrator/components/com_zoo/elements/ Скачать: http://www.raslab.org/authorlink.zipДля версии Zoo 2.4.х содержимое помещать в
/media/zoo/elements/.
Скачать: http://www.raslab.org/zavantazhyty/category/3-zoo.html?download=3%3Aelement-author-link2. Плагин JomSocial - отображение списка материалов в профиле.
Скачать: http://www.raslab.org/plg_myzooitems.zipДля версии Zoo 2.4.х:
Скачать: http://www.raslab.org/zavantazhyty/category/2-community.html?download=4%3Adodatok-my-zoo-items3. Плагин или хак для Zoo для отображения нового ивента в
JomSocial Activity Stream и начисления балов, когда пользователь добавляет, изменяет либо удаляет материал Zoo. Естественно название материала и ссылка на него присутствуют.
Хак.Активность и балы для сохранения/изменения. Добавляем код в
function save() в конце, перед
$this->setRedirect($link, $msg); в файлы item.php (/site/administrator/components/com_zoo/controllers/) и submission.php (/site/components/com_zoo/controllers/)
// start JomSocial integration for add/update item/submission
/*
Insert into function save()
before $this->setRedirect($link, $msg)
in file item.php (/site/administrator/components/com_zoo/controllers/)
in file submission.php (/site/components/com_zoo/controllers/)
*/
$jsLibCore = JPATH_BASE . DS . 'components' . DS . 'com_community' . DS . 'libraries' . DS . 'core.php';
if (is_file($jsLibCore)) {
require_once($jsLibCore); // JomSocial core library include
if ($this->item){
$itemID = $this->item->id;
$itemTitle = $this->item->name;
$actorCreated = $this->item->created_by;
$actorModified = $this->item->modified_by;
$state = $this->item->state;
}
if ($item){
$itemID = $item->id;
$itemTitle = $item->name;
$actorCreated = $item->created_by;
$actorModified = $item->modified_by;
$state = $item->state;
}
$appID = $this->application->id;
$appTitle = $this->application->name;
$appAlias = $this->application->alias;
$act = new stdClass();
if ($cid || $this->item_id)//if ($this->item_id) //for submission
{
$act->cmd = 'com_zoo.item.update';
$act->actor = $actorModified;
$act->target = 0; // no target
$act->title = JText::_('{multiple}{actors}{/multiple}{single}{actor}{/single} updated item <a href="'.CRoute::_('index.php?option=com_zoo&view=item&item_id='.$itemID).'">'.$itemTitle.'</a> in <a href="'.CRoute::_('index.php?option=com_zoo&view=frontpage&app_id='.$appID).'">'.$appTitle.'</a>');
$act->content = '';
$act->app = 'zoo';
$act->cid = $itemID;
$act->params = 'action='.$appAlias.'.item.update';
}
else {
$act->cmd = 'com_zoo.item.add';
$act->actor = $actorCreated;
$act->target = 0; // no target
$act->title = JText::_('{multiple}{actors}{/multiple}{single}{actor}{/single} added a new item <a href="'.CRoute::_('index.php?option=com_zoo&view=item&item_id='.$itemID).'">'.$itemTitle.'</a> in <a href="'.CRoute::_('index.php?option=com_zoo&view=frontpage&app_id='.$appID).'">'.$appTitle.'</a>');
$act->content = '';
$act->app = 'zoo';
$act->cid = $itemID;
$act->params = 'action='.$appAlias.'.item.add';
}
if ($state == 1) // if item is published - add activity&points
{
// add activity
CFactory::load('libraries', 'activities'); // activity stream library include
CActivityStream::add($act);
// add points
CFactory::load('libraries', 'userpoints'); // userpoints library include
CuserPoints::assignPoint($act->cmd,$act->actor);
}
else // else - add points
{
// add points
CFactory::load('libraries', 'userpoints'); // userpoints library include
CuserPoints::assignPoint($act->cmd,$act->actor);
}
}
// end JomSocial integration for add/update item/submission
Активность и балы для удаления итема. Правим теже файлы, только теперь функцию
remove()// start JomSocial integration for remove item/submission
/*
For item.php:
Insert into function remove()
Find // delete items
foreach ($cid as $id) {
$table->delete($table->get($id));
}
inside the loop - foreach, before $table->delete($table->get($id));
insert - $item = $table->get($id);
and after $table->delete($table->get($id));
all below the code.
For submission.php - only insert the following code after $table->delete($item);
*/
$jsLibCore = JPATH_BASE . DS . 'components' . DS . 'com_community' . DS . 'libraries' . DS . 'core.php';
if (is_file($jsLibCore)) {
require_once($jsLibCore); // JomSocial core library include
if ($item->created_by != $this->user->id){
$cleaner = $this->user->id;
}
else {
$cleaner = $item->created_by;
}
$act = new stdClass();
$act->cmd = 'com_zoo.item.remove';
$act->actor = $cleaner;
$act->target = 0; // no target
$act->title = JText::_('{multiple}{actors}{/multiple}{single}{actor}{/single} deleted item <strong>'.$item->name.'</strong> in <a href="'.CRoute::_('index.php?option=com_zoo&view=frontpage&app_id='.$this->application->id).'">'.$this->application->name.'</a>');
$act->content = '';
$act->app = 'zoo';
$act->cid = $item->id;
$act->params = 'action='.$this->application->alias.'.item.remove';
// add activity
CFactory::load('libraries', 'activities'); // activity stream library include
CActivityStream::add($act);
// add points
CFactory::load('libraries', 'userpoints'); // userpoints library include
CuserPoints::assignPoint($act->cmd, $item->created_by); // Deduct points when special user or admininstator/moderator remove item
}
// end JomSocial integration for remove item/submission
Для того чтобы начислялись очки также необходимо закинуть файл
jomsocial_rule.xml в
components/com_zoo/.
Содержимое файла ниже:
<?xml version="1.0" encoding="utf-8"?>
<jomsocial>
<component>com_zoo</component>
<rules>
<rule>
<name>Add Item</name>
<description>Give points when registered user add item.</description>
<action_string>com_zoo.item.add</action_string>
<publish>true</publish>
<points>2</points>
<access_level>1</access_level>
</rule>
<rule>
<name>Update Item</name>
<description>Give points when registered user update item.</description>
<action_string>com_zoo.item.update</action_string>
<publish>true</publish>
<points>1</points>
<access_level>2</access_level>
</rule>
<rule>
<name>Remove Item</name>
<description>Deduct points when special user or admininstator/moderator remove item.</description>
<action_string>com_zoo.item.remove</action_string>
<publish>true</publish>
<points>-2</points>
<access_level>2</access_level>
</rule>
</rules>
</jomsocial>
Для версии Zoo 2.4.х. появилась возможность создать отдельный плагин: Скачать: http://www.raslab.org/zavantazhyty/category/1-zoo.html?download=2%3Azoo2jomsocial-activity-streamВыражаю отдельную благодарность
demon1977 и
pavel_28121за помощь и консультирование.
В будущем будут обновления элемента и плагинов.