1*ad86a824SAnna Dabrowska<?php 2*ad86a824SAnna Dabrowska 3*ad86a824SAnna Dabrowskanamespace dokuwiki\plugin\struct\meta; 4*ad86a824SAnna Dabrowska 5*ad86a824SAnna Dabrowskaclass CSVSerialImporter extends CSVImporter 6*ad86a824SAnna Dabrowska{ 7*ad86a824SAnna Dabrowska 8*ad86a824SAnna Dabrowska /** @var bool[] */ 9*ad86a824SAnna Dabrowska protected $createPage = []; 10*ad86a824SAnna Dabrowska 11*ad86a824SAnna Dabrowska /** 12*ad86a824SAnna Dabrowska * Import page schema only when the pid header is present. 13*ad86a824SAnna Dabrowska */ 14*ad86a824SAnna Dabrowska protected function readHeaders() 15*ad86a824SAnna Dabrowska { 16*ad86a824SAnna Dabrowska parent::readHeaders(); 17*ad86a824SAnna Dabrowska if (!in_array('pid', $this->header)) throw new StructException('There is no "pid" header in the CSV. Schema not imported.'); 18*ad86a824SAnna Dabrowska } 19*ad86a824SAnna Dabrowska 20*ad86a824SAnna Dabrowska /** 21*ad86a824SAnna Dabrowska * Add the revision. 22*ad86a824SAnna Dabrowska * 23*ad86a824SAnna Dabrowska * @param string[] $values 24*ad86a824SAnna Dabrowska */ 25*ad86a824SAnna Dabrowska protected function saveLine($values) 26*ad86a824SAnna Dabrowska { 27*ad86a824SAnna Dabrowska // create new page 28*ad86a824SAnna Dabrowska $pid = cleanID($values[0]); 29*ad86a824SAnna Dabrowska if ($this->createPage[$pid]) { 30*ad86a824SAnna Dabrowska $this->createPage($pid, $values); 31*ad86a824SAnna Dabrowska } 32*ad86a824SAnna Dabrowska 33*ad86a824SAnna Dabrowska parent::saveLine($values); 34*ad86a824SAnna Dabrowska } 35*ad86a824SAnna Dabrowska 36*ad86a824SAnna Dabrowska /** 37*ad86a824SAnna Dabrowska * Create a page with serial syntax, either from a namespace template with _serial suffix 38*ad86a824SAnna Dabrowska * or an empty one. 39*ad86a824SAnna Dabrowska * 40*ad86a824SAnna Dabrowska * @param string $pid 41*ad86a824SAnna Dabrowska * @param array $line 42*ad86a824SAnna Dabrowska */ 43*ad86a824SAnna Dabrowska protected function createPage($pid, $line) 44*ad86a824SAnna Dabrowska { 45*ad86a824SAnna Dabrowska $text = pageTemplate($pid); 46*ad86a824SAnna Dabrowska if (trim($text) === '') { 47*ad86a824SAnna Dabrowska $pageParts = explode(':', $pid); 48*ad86a824SAnna Dabrowska $pagename = end($pageParts); 49*ad86a824SAnna Dabrowska $text = "====== $pagename ======\n"; 50*ad86a824SAnna Dabrowska } 51*ad86a824SAnna Dabrowska 52*ad86a824SAnna Dabrowska // add serial syntax 53*ad86a824SAnna Dabrowska $schema = $this->schema->getTable(); 54*ad86a824SAnna Dabrowska $text .= " 55*ad86a824SAnna Dabrowska---- struct serial ---- 56*ad86a824SAnna Dabrowskaschema: $schema 57*ad86a824SAnna Dabrowskacols: * 58*ad86a824SAnna Dabrowska---- 59*ad86a824SAnna Dabrowska"; 60*ad86a824SAnna Dabrowska saveWikiText($pid, $text, 'Created by struct csv import'); 61*ad86a824SAnna Dabrowska } 62*ad86a824SAnna Dabrowska 63*ad86a824SAnna Dabrowska /** 64*ad86a824SAnna Dabrowska * Check if page id realy exists 65*ad86a824SAnna Dabrowska * 66*ad86a824SAnna Dabrowska * @param Column $col 67*ad86a824SAnna Dabrowska * @param mixed $rawvalue 68*ad86a824SAnna Dabrowska * @return bool 69*ad86a824SAnna Dabrowska */ 70*ad86a824SAnna Dabrowska protected function validateValue(Column $col, &$rawvalue) 71*ad86a824SAnna Dabrowska { 72*ad86a824SAnna Dabrowska global $INPUT; 73*ad86a824SAnna Dabrowska if ($col->getLabel() !== 'pid' || !$INPUT->bool('createPage')) { 74*ad86a824SAnna Dabrowska return parent::validateValue($col, $rawvalue); 75*ad86a824SAnna Dabrowska } 76*ad86a824SAnna Dabrowska 77*ad86a824SAnna Dabrowska $pid = cleanID($rawvalue); 78*ad86a824SAnna Dabrowska if (!page_exists($pid)) { 79*ad86a824SAnna Dabrowska $this->createPage[$pid] = true; 80*ad86a824SAnna Dabrowska } 81*ad86a824SAnna Dabrowska return true; 82*ad86a824SAnna Dabrowska } 83*ad86a824SAnna Dabrowska} 84