science-ation/ltxt.php
2025-02-10 19:54:20 +00:00

191 lines
4.6 KiB
PHP

<?
/*
* This file is part of the 'Science Fair In A Box' project
* Science-ation Website: https://science-ation.ca/
*
* Copyright (C) 2005 Sci-Tech Ontario Inc <info@scitechontario.org>
* Copyright (C) 2005 James Grant <james@lightbox.org>
* Copyright (C) 2024 AlgoLibre Inc. <science-ation@algolibre.io>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
?>
<?
class ltxt
{
var $txtdata;
var $str_separator;
var $str_newline;
var $page_subheader;
function separator()
{
return $this->str_separator;
}
function setSeparator($s)
{
$this->str_separator = $s;
}
function newline()
{
return $this->str_newline;
}
function setNewline($s)
{
$this->str_newline = $s;
}
function centerText($text, $width)
{
// FIXME, there must be an easier way of doing this,
// probably with printf :)
$t = '';
$space = $width - strlen($text);
$w2 = floor($space / 2);
for ($x = 0; $x < $w2; $x++)
$t .= ' ';
$t .= $text;
$w2 = $space - $w2;
for ($x = 0; $x < $w2; $x++)
$t .= ' ';
return $t;
}
function leftText($text, $width)
{
$t = '';
$t .= $text;
for ($x = strlen($text); $x < $width; $x++)
$t .= ' ';
return $t;
}
function dashText($width)
{
$t = '';
for ($x = 0; $x < $width; $x++)
$t .= '-';
return $t;
}
function addTable($table)
{
$widths = array();
if ($table['header']) {
$table_cols = count($table['header']);
} else {
$table_cols = count($table['data'][0]);
}
/* Find the width of each column */
if ($table['header']) {
for ($c = 0; $c < $table_cols; $c++) {
$w = strlen($table['header'][$c]);
if ($w > $widths[$c])
$widths[$c] = $w;
}
}
foreach ($table['data'] as $dataline) {
for ($c = 0; $c < $table_cols; $c++) {
$w = strlen($dataline[$c]);
if ($w > $widths[$c])
$widths[$c] = $w;
}
}
if ($table['header']) {
$this->txtdata .= $this->str_separator;
for ($c = 0; $c < $table_cols; $c++) {
$head = $this->centerText($table['header'][$c], $widths[$c]);
$this->txtdata .= $head;
$this->txtdata .= $this->str_separator;
}
$this->txtdata .= $this->newline();
$this->txtdata .= $this->str_separator;
for ($c = 0; $c < $table_cols; $c++) {
$this->txtdata .= $this->dashText($widths[$c]);
$this->txtdata .= $this->str_separator;
}
$this->txtdata .= $this->newline();
}
// now do the data in the table
if ($table['data']) {
foreach ($table['data'] as $dataline) {
$this->txtdata .= $this->str_separator;
for ($c = 0; $c < $table_cols; $c++) {
$d = $this->leftText($dataline[$c], $widths[$c]);
$this->txtdata .= $d;
$this->txtdata .= $this->str_separator;
}
$this->txtdata .= $this->newline();
}
}
}
function heading($str)
{
// we need to put it in quotes incase it contains a comma we dont want it going to the next 'cell'
$this->txtdata .= '"' . $str . '"';
$this->txtdata .= $this->newline();
}
function addText($str, $align = '')
{
// we need to put it in quotes incase it contains a comma we dont want it going to the next 'cell'
$this->txtdata .= '"' . $str . '"';
$this->txtdata .= $this->newline();
}
function nextline()
{
$this->txtdata .= $this->newline();
}
function newPage()
{
// well we cant really go to a new page, so in teh absense of a new page, lets put a few blank lines in?
// $this->txtdata.=$this->newline();
// $this->txtdata.=$this->newline();
// $this->txtdata.=$this->newline();
}
function output()
{
if ($this->txtdata) {
$filename = strtolower($this->page_subheader);
$filename = preg_replace('[^a-z0-9]', '_', $filename);
// header("Content-type: application/csv");
header('Content-type: text/plain');
header('Content-disposition: inline; filename=sfiab_' . $filename . '.txt');
header('Content-length: ' . strlen($this->txtdata));
echo $this->txtdata;
}
}
function ltxt($subheader, $sep = ' | ', $nl = "\r\n")
{
$this->page_subheader = $subheader;
$this->setSeparator($sep);
$this->setNewline($nl);
}
}
?>