예제 #1
0
파일: Sheet.php 프로젝트: rjsmelo/tiki
 function _install()
 {
     if ($this->canInstall()) {
         global $user;
         $sheetlib = TikiLib::lib('sheet');
         require_once 'lib/sheet/grid.php';
         //here we convert the array to that of what is acceptable to the sheet lib
         $parentSheetId = 0;
         $sheets = array();
         $nbsheets = count($this->data);
         for ($sheetI = 0; $sheetI < $nbsheets; $sheetI++) {
             $sheets[$sheetI] = new stdClass();
             $sheets[$sheetI]->rows = array();
             $sheets[$sheetI]->metadata = new stdClass();
             $sheets[$sheetI]->metadata->widths = array();
             $title = $this->data[$sheetI]['title'];
             $title = $title ? $title : "Untitled - From Profile Import";
             $nbdatasheetI = count($this->data[$sheetI]);
             if (in_array('title', array_keys($this->data[$sheetI]))) {
                 $nbdatasheetI--;
                 // do not take the title into account on the number of rows
             }
             for ($r = 0; $r < $nbdatasheetI; $r++) {
                 $nbdatasheetIr = count($this->data[$sheetI][$r]);
                 $sheets[$sheetI]->rows[$r]->columns = array();
                 for ($c = 0; $c < $nbdatasheetIr; $c++) {
                     $sheets[$sheetI]->rows[$r]->columns[$c] = new stdClass();
                     $value = "";
                     $formula = "";
                     $rawValue = $this->data[$sheetI][$r][$c];
                     if (substr($rawValue, 0, 1) == "=") {
                         $formula = $rawValue;
                     } else {
                         $value = $rawValue;
                     }
                     $sheets[$sheetI]->rows[$r]->columns[$c]->formula = $formula;
                     $sheets[$sheetI]->rows[$r]->columns[$c]->value = $value;
                     $sheets[$sheetI]->rows[$r]->columns[$c]->width = 1;
                     $sheets[$sheetI]->rows[$r]->columns[$c]->height = 1;
                 }
             }
             $sheets[$sheetI]->metadata->widths[] = $nbdatasheetIr;
             $sheets[$sheetI]->metadata->rows = $nbdatasheetI;
             $sheets[$sheetI]->metadata->columns = count($this->data[$sheetI][0]);
             $id = $sheetlib->replace_sheet(0, $title, "", $user, $parentSheetId);
             $parentSheetId = $parentSheetId ? $parentSheetId : $id;
             $grid = new TikiSheet($id);
             $handler = new TikiSheetHTMLTableHandler($sheets[$sheetI]);
             $res = $grid->import($handler);
             $handler = new TikiSheetDatabaseHandler($id);
             $grid->export($handler);
         }
         return $parentSheetId;
     }
 }
예제 #2
0
 function getDocument($objectId, Search_Type_Factory_Interface $typeFactory)
 {
     $sheetlib = TikiLib::lib('sheet');
     $info = $sheetlib->get_sheet_info($objectId);
     $values = $this->db->table('tiki_sheet_values');
     $contributors = $values->fetchColumn($values->expr('DISTINCT `user`'), array('sheetId' => $objectId));
     $lastModif = $values->fetchOne($values->max('begin'), array('sheetId' => $objectId));
     $loader = new TikiSheetDatabaseHandler($objectId);
     $writer = new TikiSheetCSVHandler('php://output');
     $grid = new TikiSheet();
     $grid->import($loader);
     $grid->export($writer);
     $text = $writer->output;
     $data = array('title' => $typeFactory->sortable($info['title']), 'description' => $typeFactory->sortable($info['description']), 'modification_date' => $typeFactory->timestamp($lastModif), 'contributors' => $typeFactory->multivalue($contributors), 'sheet_content' => $typeFactory->plaintext($text), 'view_permission' => $typeFactory->identifier('tiki_p_view_sheet'));
     return $data;
 }
예제 #3
0
파일: Sheet.php 프로젝트: jkimdon/cohomeals
 function _install()
 {
     if ($this->canInstall()) {
         global $user, $sheetlib;
         require_once 'lib/sheet/grid.php';
         //here we convert the array to that of what is acceptable to the sheet lib
         $parentSheetId = null;
         $sheets = array();
         $nbsheets = count($this->data);
         for ($sheetI = 0; $sheetI < $nbsheets; $sheetI++) {
             $title = $this->data[$sheetI]['title'];
             $title = $title ? $title : "Untitled - From Profile Import";
             $nbdatasheetI = count($this->data[$sheetI]);
             for ($r = 0; $r < $nbdatasheetI; $r++) {
                 $nbdatasheetIr = count($this->data[$sheetI][$r]);
                 for ($c = 0; $c < $nbdatasheetIr; $c++) {
                     $value = "";
                     $formula = "";
                     $rawValue = $this->data[$sheetI][$r][$c];
                     if (substr($rawValue, 0, 1) == "=") {
                         $formula = $rawValue;
                     } else {
                         $value = $rawValue;
                     }
                     $ri = 'r' . $r;
                     $ci = 'c' . $c;
                     $sheets[$sheetI]->data->{$ri}->{$ci}->formula = $formula;
                     $sheets[$sheetI]->data->{$ri}->{$ci}->value = $value;
                     $sheets[$sheetI]->data->{$ri}->{$ci}->width = 1;
                     $sheets[$sheetI]->data->{$ri}->{$ci}->height = 1;
                 }
             }
             $sheets[$sheetI]->metadata->rows = count($this->data[$sheetI]);
             $sheets[$sheetI]->metadata->columns = count($this->data[$sheetI][0]);
             $id = $sheetlib->replace_sheet(0, $title, "", $user, $parentSheetId);
             $parentSheetId = $parentSheetId ? $parentSheetId : $id;
             $grid = new TikiSheet($id);
             $handler = new TikiSheetHTMLTableHandler($sheets[$sheetI]);
             $res = $grid->import($handler);
             $handler = new TikiSheetDatabaseHandler($id);
             $grid->export($handler);
         }
         return $parentSheetId;
     }
 }
예제 #4
0
        default:
            // All file based handlers registered
            if (!in_array($handler, TikiSheet::getHandlerList())) {
                $smarty->assign('msg', "Handler is not allowed.");
                $smarty->display("error.tpl");
                die;
            }
            $handler = new $handler($_FILES['file']['tmp_name'], $encoding, 'UTF-8');
    }
    if (!$grid->import($handler)) {
        $smarty->assign('msg', "Impossible to import the file.");
        $smarty->display("error.tpl");
        die;
    }
    $handler = new TikiSheetDatabaseHandler($sheetId);
    $grid->export($handler);
    ob_start();
    $handler = new TikiSheetOutputHandler();
    $grid->export($handler);
    $smarty->assign("grid_content", ob_get_contents());
    ob_end_clean();
} else {
    $list = array();
    $encoding = new Encoding();
    $charsetList = $encoding->get_input_supported_encodings();
    $handlers = TikiSheet::getHandlerList();
    foreach ($handlers as $key => $handler) {
        $temp = new $handler();
        if (!$temp->supports(TIKISHEET_LOAD_DATA | TIKISHEET_LOAD_CALC)) {
            continue;
        }
예제 #5
0
 function save_sheet($sheets, $sheetId, $type = 'db')
 {
     global $user, $sheetlib;
     $sheets = json_decode($sheets);
     $rc = '';
     if (!empty($sheetId)) {
         $grid = new TikiSheet();
         if (is_array($sheets)) {
             foreach ($sheets as $sheet) {
                 $handler = new TikiSheetHTMLTableHandler($sheet);
                 $res = $grid->import($handler);
                 // Save the changes
                 $rc .= strlen($rc) === 0 ? '' : ', ';
                 if ($sheet->metadata->sheetId != $sheetId) {
                     $sheetIds[] = $sheet->metadata->sheetId;
                 }
                 if ($res) {
                     if (!$sheet->metadata->sheetId) {
                         if (!empty($sheet->metadata->title)) {
                             $title = $sheet->metadata->title;
                         } else {
                             $title = $info['title'] . ' subsheet';
                         }
                         $newId = $sheetlib->replace_sheet(0, $title, '', $user, $sheetId);
                         $rc .= tra('new') . " (sheetId={$newId}) ";
                         $sheet->metadata->sheetId = $newId;
                         $handler = new TikiSheetHTMLTableHandler($sheet);
                         $res = $grid->import($handler);
                     }
                     if ($sheetId && $res) {
                         $handler = new TikiSheetDatabaseHandler($sheet->metadata->sheetId);
                         $grid->export($handler);
                         $rc .= $grid->getColumnCount() . ' x ' . $grid->getRowCount() . ' ' . tra('sheet') . " (sheetId=" . $sheet->metadata->sheetId . ")";
                     }
                     if (!empty($sheet->metadata->title)) {
                         $sheetlib->set_sheet_title($sheet->metadata->sheetId, $sheet->metadata->title);
                     }
                 }
             }
         }
     }
     return $res ? tra('Saved') . ': ' . $rc : tra('Save failed');
 }
예제 #6
0
function wikiplugin_sheet($data, $params)
{
    global $dbTiki, $tiki_p_edit_sheet, $tiki_p_edit, $tiki_p_admin_sheet, $tiki_p_admin, $prefs, $user, $sheetlib, $page, $tikilib;
    extract($params, EXTR_SKIP);
    if (!class_exists('TikiSheet')) {
        require "lib/sheet/grid.php";
    }
    static $index = 0;
    ++$index;
    if (!isset($id)) {
        if ($tiki_p_edit_sheet != 'y' || $tiki_p_edit != 'y') {
            return "<b>missing id parameter for plugin</b><br />";
        } else {
            if (isset($_POST['create_sheet'], $_POST['index']) && $index == $_POST['index']) {
                // Create a new sheet and rewrite page
                $sheetId = $sheetlib->replace_sheet(null, tra('New sheet in page: ') . $page, '', $user);
                $page = htmlentities($page);
                $content = htmlentities($data);
                $formId = "form{$index}";
                return <<<EOF
~np~
<form id="{$formId}" method="post" action="tiki-wikiplugin_edit.php">
<div>
\t<input type="hidden" name="page" value="{$page}"/>
\t<input type="hidden" name="content" value="{$data}"/>
\t<input type="hidden" name="index" value="{$index}"/>
\t<input type="hidden" name="type" value="sheet"/>
\t<input type="hidden" name="params[id]" value="{$sheetId}"/>
</div>
</form>
<script type="text/javascript">
document.getElementById('{$formId}').submit();
</script>
~/np~
EOF;
            } else {
                $intro = tra('Incomplete call to plugin: No target sheet.');
                $label = tra('Create new sheet');
                return <<<EOF
~np~
<form method="post" action="">
\t<p>{$intro}</p>
\t<p>
\t\t<input type="submit" name="create_sheet" value="{$label}"/>
\t\t<input type="hidden" name="index" value="{$index}"/>
\t</p>
</form>
~/np~
EOF;
            }
        }
    }
    // Build required objects
    $sheet = new TikiSheet();
    $db = new TikiSheetDatabaseHandler($id);
    $out = new TikiSheetOutputHandler($data);
    // Fetch sheet from database
    $sheet->import($db);
    // Grab sheet output
    ob_start();
    $sheet->export($out);
    $ret = ob_get_contents();
    ob_end_clean();
    if ($tiki_p_edit_sheet == 'y' || $tiki_p_admin_sheet == 'y' || $tiki_p_admin == 'y') {
        $ret .= "<a href='tiki-view_sheets.php?sheetId={$id}&readdate=" . time() . "&mode=edit' class='linkbut'>" . tra("Edit Sheet") . "</a>";
    }
    return $ret;
}