예제 #1
0
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;
    }
}
예제 #2
0
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');
}