You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

165 lines
5.5 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
function smarty_function_multilike($params, $smarty)
{
global $prefs, $user;
$relationlib = TikiLib::lib("relation");
$multivalues = get_multivalues_from_pref($params['relation_prefix']);
$item = [];
foreach ($multivalues as $mv) {
if ($mv['relation_prefix'] == $params['relation_prefix']) {
$config = $mv;
break;
}
}
if (empty($config)) {
return tr("Multivalue configuration not found");
}
$totalCount = 0;
$totalPoints = 0;
$buttons = [];
foreach ($config['labels'] as $key => $label) {
$button = [];
$button['index'] = $key;
$button['id'] = $config['ids'][$key];
if (isset($config['values'])) {
$button['value'] = $config['values'][$key];
}
$button['label'] = $label;
$button['relation'] = $params['relation_prefix'] . "." . $button['id'];
// check if there is an unselected icon else use default thumbs up open
if (! empty($config['icon_unselected'][$key])) {
$button['icon_unselected'] = $config['icon_unselected'][$key];
} else {
$button['icon_unselected'] = "thumbs-o-up";
}
// check if there is an selected icon else use default thumbs up
if (! empty($config['icon_selected'][$key])) {
$button['icon_selected'] = $config['icon_selected'][$key];
} else {
$button['icon_selected'] = "thumbs-up";
}
//get existing stats
$button['count'] = $relationlib->get_relation_count($button['relation'], $params['type'], $params['object']);
$totalCount += $button['count'];
if ($button['value']) {
$button['points'] = $button['count'] * $button['value'];
$totalPoints += $button['points'];
}
// set whether already selected
if ($relationlib->get_relation_id($button['relation'], "user", $user, $params['type'], $params['object'])) {
$button['selected'] = 1;
$smarty->assign('has_selection', 1);
} else {
$button['selected'] = 0;
}
$buttons[] = $button;
}
if (! empty($params['onlyShowTotalPoints'])) {
return $totalPoints;
}
if (! empty($params['onlyShowTotalLikes'])) {
return $totalCount;
}
if (! empty($params['showOptionTotals'])) {
$smarty->assign("show_option_totals", true);
}
if (! empty($params['showInPopup']) && $params['showInPopup'] == 'y') {
$smarty->assign("show_in_popup", true);
}
$smarty->assign("popup_placement", "left"); //default
if (! empty($params['popupPlacement'])) {
$smarty->assign("popup_placement", $params['popupPlacement']);
}
if (! empty($params['showPoints']) && strtolower($params['showPoints']) != 'n') {
$smarty->assign("show_points", true);
}
if (! empty($params['showLikes']) && strtolower($params['showLikes']) == 'n') {
$smarty->assign("show_likes", false);
} else {
$smarty->assign("show_likes", true);
}
if (! empty($params['choiceLabel'])) {
$smarty->assign("choice_label", $params['choiceLabel']);
} else {
$smarty->assign("choice_label", "I found this:");
}
if (! empty($params['orientation']) && strtolower($params['orientation']) == 'vertical') {
$smarty->assign("orientation", 'vertical');
} else {
$smarty->assign("orientation", 'horizontal');
}
$smarty->assign("buttons", $buttons);
$smarty->assign("type", $params['type']);
$smarty->assign("object", $params['object']);
$smarty->assign("totalCount", $totalCount);
$smarty->assign("totalPoints", $totalPoints);
$smarty->assign("relation_prefix", $params['relation_prefix']);
$smarty->assign("icon_unselected", $config['icon_unselected']);
$smarty->assign("icon_selected", $config['icon_selected']);
$smarty->assign("multilike_many", $config['allow_multi']);
$smarty->assign("uses_values", isset($config['values']));
$headerlib = TikiLib::lib('header');
$headerlib->add_jsfile("lib/jquery_tiki/multilike.js");
if (empty($params['template'])) {
return $smarty->fetch('multilike.tpl');
} else {
return $smarty->fetch($params['template']);
}
}
/**
* @param $mv
* @return array
*/
function get_multivalues_from_pref()
{
global $prefs;
$data = (explode("\n\n", trim($prefs['user_multilike_config'])));
$configurations = [];
foreach ($data as $config) {
preg_match_all("/(\S*)\s*=\s*(.*)/", $config, $temp_arr);
$config = array_combine($temp_arr[1], $temp_arr[2]);
if ($config['values']) {
$config['values'] = array_map('trim', explode(',', $config['values']));
}
$config['labels'] = array_map('trim', explode(',', $config['labels']));
$config['icon_unselected'] = array_map('trim', explode(',', $config['icon_unselected']));
$config['icon_selected'] = array_map('trim', explode(',', $config['icon_selected']));
foreach ($config['labels'] as &$label) {
$label = tra($label);
}
unset($label);
if (empty($config['ids'])) {
return;
}
$config['ids'] = array_map('trim', explode(',', $config['ids']));
$configurations[] = $config;
}
return $configurations;
}