1<?php 2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project 3// 4// All Rights Reserved. See copyright.txt for details and a complete list of authors. 5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. 6// $Id$ 7 8class Tiki_Profile_InstallHandler_Sheet extends Tiki_Profile_InstallHandler 9{ 10 function getData() 11 { 12 if ($this->data) { 13 return $this->data; 14 } 15 $data = $this->obj->getData(); 16 $this->replaceReferences($data); 17 18 return $this->data = $data; 19 } 20 21 function canInstall() 22 { 23 $data = $this->getData(); 24 25 if (isset($data)) { 26 return true; 27 } else { 28 return false; 29 } 30 } 31 32 function _install() 33 { 34 if ($this->canInstall()) { 35 global $user; 36 $sheetlib = TikiLib::lib('sheet'); 37 require_once('lib/sheet/grid.php'); 38 39 //here we convert the array to that of what is acceptable to the sheet lib 40 $parentSheetId = 0; 41 $sheets = []; 42 $nbsheets = count($this->data); 43 for ($sheetI = 0; $sheetI < $nbsheets; $sheetI++) { 44 $sheets[$sheetI] = new stdClass(); 45 $sheets[$sheetI]->rows = []; 46 $sheets[$sheetI]->metadata = new stdClass(); 47 $sheets[$sheetI]->metadata->widths = []; 48 49 $title = (isset($this->data[$sheetI]['title']) && $this->data[$sheetI]['title']) ? $this->data[$sheetI]['title'] : tra("Untitled - From Profile Import"); 50 51 $rows = []; 52 if (isset($this->data[$sheetI]['rows'])) { 53 $rows = $this->data[$sheetI]['rows']; 54 } elseif (isset($this->data[$sheetI][0])) { 55 $rows = $this->data[$sheetI]; 56 if (isset($rows['title'])) { 57 unset($rows['title']); 58 } 59 } 60 $nbdatasheetI = count($rows); 61 for ($r = 0; $r < $nbdatasheetI; $r++) { 62 $nbdatasheetIr = count($rows[$r]); 63 $sheets[$sheetI]->rows[$r]->columns = []; 64 65 for ($c = 0; $c < $nbdatasheetIr; $c++) { 66 $sheets[$sheetI]->rows[$r]->columns[$c] = new stdClass(); 67 68 $value = ""; 69 $formula = ""; 70 $rawValue = $rows[$r][$c]; 71 72 if (substr($rawValue, 0, 1) == "=") { 73 $formula = $rawValue; 74 } else { 75 $value = $rawValue; 76 } 77 78 $sheets[$sheetI]->rows[$r]->columns[$c]->formula = $formula; 79 $sheets[$sheetI]->rows[$r]->columns[$c]->value = $value; 80 81 $sheets[$sheetI]->rows[$r]->columns[$c]->width = 1; 82 $sheets[$sheetI]->rows[$r]->columns[$c]->height = 1; 83 } 84 } 85 86 $sheets[$sheetI]->metadata->widths[] = $nbdatasheetIr; 87 $sheets[$sheetI]->metadata->rows = $nbdatasheetI; 88 $sheets[$sheetI]->metadata->columns = count($rows[0]); 89 90 $id = $sheetlib->replace_sheet(0, $title, "", $user, $parentSheetId); 91 $parentSheetId = ($parentSheetId ? $parentSheetId : $id); 92 93 $grid = new TikiSheet($id); 94 $handler = new TikiSheetHTMLTableHandler($sheets[$sheetI]); 95 $res = $grid->import($handler); 96 $handler = new TikiSheetDatabaseHandler($id); 97 $grid->export($handler); 98 } 99 100 return $parentSheetId; 101 } 102 } 103 104 /** 105 * Get current spreadsheet data 106 * 107 * @param array $spreadsheets 108 * @return mixed 109 */ 110 public function getCurrentData($spreadsheets) 111 { 112 if (! empty($spreadsheets)) { 113 $sheetlib = TikiLib::lib('sheet'); 114 $spreadsheetsData = []; 115 foreach ($spreadsheets as $sheet) { 116 if (! empty($sheet['title'])) { 117 $sheetData = $sheetlib->list_sheets(0, 1, 'sheetId_desc', $sheet['title']); 118 $sheetId = ! empty($sheetData['data']) ? key($sheetData['data']) : 0; 119 if (! empty($sheetId)) { 120 $sheetData = $sheetData['data'][$sheetId]; 121 $sheetData['layout'] = $sheetlib->get_sheet_layout($sheetId); 122 $sheetData['rows'] = $sheetlib->getSheetValue($sheetId); 123 $spreadsheetsData[] = $sheetData; 124 } 125 } 126 } 127 return $spreadsheets; 128 } 129 return false; 130 } 131} 132