game = $game; if (!$config['DUMMY']) { // Log in to a wiki $api = new MediawikiApi( $config['WIKI'] ); $api->login( new ApiUser( $config['WIKIUSER'], $config['WIKIPASSWORD'] ) ); $services = new MediawikiFactory( $api ); $this->api = $api; $this->services = $services; $this->fileUploader = $services->newFileUploader(); } } public function create() { global $config; $this->makeContent(); $exists = $this->exists($this->game->title); if (!$config['DUMMY'] && !$exists) { if (!empty($this->game->image)) { $filename = filename($this->game->image); if ($this->services->newPageGetter()->getFromTitle($filename)) { $image = file_get_contents($this->game->image); file_put_contents($image, $filename); $this->fileUploader->upload($filename, $filename); unlink($filename); } } $newContent = new Content( $this->content ); $title = new Title($this->game->title); $identifier = new PageIdentifier($title); $revision = new Revision($newContent, $identifier); $services->newRevisionSaver()->save($revision); return true; } else { if ($exists) { echo "Страница игры уже существует. Автосоздание невозможно.\n"; echo $this->content; return false; } if ($config['DUMMY']) { echo "Черновой режим. Автосоздание невозможно.\n"; } echo $this->content; return true; } } protected function makeContent() { $this->content = '{{game info'; $this->txtadd('title', ' |название='.$this->game->title.'"'); if (is_array($this->game->author) && count($this->game->author) === 1) { $this->game->author = trim($this->game->author[0]); } if (is_array($this->game->author) && count($this->game->author) > 0) { $this->content .= PHP_EOL.' |автор='; $i = 0; $l = count($this->game->author); foreach ($this->game->author as $author_name) { $this->content .= '[[Автор::'.$author_name.']]'; $i++; if ($i < $l) { $this->content .= '; '; } } } else { $this->txtadd('author', ' |автор=[[Автор::'.$this->game->author.']]'); } $this->txtadd('date', ' |вышла='.$this->game->date); $this->txtadd('platform', ' |платформа='.$this->game->platform); $this->txtadd('image', ' |обложка='.filename($this->game->image)); $this->content .= "\n}}\n"; $this->txtadd('description', "#{@game.description}"); if (!empty($this->game->url_download) || !empty($this->game->url_online)) { $this->content .= "\n== Версии =="; } $this->txtadd('url_online', "\n* [#{@game.url_online} #{@game.url_online_description}]"); if (!empty($this->game->url_download) && !empty($this->game->url_download_description)) { $this->content .= "\n* [$this->game->url_download $this->game->url_download_description]"; } if (!empty($this->game->url_discussion) || !empty($this->game->url)) { $this->content .= "\n== Ссылки =="; } $this->txtadd('url_discussion', '* ['.$this->game->url_discussion.' Обсуждение игры]'); $this->txtadd('url', '* ['.$this->game->url.' Страница игры]'); } protected function txtadd($param, $text) { if (!empty($this->game->$param)) { $this->content .= PHP_EOL.trim($text); } } /** * Checks if the page exists. * * @param string $pagename * @return boolean */ protected function exists($pagename) { return !empty($this->services->newPageGetter()->getFromTitle($pagename)); } }