summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/src/Importer/ContentCreators/TextContentCreator.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/Importer/ContentCreators/TextContentCreator.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/src/Importer/ContentCreators/TextContentCreator.php150
1 files changed, 150 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/Importer/ContentCreators/TextContentCreator.php b/www/wiki/extensions/SemanticMediaWiki/src/Importer/ContentCreators/TextContentCreator.php
new file mode 100644
index 00000000..81d04045
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/src/Importer/ContentCreators/TextContentCreator.php
@@ -0,0 +1,150 @@
+<?php
+
+namespace SMW\Importer\ContentCreators;
+
+use ContentHandler;
+use Onoi\MessageReporter\MessageReporter;
+use SMW\Importer\ContentCreator;
+use SMW\Importer\ImportContents;
+use SMW\MediaWiki\Database;
+use SMW\MediaWiki\PageCreator;
+use Title;
+
+/**
+ * @license GNU GPL v2+
+ * @since 2.5
+ *
+ * @author mwjames
+ */
+class TextContentCreator implements ContentCreator {
+
+ /**
+ * @var MessageReporter
+ */
+ private $messageReporter;
+
+ /**
+ * @var PageCreator
+ */
+ private $pageCreator;
+
+ /**
+ * @var Database
+ */
+ private $connection;
+
+ /**
+ * @since 2.5
+ *
+ * @param PageCreator $pageCreator
+ * @param Database $connection
+ */
+ public function __construct( PageCreator $pageCreator, Database $connection ) {
+ $this->pageCreator = $pageCreator;
+ $this->connection = $connection;
+ }
+
+ /**
+ * @see MessageReporterAware::setMessageReporter
+ *
+ * @since 2.5
+ *
+ * @param MessageReporter $messageReporter
+ */
+ public function setMessageReporter( MessageReporter $messageReporter ) {
+ $this->messageReporter = $messageReporter;
+ }
+
+ /**
+ * @since 2.5
+ *
+ * @param ImportContents $importContents
+ */
+ public function canCreateContentsFor( ImportContents $importContents ) {
+ return $importContents->getContentType() === ImportContents::CONTENT_TEXT;
+ }
+
+ /**
+ * @since 2.5
+ *
+ * @param ImportContents $importContents
+ */
+ public function create( ImportContents $importContents ) {
+
+ if ( !class_exists( 'ContentHandler' ) ) {
+ return $this->messageReporter->reportMessage( "\nContentHandler doesn't exist therefore importing is not possible.\n" );
+ }
+
+ $indent = ' ...';
+ $name = $importContents->getName();
+
+ if ( $name === '' ) {
+ return $this->messageReporter->reportMessage( "$indent no valid page name, abort import." );
+ }
+
+ $title = Title::newFromText(
+ $name,
+ $importContents->getNamespace()
+ );
+
+ if ( $title === null ) {
+ return $this->messageReporter->reportMessage( "$indent $name returned with a null title, abort import." );
+ }
+
+ $prefixedText = $title->getPrefixedText();
+
+ if ( $title->exists() && !$importContents->getOption( 'canReplace' ) && !$importContents->getOption( 'replaceable' ) ) {
+ return $this->messageReporter->reportMessage( "$indent skipping $prefixedText, already exists ...\n" );
+ } elseif( $title->exists() ) {
+ $this->messageReporter->reportMessage( "$indent replacing $prefixedText contents ...\n" );
+ } else {
+ $this->messageReporter->reportMessage( "$indent creating $prefixedText contents ...\n" );
+ }
+
+ // Avoid a possible "Notice: WikiPage::doEditContent: Transaction already
+ // in progress (from DatabaseUpdater::doUpdates), performing implicit
+ // commit ..."
+ $this->connection->onTransactionIdle( function() use ( $title, $importContents ) {
+ $this->doCreateContent( $title, $importContents );
+ } );
+ }
+
+ private function doCreateContent( $title, $importContents ) {
+
+ $page = $this->pageCreator->createPage( $title );
+
+ $content = ContentHandler::makeContent(
+ $this->fetchContents( $importContents ),
+ $title
+ );
+
+ $page->doEditContent(
+ $content,
+ $importContents->getDescription(),
+ EDIT_FORCE_BOT
+ );
+
+ $title->invalidateCache();
+ }
+
+ private function fetchContents( $importContents ) {
+
+ if ( $importContents->getContentsFile() === '' ) {
+ return $importContents->getContents();
+ }
+
+ $contents = file_get_contents( $importContents->getContentsFile() );
+
+ // http://php.net/manual/en/function.file-get-contents.php
+ return mb_convert_encoding(
+ $contents,
+ 'UTF-8',
+ mb_detect_encoding(
+ $contents,
+ 'UTF-8, ISO-8859-1, ISO-8859-2',
+ true
+ )
+ );
+ }
+
+}