function wikiplugin_contributionsdashboard($data, $params) { global $tikilib, $headerlib, $user; $trklib = TikiLib::lib("trk"); $logsqrylib = TikiLib::lib("logsqry"); $smarty = TikiLib::lib("smarty"); static $iContributionsDashboard = 0; ++$iContributionsDashboard; $i = $iContributionsDashboard; $smarty->assign('iContributionsDashboard', $iContributionsDashboard); $default = array("start" => time() - 365 * 24 * 60 * 60, "end" => time(), "types" => "trackeritems,toptrackeritemsusers,toptrackeritemsusersip"); $params = array_merge($default, $params); extract($params, EXTR_SKIP); $start = !empty($_REQUEST["raphaelStart{$i}"]) ? strtotime($_REQUEST["raphaelStart{$i}"]) : $start; $end = !empty($_REQUEST["raphaelEnd{$i}"]) ? strtotime($_REQUEST["raphaelEnd{$i}"]) : $end; $types = explode(',', $types); $headerlib->add_jsfile("vendor/jquery/jquery-sheet/plugins/raphael-min.js", "external"); $headerlib->add_jsfile("vendor/jquery/jquery-sheet/plugins/g.raphael-min.js", "external"); $headerlib->add_jq_onready("\$('.cDashDate').datepicker();"); $usersTrackerItems = array(); foreach ($tikilib->fetchAll("SELECT itemId FROM tiki_tracker_items WHERE createdBy = ?", array("simon")) as $item) { $usersTrackerItems[] = $item['itemId']; } $headerlib->add_jq_onready("\$.fn.chart = function(s) {\n\t\t\ts = \$.extend({\n\t\t\t\tlabels: [],\n\t\t\t\tdata: []\n\t\t\t}, s);\n\n\t\t\tvar me = \$(this);\n\t\t\tvar r = Raphael(me[0]);\n\n\t\t\tr.g.barchart(10,10, me.width(), me.height(), [s.data])\n\t\t\t\t.hover(function () {\n\t\t\t\t\tthis.flag = r.g.popup(\n\t\t\t\t\t\tthis.bar.x,\n\t\t\t\t\t\tthis.bar.y,\n\t\t\t\t\t\ts.labels[\$(this.bar.node).index() - 2] + ' - ' + this.bar.value || '0'\n\t\t\t\t\t).insertBefore(this);\n\t\t\t\t},function () {\n\t\t\t\t\tthis.flag.animate({\n\t\t\t\t\t\topacity: 0\n\t\t\t\t\t},\n\t\t\t\t\t300,\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tthis.remove();\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\tif (s.label) r.g.label(\$(this).width() / 2,30, s.label);\n\t\t};"); foreach ($types as $type) { if ($type == "trackeritems") { $data = array(); $dates = array(); foreach (LogsQueryLib::trackerItem()->start($start)->end($end)->countByDateFilterId($usersTrackerItems) as $date => $count) { $data[] = $count * 1; $dates[] = $date; } $headerlib->add_jq_onready("\$('#raphaelTrackeritems{$i}').chart({\n\t\t\t\t\tlabels: \t" . json_encode($dates) . ",\n\t\t\t\t\tdata:\t\t" . json_encode($data) . ",\n\t\t\t\t\tlabel:\t\t'Tracker Item Activity Grouped By Date'\n\t\t\t\t});"); $result .= "<div id='raphaelTrackeritems{$i}' style='width: 100%; height: 400px; display: block;'></div>"; } if ($type == "toptrackeritemsusers") { $hits = array(); $users = array(); foreach (LogsQueryLib::trackerItem()->start($start)->end($end)->countUsersFilterId($usersTrackerItems) as $user => $count) { $hits[] = $count; $users[] = $user; } $headerlib->add_jq_onready("\$('#raphaelTrackeritemsUsers{$i}').chart({\n\t\t\t\t\tlabels: \t" . json_encode($users) . ",\n\t\t\t\t\tdata:\t\t" . json_encode($hits) . ",\n\t\t\t\t\tlabel:\t\t'Tracker Item Activity Grouped By Users'\n\t\t\t\t});"); $result .= "<div id='raphaelTrackeritemsUsers{$i}' style='width: 100%; height: 400px; display: block;'></div>"; } if ($type == "toptrackeritemsusersip") { $hits = array(); $users = array(); foreach (LogsQueryLib::trackerItem()->start($start)->end($end)->countUsersIPFilterId($usersTrackerItems) as $data => $count) { $data = json_decode($data); $hits[] = $count; $users[] = $data->user . ' ' . $data->ip; } $headerlib->add_jq_onready("\$('#raphaelTrackeritemsUsersIP{$i}').chart({\n\t\t\t\t\tlabels: \t" . json_encode($users) . ",\n\t\t\t\t\tdata:\t\t" . json_encode($hits) . ",\n\t\t\t\t\tlabel:\t\t'Tracker Item Activity Grouped By Users & IP Address'\n\t\t\t\t});"); $result .= "<div id='raphaelTrackeritemsUsersIP{$i}' style='width: 100%; height: 400px; display: block;'></div>"; } } return "\n\t\t\t<style>\n\t\t\t\t.header {\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t}\n\t\t\t\t.headerHelper {\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\tfloat: right;\n\t\t\t\t\tpadding: 0px;\n\t\t\t\t\tmargin-top: -7px;\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<div class='ui-widget ui-widget-content ui-corner-all'>\n\t\t\t\t<h3 class='header ui-state-default ui-corner-tl ui-corner-tr' style='margin: 0; padding: 5px;'>\n\t\t\t\t\t" . tr("Contributions Dashboard") . "\n\t\t\t\t\t<form class='headerHelper'>\n\t\t\t\t\t\t" . tr("Date Range") . "\n\t\t\t\t\t\t<input type='text' name='raphaelStart{$i}' id='raphaelStart{$i}' class='cDashDate' value='" . strftime("%m/%d/%Y", $start) . "' />\n\t\t\t\t\t\t<input type='text' name='raphaelEnd{$i}' id='raphaelEnd{$i}' class='cDashDate' value='" . strftime("%m/%d/%Y", $end) . "' />\n\t\t\t\t\t\t<input type='hidden' name='refresh' value='1' />\n\t\t\t\t\t\t<input type='submit' id='raphaelUpdate{$i}' value='" . tr("Update") . "' />\n\t\t\t\t\t</form>\n\t\t\t\t</h3>\n\t\t\t\t{$result}\n\t\t\t</div>"; }
static function url($id = "") { return LogsQueryLib::type("url")->id($id); }