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