function wikiplugin_trackertimeline($data, $params) { $trklib = TikiLib::lib('trk'); $tikilib = TikiLib::lib('tiki'); $smarty = TikiLib::lib('smarty'); static $instance = 0; $instance++; if (!isset($params['tracker'])) { return "^" . tr("Missing parameter: %0", 'tracker') . "^"; } $default = array('scale1' => 'hour', 'simile_timeline' => 'n', 'height' => '250px', 'band2_height' => 30); $params = array_merge($default, $params); $formats = array('hour' => 'H:i', 'day' => 'jS', 'week' => 'jS', 'month' => 'm', 'year' => 'y'); $start = strtotime($params['lower']); $end = strtotime($params['upper']); $size = $end - $start; if ($size <= 0) { return "^" . tr("Start date after end date.") . "^"; } $fieldIds = array($params['title'] => 'title', $params['summary'] => 'summary', $params['start'] => 'start', $params['end'] => 'end', $params['group'] => 'group'); if (isset($params['link_page'])) { $fieldIds[$params['link_page']] = 'link'; } if (!empty($params['image_field'])) { $fieldIds[$params['image_field']] = 'image'; } $fields = array(); foreach ($fieldIds as $id => $label) { $fields[$id] = $trklib->get_tracker_field($id); } $items = $trklib->list_items($params['tracker'], 0, -1, '', $fields); $data = array(); foreach ($items['data'] as $item) { // Collect data $detail = array('item' => $item['itemId']); foreach ($item['field_values'] as $field) { $detail[$fieldIds[$field['fieldId']]] = $field['value']; } // Filter elements if ($params['simile_timeline'] !== 'y') { if ($detail['start'] >= $detail['end']) { continue; } if ($detail['end'] <= $start || $detail['start'] > $end) { continue; } } else { if (!empty($detail['end']) && $detail['start'] > $detail['end']) { continue; } if (!empty($detail['end']) && $detail['end'] < $start || $detail['start'] > $end) { continue; } } $detail['lstart'] = max($start, $detail['start']); $detail['lend'] = min($end, $detail['end']); $detail['lsize'] = round(($detail['lend'] - $detail['lstart']) / $size * 80); $detail['fstart'] = date($formats[$params['scale1']], $detail['start']); $detail['fend'] = date($formats[$params['scale1']], $detail['end']); $detail['psummary'] = $tikilib->parse_data($detail['summary']); $detail['encoded'] = json_encode($detail); // Add to data list if (!array_key_exists($detail['group'], $data)) { $data[$detail['group']] = array(); } $data[$detail['group']][] = $detail; } if ($params['simile_timeline'] !== 'y') { $new = array(); foreach ($data as $group => &$list) { wp_ttl_organize($group, $start, $size, $list, $new); } $data = array_merge($data, $new); ksort($data); $smarty->assign('wp_ttl_data', $data); $layouts = array(); if (isset($params['scale2']) && ($layout = wp_ttl_genlayout($start, $end, $size, $params['scale2']))) { $layouts[] = $layout; } $layouts[] = wp_ttl_genlayout($start, $end, $size, isset($params['scale1']) ? $params['scale1'] : 'hour'); $smarty->assign('layouts', $layouts); $smarty->assign('link_group_names', isset($params['link_group']) && $params['link_group'] == 'y'); return $smarty->fetch('wiki-plugins/wikiplugin_trackertimeline.tpl'); } else { // SIMILE Timeline Widget setup $headerlib = TikiLib::lib('header'); // static js moved to lib $headerlib->add_jsfile('lib/simile_tiki/tiki-timeline.js'); // prepare the data for SIMILE widget - to be included in the page for now (ajax feed to come) $ttl_data = array(); $events = array(); foreach ($data as $group => $list) { // ignoring group for now foreach ($list as $item) { $event = array('title' => $item['title'], 'start' => date('r', $item['start']), 'description' => $item['summary']); if (!empty($item['end'])) { $event['end'] = date('r', $item['end']); $event['isDuration'] = true; } if (!empty($item['link'])) { $event['link'] = $item['link']; } if (!empty($item['image'])) { $event['image'] = $item['image']; } $events[] = $event; } $ttl_data = array('dateTimeFormat' => '', 'events' => $events); } $js = 'var ttl_eventData_' . $instance . ' = ' . json_encode($ttl_data) . ";\n"; $js .= ' setTimeout( function(){ ttlInit("ttl_timeline_' . $instance . '",ttl_eventData_' . $instance . ',"' . $params['scale1'] . '","' . $params['scale2'] . '","' . $params['band2_height'] . '"); }, 1000); '; $headerlib->add_jq_onready($js, 10); $out = '<div id="ttl_timeline_' . $instance . '" style="height: ' . $params['height'] . '; border: 1px solid #aaa"></div>'; return $out; } }
function wikiplugin_trackertimeline($data, $params) { global $trklib, $smarty, $tikilib; require_once 'lib/trackers/trackerlib.php'; if (!isset($params['tracker'])) { return "^" . tr("Missing parameter: %0", 'tracker') . "^"; } $start = strtotime($params['lower']); $end = strtotime($params['upper']); $size = $end - $start; if ($size <= 0) { return "^" . tr("Start date after end date.") . "^"; } $fieldIds = array($params['title'] => 'title', $params['summary'] => 'summary', $params['start'] => 'start', $params['end'] => 'end', $params['group'] => 'group'); if (isset($params['link_page'])) { $fieldIds[$params['link_page']] = 'link'; } $fields = array(); foreach ($fieldIds as $id => $label) { $fields[$id] = $trklib->get_tracker_field($id); } $items = $trklib->list_items($params['tracker'], 0, -1, '', $fields); $data = array(); foreach ($items['data'] as $item) { // Collect data $detail = array('item' => $item['itemId']); foreach ($item['field_values'] as $field) { $detail[$fieldIds[$field['fieldId']]] = $field['value']; } // Filter elements if ($detail['start'] >= $detail['end']) { continue; } if ($detail['end'] <= $start || $detail['start'] > $end) { continue; } $detail['lstart'] = max($start, $detail['start']); $detail['lend'] = min($end, $detail['end']); $detail['lsize'] = round(($detail['lend'] - $detail['lstart']) / $size * 80); $detail['fstart'] = date('H:i', $detail['start']); $detail['fend'] = date('H:i', $detail['end']); $detail['psummary'] = $tikilib->parse_data($detail['summary']); $detail['encoded'] = json_encode($detail); // Add to data list if (!array_key_exists($detail['group'], $data)) { $data[$detail['group']] = array(); } $data[$detail['group']][] = $detail; } $new = array(); foreach ($data as $group => &$list) { wp_ttl_organize($group, $start, $size, $list, $new); } $data = array_merge($data, $new); ksort($data); $smarty->assign('wp_ttl_data', $data); $layouts = array(); if (isset($params['scale2']) && ($layout = wp_ttl_genlayout($start, $end, $size, $params['scale2']))) { $layouts[] = $layout; } $layouts[] = wp_ttl_genlayout($start, $end, $size, isset($params['scale1']) ? $params['scale1'] : 'hour'); $smarty->assign('layouts', $layouts); $smarty->assign('link_group_names', isset($params['link_group']) && $params['link_group'] == 'y'); return $smarty->fetch('wiki-plugins/wikiplugin_trackertimeline.tpl'); }