Exemplo n.º 1
0
 /**
  * Print a simple listing table
  *
  * @param array  $data
  * @param float  $max
  * @param string $title
  * @param bool   $istraffic
  * @return void
  */
 private function listtable(&$data, $max, $title, $istraffic = false)
 {
     if (!$data) {
         $data = array();
     }
     arsort($data);
     $row = 1;
     $this->R->table_open();
     $this->R->tablerow_open();
     $this->head($title, 4);
     $this->R->tablerow_close();
     $this->R->tablerow_open();
     $this->head('#');
     $this->head($this->getLang('name'));
     if ($istraffic) {
         $this->head($this->getLang('traffic'), 2);
     } else {
         $this->head($this->getLang('hits'), 2);
     }
     $this->R->tablerow_close();
     foreach ($data as $key => $count) {
         if ($istraffic) {
             $val = filesize_h($count);
         } else {
             $val = $count;
         }
         $this->R->tablerow_open();
         $this->cell($row);
         $this->hcell($key);
         $this->cell($val);
         $this->cell($this->pct($count, $max));
         $this->R->tablerow_close();
         $row++;
         if ($row > $this->log->top_limit) {
             break;
         }
     }
     $this->R->table_close();
 }
/**
 * Renders activity report to the page
 * @param string        $mode     Name of the format mode
 * @param Doku_Renderer $renderer ref to the Doku_Renderer
 * @param array         $params   Parameter object returned by handle()
 */
function renderActivityByNamespaceReport($mode, Doku_Renderer $renderer, $params)
{
    global $CHUNKPROGRESS_STATUS_TAGS;
    $renderer->table_open();
    $renderer->tablerow_open();
    $renderer->tablecell_open();
    $renderer->strong_open();
    $renderer->unformatted("Namespace");
    $renderer->strong_close();
    $renderer->tablecell_close();
    foreach ($CHUNKPROGRESS_STATUS_TAGS as $status) {
        $renderer->tablecell_open();
        $renderer->strong_open();
        $renderer->unformatted($status);
        $renderer->strong_close();
        $renderer->tablecell_close();
    }
    $renderer->tablerow_close();
    $count_by_sub_namespace_then_status = $params["count_by_sub_namespace_then_status"];
    foreach ($count_by_sub_namespace_then_status as $sub_namespace => $statuses) {
        $renderer->tablerow_open();
        $renderer->tablecell_open();
        $renderer->unformatted($sub_namespace);
        $renderer->tablecell_close();
        foreach ($CHUNKPROGRESS_STATUS_TAGS as $status) {
            $renderer->tablecell_open();
            if (array_key_exists($status, $statuses)) {
                $renderer->unformatted($statuses[$status]);
            }
            $renderer->tablecell_close();
        }
        $renderer->tablerow_close();
    }
    $renderer->table_close();
}
Exemplo n.º 3
0
 /**
  * Render schema data
  *
  * Currently completely renderer agnostic
  *
  * @todo we currently have no schema headlines
  *
  * @param string $mode Renderer mode
  * @param Doku_Renderer $R The renderer
  * @param array $data The data from the handler() function
  * @return bool If rendering was successful.
  */
 public function render($mode, Doku_Renderer $R, $data)
 {
     global $ID;
     global $INFO;
     global $REV;
     if ($ID != $INFO['id']) {
         return true;
     }
     if (!$INFO['exists']) {
         return true;
     }
     if ($this->hasBeenRendered) {
         return true;
     }
     // do not render the output twice on the same page, e.g. when another page has been included
     $this->hasBeenRendered = true;
     $assignments = new Assignments();
     $tables = $assignments->getPageAssignments($ID);
     if (!$tables) {
         return true;
     }
     if ($mode == 'xhtml') {
         $R->doc .= '<div id="plugin__struct_output">';
     }
     foreach ($tables as $table) {
         $schemadata = AccessTable::byTableName($table, $ID, $REV);
         $schemadata->optionSkipEmpty(true);
         $data = $schemadata->getData();
         if (!count($data)) {
             continue;
         }
         $R->table_open();
         $R->tablethead_open();
         $R->tablerow_open();
         $R->tableheader_open(2);
         $R->cdata($table);
         $R->tableheader_close();
         $R->tablerow_close();
         $R->tablethead_open();
         $R->tabletbody_open();
         foreach ($data as $field) {
             $R->tablerow_open();
             $R->tableheader_open();
             $R->cdata($field->getColumn()->getTranslatedLabel());
             $R->tableheader_close();
             $R->tablecell_open();
             $field->render($R, $mode);
             $R->tablecell_close();
             $R->tablerow_close();
         }
         $R->tabletbody_close();
         $R->table_close();
     }
     if ($mode == 'xhtml') {
         $R->doc .= '</div>';
     }
     return true;
 }
Exemplo n.º 4
0
 /**
  * Create output
  */
 function render($mode, Doku_Renderer &$renderer, $opt)
 {
     if ($mode == 'metadata') {
         return false;
     }
     // load file data
     if ($opt['file']) {
         if (preg_match('/^https?:\\/\\//i', $opt['file'])) {
             require_once DOKU_INC . 'inc/HTTPClient.php';
             $http = new DokuHTTPClient();
             $opt['content'] = $http->get($opt['file']);
             if ($opt['content'] === false) {
                 $renderer->cdata('Failed to fetch remote CSV data');
                 return true;
             }
         } else {
             $renderer->info['cache'] = false;
             if (auth_quickaclcheck(getNS($opt['file']) . ':*') < AUTH_READ) {
                 $renderer->cdata('Access denied to CSV data');
                 return true;
             } else {
                 $file = mediaFN($opt['file']);
                 $opt['content'] = io_readFile($file);
             }
         }
         // if not valid UTF-8 is given we assume ISO-8859-1
         if (!utf8_check($opt['content'])) {
             $opt['content'] = utf8_encode($opt['content']);
         }
     }
     // check if there is content
     $content =& $opt['content'];
     $content = trim($content);
     if ($content === '') {
         $renderer->cdata('No csv data found');
         return true;
     }
     // Export the csv file
     $targetfile = '';
     $export = $opt['export'];
     if ($export != '') {
         $targetfile = htmlspecialchars(trim($export));
         if (auth_quickaclcheck(getNS($targetfile . ':*')) < AUTH_EDIT) {
             $renderer->cdata('Access denied: Could not create download link.');
             $targetfile = '';
             return true;
         } else {
             $file = mediaFN($targetfile);
             if (file_put_contents($file, $content, LOCK_EX) > 0) {
                 $linkname = $opt['linkname'];
                 if ($linkname == '') {
                     $linkname = 'Download CSV file';
                 }
             } else {
                 $targetfile = '';
                 $renderer->cdata('Failed to write ' . $file . ': Could not create download link.');
                 return true;
             }
         }
     }
     // get the first row - it will define the structure
     $row = $this->csv_explode_row($content, $opt['delim'], $opt['enclosure'], $opt['escape']);
     $maxcol = count($row);
     $line = 0;
     // create the table and start rendering
     $renderer->table_open($maxcol);
     while ($row !== false) {
         // make sure we have enough columns
         $row = array_pad($row, $maxcol, '');
         // render
         $renderer->tablerow_open();
         for ($i = 0; $i < $maxcol;) {
             $span = 1;
             // lookahead to find spanning cells
             if ($opt['span_empty_cols']) {
                 for ($j = $i + 1; $j < $maxcol; $j++) {
                     if ($row[$j] === '') {
                         $span++;
                     } else {
                         break;
                     }
                 }
             }
             // open cell
             if ($line < $opt['hdr_rows'] || $i < $opt['hdr_cols']) {
                 $renderer->tableheader_open($span);
             } else {
                 $renderer->tablecell_open($span);
             }
             // print cell content, call linebreak() for newlines
             $lines = explode("\n", $row[$i]);
             $cnt = count($lines);
             for ($k = 0; $k < $cnt; $k++) {
                 $renderer->cdata($lines[$k]);
                 if ($k < $cnt - 1) {
                     $renderer->linebreak();
                 }
             }
             // close cell
             if ($line < $opt['hdr_rows'] || $i < $opt['hdr_cols']) {
                 $renderer->tableheader_close();
             } else {
                 $renderer->tablecell_close();
             }
             $i += $span;
         }
         $renderer->tablerow_close();
         // get next row
         $row = $this->csv_explode_row($content, $opt['delim'], $opt['enclosure'], $opt['escape']);
         $line++;
     }
     $renderer->table_close();
     if ($targetfile != '') {
         $renderer->internalmedia($targetfile, $linkname);
     }
     return true;
 }
Exemplo n.º 5
0
/**
 * @param string        $mode     Name of the format mode
 * @param Doku_Renderer $renderer ref to the Doku_Renderer
 * @param array         $params   Parameter object returned by handle()
 */
function renderActivityByUserReport($mode, Doku_Renderer $renderer, $params)
{
    global $CHUNKPROGRESS_STATUS_TAGS;
    $renderer->table_open();
    $renderer->tablerow_open();
    $renderer->tablecell_open();
    $renderer->strong_open();
    $renderer->unformatted("User");
    $renderer->strong_close();
    $renderer->tablecell_close();
    foreach ($CHUNKPROGRESS_STATUS_TAGS as $status) {
        $renderer->tablecell_open();
        $renderer->strong_open();
        $renderer->unformatted($status);
        $renderer->strong_close();
        $renderer->tablecell_close();
    }
    $renderer->tablerow_close();
    $user_status_count = $params["user_status_count"];
    foreach ($user_status_count as $user => $statuses) {
        $renderer->tablerow_open();
        $renderer->tablecell_open();
        $renderer->unformatted($user);
        $renderer->tablecell_close();
        foreach ($CHUNKPROGRESS_STATUS_TAGS as $status) {
            $renderer->tablecell_open();
            if (array_key_exists($status, $statuses)) {
                $renderer->unformatted($statuses[$status]);
            }
            $renderer->tablecell_close();
        }
        $renderer->tablerow_close();
    }
    $renderer->table_close();
}
Exemplo n.º 6
0
 /**
  * Create table header
  *
  * @param array         $clist keys of the columns
  * @param array         $data  instruction by handler
  * @param Doku_Renderer $R     the current DokuWiki renderer
  */
 function preList($clist, $data, Doku_Renderer $R)
 {
     global $ID;
     global $conf;
     // Save current request params to not loose them
     $cur_params = $this->dthlp->_get_current_param();
     //show active filters
     $text = '<div class="table dataaggregation">';
     if (isset($_REQUEST['dataflt'])) {
         $filters = $this->dthlp->_get_filters();
         $fltrs = array();
         foreach ($filters as $filter) {
             if (strpos($filter['compare'], 'LIKE') !== false) {
                 if (strpos($filter['compare'], 'NOT') !== false) {
                     $comparator_value = '!~' . str_replace('%', '*', $filter['value']);
                 } else {
                     $comparator_value = '*~' . str_replace('%', '', $filter['value']);
                 }
                 $fltrs[] = $filter['key'] . $comparator_value;
             } else {
                 $fltrs[] = $filter['key'] . $filter['compare'] . $filter['value'];
             }
         }
         $text .= '<div class="filter">';
         $text .= '<h4>' . sprintf($this->getLang('tablefilteredby'), hsc(implode(' & ', $fltrs))) . '</h4>';
         $text .= '<div class="resetfilter">' . '<a href="' . wl($ID) . '">' . $this->getLang('tableresetfilter') . '</a>' . '</div>';
         $text .= '</div>';
     }
     // build table
     $text .= '<table class="inline dataplugin_table ' . $data['classes'] . '">';
     // build column headers
     $text .= '<tr>';
     if ($data['rownumbers']) {
         $text .= '<th>#</th>';
     }
     foreach ($data['headers'] as $num => $head) {
         $ckey = $clist[$num];
         $width = '';
         if (isset($data['widths'][$num]) and $data['widths'][$num] != '-') {
             $width = ' style="width: ' . $data['widths'][$num] . ';"';
         }
         $text .= '<th' . $width . '>';
         // add sort arrow
         if (isset($data['sort']) && $ckey == $data['sort'][0]) {
             if ($data['sort'][1] == 'ASC') {
                 $text .= '<span>&darr;</span> ';
                 $ckey = '^' . $ckey;
             } else {
                 $text .= '<span>&uarr;</span> ';
             }
         }
         // Clickable header for dynamic sorting
         $text .= '<a href="' . wl($ID, array('datasrt' => $ckey) + $cur_params) . '" title="' . $this->getLang('sort') . '">' . hsc($head) . '</a>';
         $text .= '</th>';
     }
     $text .= '</tr>';
     // Dynamic filters
     if ($data['dynfilters']) {
         $text .= '<tr class="dataflt">';
         if ($data['rownumbers']) {
             $text .= '<th></th>';
         }
         foreach ($data['headers'] as $num => $head) {
             $text .= '<th>';
             $form = new Doku_Form(array('method' => 'GET'));
             $form->_hidden = array();
             if (!$conf['userewrite']) {
                 $form->addHidden('id', $ID);
             }
             $key = 'dataflt[' . $data['cols'][$clist[$num]]['colname'] . '*~' . ']';
             $val = isset($cur_params[$key]) ? $cur_params[$key] : '';
             // Add current request params
             foreach ($cur_params as $c_key => $c_val) {
                 if ($c_val !== '' && $c_key !== $key) {
                     $form->addHidden($c_key, $c_val);
                 }
             }
             $form->addElement(form_makeField('text', $key, $val, ''));
             $text .= $form->getForm();
             $text .= '</th>';
         }
         $text .= '</tr>';
     }
     switch ($R->getFormat()) {
         case 'xhtml':
             $R->doc .= $text;
             break;
         case 'odt':
             $R->p_close();
             $ncols = count($data['headers']);
             if ($data['rownumbers']) {
                 $ncols += 1;
             }
             $R->table_open($ncols);
             $R->tablerow_open();
             if ($data['rownumbers']) {
                 $R->tableheader_open();
                 $R->tableheader_close();
             }
             foreach ($data['headers'] as $num => $head) {
                 $R->tableheader_open();
                 $R->doc .= $head;
                 $R->tableheader_close();
             }
             $R->tablerow_close();
             break;
     }
 }