* the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * 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; if not, write to the Free Software * * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ define('FPDF_FONTPATH', dirname(__FILE__) . '/fonts/'); require_once '/usr/share/fpdf/fpdf.php'; VarStream::init(); class ContactsPDF extends FPDF { public $title = "Mes contacts sur Polytechnique.org"; private $col = 0; private $y0; private $broken = false; private $error = false; private $report = 0; public function __construct() { $this->report = error_reporting(0); parent::FPDF(); error_reporting($this->report); $this->AddFont('Vera Sans', '', 'Vera.php'); $this->AddFont('Vera Sans', 'I', 'VeraIt.php');
public function toCSV($sep = ',', $enc = '"', $asep = '|') { $nbq = count($this->questions); //require_once dirname(__FILE__) . '/../../classes/varstream.php'; VarStream::init(); global $csv_output; $csv_output = ''; $csv = fopen('var://csv_output', 'w'); $line = $this->isMode(self::MODE_XIDENT) ? array('id', 'Nom', 'Prenom', 'Promo') : array('id'); $qids = array(); for ($qid = 0; $qid < $nbq; $qid++) { $qids[$qid] = count($line); // stores the first id of a question (in case of questions with subquestions) array_splice($line, count($line), 0, $this->questions[$qid]->getCSVColumns()); // the first line contains the questions } $nbf = count($line); $users = array(); if ($this->isMode(self::MODE_XIDENT)) { // if the mode is non anonymous $users = User::getBulkUsersWithUIDs(XDB::fetchAllAssoc('vid', 'SELECT v.id AS vid, v.uid FROM survey_votes AS v WHERE v.survey_id = {?} ORDER BY vid ASC', $this->id)); } $sql = 'SELECT v.id AS vid, a.question_id AS qid, a.answer AS answer FROM survey_votes AS v INNER JOIN survey_answers AS a ON a.vote_id=v.id WHERE v.survey_id={?} ORDER BY vid ASC, qid ASC, answer ASC'; $res = XDB::iterator($sql, $this->id); // retrieves all answers from database $vid = -1; $vid_ = 0; while (($cur = $res->next()) != null) { if ($vid != $cur['vid']) { // if the vote id changes, then starts a new line fputcsv($csv, $line, $sep, $enc); // stores the former line into $csv_output $vid = $cur['vid']; $line = array_fill(0, $nbf, ''); // creates an array full of empty string $line[0] = $vid_; // the first field is a 'clean' vote id (not the one stored in database) if ($this->isMode(self::MODE_XIDENT)) { // if the mode is non anonymous if (array_key_exists($vid, $users)) { // and if the user data can be found $line[1] = $users[$vid]->lastName(); // adds the user data (in the first fields of the line) $line[2] = $users[$vid]->firstName(); $line[3] = $users[$vid]->promo(); } } $vid_++; } $ans = $this->questions[$cur['qid']]->formatAnswer($cur['answer']); // formats the current answer if (!is_null($ans)) { if (is_array($ans)) { $fid = $qids[$cur['qid']] + $ans['id']; // computes the field id $a = $ans['answer']; } else { $fid = $qids[$cur['qid']]; $a = $ans; } if ($line[$fid] != '') { // if this field already contains something $line[$fid] .= $asep; // then adds a separator before adding the new answer } $line[$fid] .= $a; // adds the current answer to the correct field } } fputcsv($csv, $line, $sep, $enc); // stores the last line into $csv_output return $csv_output; }