From: <rob...@us...> - 2011-02-04 23:11:57
|
Revision: 32441 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=32441&view=rev Author: robertplummer Date: 2011-02-04 23:11:50 +0000 (Fri, 04 Feb 2011) Log Message: ----------- [MOD] Changed all the CSV parsers in grid.php to use the new ways [MOD] Changed url for wiki plugin "sheet" to load at the server and remove any scripting for injections. We can now use sheet to open any accessible csv file or html :) pretty cool! [FIX] A few size fixes in sheet html Modified Paths: -------------- trunk/lib/sheet/grid.php trunk/lib/wiki-plugins/wikiplugin_sheet.php trunk/templates/tiki-edit_help_sheet.tpl trunk/templates/tiki-edit_help_sheet_interface.tlp trunk/tiki-view_sheets.php Modified: trunk/lib/sheet/grid.php =================================================================== --- trunk/lib/sheet/grid.php 2011-02-04 22:03:36 UTC (rev 32440) +++ trunk/lib/sheet/grid.php 2011-02-04 23:11:50 UTC (rev 32441) @@ -729,6 +729,9 @@ * @return true on success. * @abstract */ + var $maxrows = 300; + var $maxcols = 26; + function _load( &$sheet ) { trigger_error( "Abstract method call. _load() not defined in " . get_class( $this ), E_USER_ERROR ); @@ -775,6 +778,32 @@ { trigger_error( "Abstract method call. version() not defined in " . get_class( $this ), E_USER_ERROR ); } + + function parseCsv( &$sheet ) { + $rows = explode("\n", $this->data); + for($i = 0; $i < count($rows) && $i < $this->maxrows; $i++) { + $cols = preg_split("/[,;](?!(?:[^\\\",;]|[^\\\"],[^\\\"])+\\\")/", $rows[$i]); + + for($j = 0; $j < count($cols) && $j < $this->maxcols; $j++) { + $sheet->initCell( $i, $j ); + $sheet->setValue( $cols[$j] ); + + if ( isset($cols[$j]) ) { + if (strlen( $cols[$j] )) { + if ($cols[$j][0] == '=' ) { + $sheet->setCalculation( substr($cols[$j], 1) ); + } + } + } + + $sheet->setSize( 1, 1 ); + } + } + + if ($i >= $this->maxrows || $j >= $this->maxcols) $this->truncated = true; + + return true; + } } // }}}1 /** TikiSheetFormHandler {{{1 @@ -1060,42 +1089,14 @@ { $this->file = $file; $this->lineLen = $lineLen; + $this->data = file_get_contents($this->file); $this->encoding = new Encoding ($inputEncoding, $outputEncoding); } // _load {{{2 function _load( &$sheet ) { - if( $file = @fopen( $this->file, "r" ) ) - { - $row = 0; - while( $data = @fgetcsv( $file, $this->lineLen ) ) - { - foreach( $data as $col=>$value ) - { - $sheet->initCell( $row, $col ); - $cellValue = $this->encoding->convert_encoding ( $value ); - $sheet->setValue( $cellValue ); - - if ( isset($cellValue) ) { - if (strlen( $cellValue )) { - if ($cellValue[0] == '=' ) { - $sheet->setCalculation( substr($cellValue, 1) ); - } - } - } - $sheet->setSize( 1, 1 ); - } - - $row++; - } - - @fclose( $file ); - - return true; - } - else - return false; + return $this->parseCSV( $sheet ); } // _save {{{2 @@ -1187,32 +1188,11 @@ $this->maxcols = $maxcols; $this->truncated = false; } + // _load {{{2 function _load( &$sheet ) { - $rows = explode("\n", $this->data); - for($i = 0; $i < count($rows) && $i < $this->maxrows; $i++) { - $cols = preg_split("/[,;](?!(?:[^\\\",;]|[^\\\"],[^\\\"])+\\\")/", $rows[$i]); - - for($j = 0; $j < count($cols) && $j < $this->maxcols; $j++) { - $sheet->initCell( $i, $j ); - $sheet->setValue( $cols[$j] ); - - if ( isset($cols[$j]) ) { - if (strlen( $cols[$j] )) { - if ($cols[$j][0] == '=' ) { - $sheet->setCalculation( substr($cols[$j], 1) ); - } - } - } - - $sheet->setSize( 1, 1 ); - } - } - - if ($i >= $this->maxrows || $j >= $this->maxcols) $this->truncated = true; - - return true; + return $this->parseCsv($sheet); } // _save {{{2 @@ -1240,6 +1220,7 @@ } } // }}}1 + /** TikiSheetCSVExcelHandler {{{1 * Class that stores the sheet representation in a * standard text file as a serialized PHP object. The difference @@ -1258,45 +1239,16 @@ { $this->file = $file; $this->lineLen = $lineLen; + $this->data = file_get_contents($this->file); $this->encoding = new Encoding ($inputEncoding, $outputEncoding); } - // _load {{{2 - function _load( &$sheet ) - { - if( $file = @fopen( $this->file, "r" ) ) - { - $row = 0; - while( $data = @fgetcsv( $file, $this->lineLen , ";", '"') ) - { - foreach( $data as $col=>$value ) - { - $sheet->initCell( $row, $col ); - $cellValue = $this->encoding->convert_encoding ( $value ); - $sheet->setValue( $cellValue ); - - if ( isset($cellValue) ) { - if (strlen( $cellValue )) { - if ($cellValue[0] == '=' ) { - $sheet->setCalculation( substr($cellValue, 1) ); - } - } - } - - $sheet->setSize( 1, 1 ); - } +// _load {{{2 + function _load( &$sheet ) + { + return $this->parseCsv( $sheet ); + } - $row++; - } - - @fclose( $file ); - - return true; - } - else - return false; - } - // _save {{{2 function _save( &$sheet ) { Modified: trunk/lib/wiki-plugins/wikiplugin_sheet.php =================================================================== --- trunk/lib/wiki-plugins/wikiplugin_sheet.php 2011-02-04 22:03:36 UTC (rev 32440) +++ trunk/lib/wiki-plugins/wikiplugin_sheet.php 2011-02-04 23:11:50 UTC (rev 32441) @@ -221,17 +221,31 @@ } // Grab sheet output - $ret = $sheet->getTableHtml( $subsheets ); + if (isset($url)) { + $file = file_get_contents($url); + $pathInfo = pathinfo($url); + if ($pathInfo['extension'] == 'csv') { + $handler = new TikiSheetCSVHandler( $url ); + $grid = new TikiSheet(); + $grid->import( $handler ); + $ret = $grid->getTableHtml( true , null, false ); + + } else { + $ret = file_get_contents( $url ); + } + } else { + $ret = strip_tags($sheet->getTableHtml( $subsheets )); + } + + if (!isset($simple) || $simple != 'y') { global $headerlib; $sheetlib->setup_jquery_sheet(); $headerlib->add_jq_onready(' $("div.tiki_sheet").each(function() { $(this).sheet($.extend($.sheet.tikiOptions,{ - editable:false'. ( isset($url) ? ', - urlGet: "'.$url.'", - buildSheet: false': '' ) .' + editable:false })); }); '); Modified: trunk/templates/tiki-edit_help_sheet.tpl =================================================================== --- trunk/templates/tiki-edit_help_sheet.tpl 2011-02-04 22:03:36 UTC (rev 32440) +++ trunk/templates/tiki-edit_help_sheet.tpl 2011-02-04 23:11:50 UTC (rev 32441) @@ -6,6 +6,6 @@ <h3>{tr}Spreadsheet{/tr}</h3> <div class="help_section"> - <iframe id="jQuerySheet_help" style="height: 350px; width: 100% !important" src="http://tiki.org/tiki-index_p.php?page=TikiSheet"></iframe> + <iframe id="jQuerySheet_help" style="height: 320px; width: 100% !important" src="http://tiki.org/tiki-index_p.php?page=TikiSheet"></iframe> </div> {/add_help} Modified: trunk/templates/tiki-edit_help_sheet_interface.tlp =================================================================== --- trunk/templates/tiki-edit_help_sheet_interface.tlp 2011-02-04 22:03:36 UTC (rev 32440) +++ trunk/templates/tiki-edit_help_sheet_interface.tlp 2011-02-04 23:11:50 UTC (rev 32441) @@ -2,7 +2,7 @@ {* \brief Show spreadsheet help (for jQuery.sheet) * included by toolbarslib *} -{add_help show='n' id="sheet_help_interface" title="{tr}Spreadsheet interface{/tr}"} +{add_help show='n' id="sheet_help_interface" title="{tr}Spreadsheet Interface{/tr}"} <h3>{tr}Spreadsheet{/tr}</h3> <div class="help_section"> @@ -10,6 +10,6 @@ {tr}Tiki uses jQuery.sheet for displaying spreadsheets, below you will see a list of usable functions and how to enhance how you use it.{/tr} </p> - <object id="jQuerySheet_help_interface" style="height: 350px; width: 100% !important" data="lib/jquery/jquery.sheet/sheets/enduser.documentation.html"></object> + <object id="sheet_help_interface" style="height: 300px; width: 100% !important" data="lib/jquery/jquery.sheet/sheets/enduser.documentation.html"></object> </div> {/add_help} Modified: trunk/tiki-view_sheets.php =================================================================== --- trunk/tiki-view_sheets.php 2011-02-04 22:03:36 UTC (rev 32440) +++ trunk/tiki-view_sheets.php 2011-02-04 23:11:50 UTC (rev 32441) @@ -15,7 +15,6 @@ 'parse', 'simple', 'height', - 'type', 'file', 'fileId' ); @@ -90,7 +89,7 @@ if ( $_REQUEST['sheetId'] ) { $result = $sheetlib->save_sheet( $_REQUEST['s'], $_REQUEST["sheetId"] ); - } elseif ( $_REQUEST['type'] && $_REQUEST['file'] ) { + } elseif ( $_REQUEST['file'] ) { //$result = $sheetlib->save_sheet( $_REQUEST['s'], null, $_REQUEST['file'], $_REQUEST['type'] ); } die($result); @@ -124,13 +123,9 @@ } //Edit & View -if ( isset($_REQUEST['file']) && isset($_REQUEST['type']) ) { +if ( isset($_REQUEST['file']) ) { //File sheets - switch ( $_REQUEST['type'] ) { - case 'excelcsv': $handler = new TikiSheetCSVExcelHandler( $_REQUEST['file'] ); break; - case 'csv': $handler = new TikiSheetCSVHandler( $_REQUEST['file'] ); break; - } - + $handler = new TikiSheetCSVHandler( $_REQUEST['file'] ); $grid = new TikiSheet(); $grid->import( $handler ); $tableHtml[0] = $grid->getTableHtml( true , null, false ); @@ -190,7 +185,6 @@ var tikiSheet = $("div.tiki_sheet").sheet($.sheet.tikiOptions); tikiSheet.id = "'.$_REQUEST['sheetId'].'"; - tikiSheet.type = "'.$_REQUEST['type'].'"; tikiSheet.file = "'.$_REQUEST['file'].'"; $.sheet.manageState(tikiSheet); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |