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