예제 #1
0
 function export()
 {
     if ($_REQUEST['baseurl']) {
         $base = $_REQUEST['baseurl'];
         if (substr($base, -1) != '/') {
             $base .= '/';
         }
         Director::setBaseURL($base);
     }
     $folder = '/tmp/static-export/' . project();
     if (!project()) {
         $folder .= 'site';
     }
     if (!file_exists($folder)) {
         mkdir($folder, Filesystem::$folder_create_mask, true);
     }
     $f1 = Director::baseFolder() . '/assets';
     $f2 = Director::baseFolder() . '/' . project();
     `cd {$folder}; ln -s {$f1}; ln -s {$f2}`;
     $baseFolder = basename($folder);
     if ($folder && file_exists($folder)) {
         $pages = DataObject::get("SiteTree");
         foreach ($pages as $page) {
             $subfolder = "{$folder}/{$page->URLSegment}";
             $contentfile = "{$folder}/{$page->URLSegment}/index.html";
             // Make the folder
             if (!file_exists($subfolder)) {
                 mkdir($subfolder, Filesystem::$folder_create_mask);
             }
             // Run the page
             Requirements::clear();
             $controllerClass = "{$page->class}_Controller";
             if (class_exists($controllerClass)) {
                 $controller = new $controllerClass($page);
                 $pageContent = $controller->run(array());
                 // Write to file
                 if ($fh = fopen($contentfile, 'w')) {
                     fwrite($fh, $pageContent->getBody());
                     fclose($fh);
                 }
             }
         }
         copy("{$folder}/home/index.html", "{$folder}/index.html");
         `cd /tmp/static-export; tar -czhf {$baseFolder}.tar.gz {$baseFolder}`;
         $content = file_get_contents("/tmp/static-export/{$baseFolder}.tar.gz");
         Filesystem::removeFolder('/tmp/static-export');
         HTTP::sendFileToBrowser($content, "{$baseFolder}.tar.gz");
         return null;
     } else {
         echo _t('StaticExporter.ONETHATEXISTS', "Please specify a folder that exists");
     }
 }
예제 #2
0
 /**
  * Exports a given set of comma-separated IDs (from a previous search-query, stored in a HiddenField).
  * Uses {$csv_columns} if present, and falls back to {$result_columns}.
  * 
  * @todo Make relation-syntax available (at the moment you'll have to use custom sql) 
  */
 function export()
 {
     $now = Date("d-m-Y-H-i");
     $fileName = "export-{$now}.csv";
     $separator = $this->csvSeparator;
     $csvColumns = $this->fieldListCsv ? $this->fieldListCsv : $this->fieldList;
     $fileData = "";
     if ($this->csvHasHeader) {
         $fileData .= "\"" . implode("\"{$separator}\"", array_values($csvColumns)) . "\"";
         $fileData .= "\n";
     }
     // get data
     $dataQuery = $this->getCsvQuery();
     $records = $dataQuery->execute();
     $sourceClass = $this->sourceClass;
     $dataobject = new $sourceClass();
     $items = $dataobject->buildDataObjectSet($records, 'DataObjectSet');
     if ($items) {
         foreach ($items as $item) {
             $columnData = array();
             foreach ($csvColumns as $columnName => $columnTitle) {
                 $tmpColumnData = "\"" . str_replace("\"", "\"\"", $item->{$columnName}) . "\"";
                 $tmpColumnData = str_replace(array("\r", "\n"), "", $tmpColumnData);
                 $columnData[] = $tmpColumnData;
             }
             $fileData .= implode($separator, $columnData);
             $fileData .= "\n";
         }
         HTTP::sendFileToBrowser($fileData, $fileName);
     } else {
         user_error("No records found", E_USER_ERROR);
     }
 }
예제 #3
0
 /**
  * Exports a given set of comma-separated IDs (from a previous search-query, stored in a HiddenField).
  * Uses {$csv_columns} if present, and falls back to {$result_columns}.
  */
 function export()
 {
     $now = Date("s-i-H");
     $fileName = "export-{$now}.csv";
     $csv_columns = $this->stat('csv_columns') ? array_values($this->stat('csv_columns')) : array_values($this->stat('result_columns'));
     $fileData = "";
     $fileData .= "\"" . implode("\",\"", $csv_columns) . "\"";
     $fileData .= "\n";
     $records = $this->performSearch();
     if ($records) {
         foreach ($records as $record) {
             $columnData = array();
             foreach ($csv_columns as $column) {
                 $tmpColumnData = "\"" . str_replace("\"", "\"\"", $record->{$column}) . "\"";
                 $tmpColumnData = str_replace(array("\r", "\n"), "", $tmpColumnData);
                 $columnData[] = $tmpColumnData;
             }
             $fileData .= implode(",", $columnData);
             $fileData .= "\n";
         }
         HTTP::sendFileToBrowser($fileData, $fileName);
     } else {
         user_error("No records found", E_USER_ERROR);
     }
 }
예제 #4
0
 /**
  *	Todo: to export the reported table as a CSV
  */
 function exportToCSV($fileName)
 {
     $fileData = $this->columnheaders('csvRow', 'csvHeadCell') . $this->datacells('csvRow', 'csvDataCell');
     HTTP::sendFileToBrowser($fileData, $fileName);
 }