jenkins-bot has submitted this change and it was merged.

Change subject: Generate sample notifications
......................................................................


Generate sample notifications

Maintenance script that generates sample
notifications for Echo.

Change-Id: I5c88920a417a04cfd06d281f23b4c77368091776
---
A maintenance/generateSampleNotifications.php
1 file changed, 233 insertions(+), 0 deletions(-)

Approvals:
  Matthias Mullie: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/maintenance/generateSampleNotifications.php 
b/maintenance/generateSampleNotifications.php
new file mode 100644
index 0000000..15f4655
--- /dev/null
+++ b/maintenance/generateSampleNotifications.php
@@ -0,0 +1,233 @@
+<?php
+
+$IP = getenv( 'MW_INSTALL_PATH' );
+if ( $IP === false ) {
+       $IP = __DIR__ . '/../../..';
+}
+require_once ( "$IP/maintenance/Maintenance.php" );
+
+/**
+ * A maintenance script that generates sample notifications for testing 
purposes.
+ */
+class GenerateSampleNotifications extends Maintenance {
+
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Generate sample notifications";
+
+               $this->addOption(
+                       "user",
+                       "Name of the user receiving the notifications",
+                       true, true, "u" );
+
+               $this->addOption(
+                       "agent",
+                       "Name of the user creating the notifications",
+                       true, true, "a" );
+
+               $this->addOption(
+                       "other",
+                       "Name of another user involved with the notifications",
+                       true, true, "o" );
+       }
+
+       public function execute() {
+               if ( !class_exists( 'EchoHooks' ) ) {
+                       $this->error( "Echo isn't enabled on this wiki\n", 1 );
+               }
+
+               $user = $this->getOptionUser( 'user' );
+               $agent = $this->getOptionUser( 'agent' );
+               $otherUser = $this->getOptionUser( 'other' );
+
+               $this->confirm();
+
+               $this->output( "Started processing...\n" );
+
+               $this->generateWelcome( $user );
+               $this->generateEditUserTalk( $user, $agent );
+               $this->generateMention( $user, $agent, $otherUser );
+               $this->generatePageLink( $user, $agent );
+               $this->generateReverted( $user, $agent );
+               $this->generateEmail( $user, $agent );
+               $this->generateUserRights( $user, $agent );
+
+               $this->output( "Completed \n" );
+       }
+
+       private function generateEditUserTalk( User $user, User $agent ) {
+               $this->output( "{$agent->getName()} is writing on 
{$user->getName()}'s user talk page\n" );
+               $editId = $this->generateRandomString();
+               $section = "== section $editId ==\n\nthis is the text 
$editId\n\n~~~~\n\n";
+               $this->addToUserTalk( $user, $agent, $section );
+       }
+
+       private function getOptionUser( $optionName ) {
+               $username = $this->getOption( $optionName );
+               $user = User::newFromName( $username );
+               if ( $user->isAnon() ) {
+                       $this->error( "User $username does not seem to exist in 
this wiki", 1 );
+               }
+               return $user;
+       }
+
+       private function generateRandomString( $length = 10 ) {
+               return substr( str_shuffle( 
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ), 0, $length 
);
+       }
+
+       protected function confirm() {
+               $this->output( "===   WARNING   ===\n" );
+               $this->output( "This script modifies the content of several 
pages,\n" );
+               $this->output( "including user's talk pages.\n" );
+               $this->output( "ONLY RUN ON TEST WIKIS\n" );
+               $this->output( "Enter 'yes' if you wish to continue or any 
other key to exit\n" );
+               $confirm = $this->readconsole();
+               if ( $confirm !== 'yes' ) {
+                       $this->error( 'Safe decision', 1 );
+               }
+       }
+
+       private function addToUserTalk( User $user, User $agent, $contentText ) 
{
+               $this->addToPageContent( $user->getTalkPage(), $agent, 
$contentText );
+       }
+
+       private function addToPageContent( Title $title, User $agent, 
$contentText ) {
+               $page = WikiPage::factory( $title );
+               $previousContent = "";
+               $page->loadPageData( 'fromdbmaster' );
+               $revision = $page->getRevision();
+               if ( $revision ) {
+                       $content = $revision->getContent( Revision::FOR_PUBLIC 
);
+                       if ( $content instanceof WikitextContent ) {
+                               $previousContent = $content->getNativeData();
+                       }
+               }
+               $status = $page->doEditContent(
+                       new WikitextContent( $contentText . $previousContent ),
+                       'generating sample notifications',
+                       0,
+                       false,
+                       $agent
+               );
+
+               if ( !$status->isGood() ) {
+                       $this->error( "Failed to edit 
{$title->getPrefixedText()}: {$status->getMessage()}" );
+               }
+       }
+
+       private function generateMention( User $user, User $agent, User 
$otherUser ) {
+               $moai = Title::newFromText( 'Moai' );
+               $mention = "== section {$this->generateRandomString()} 
==\nHello [[User:{$user->getName()}]] \n~~~~\n";
+
+               // article talk
+               $this->output( "{$agent->getName()} is mentioning 
{$user->getName()} on {$moai->getTalkPage()->getPrefixedText()}\n" );
+               $this->addToPageContent( $moai->getTalkPage(), $agent, $mention 
);
+
+               // agent tak
+               $this->output( "{$agent->getName()} is mentioning 
{$user->getName()} on {$agent->getTalkPage()->getPrefixedText()}\n" );
+               $this->addToPageContent( $agent->getTalkPage(), $agent, 
$mention );
+
+               // user talk
+               $this->output( "{$agent->getName()} is mentioning 
{$user->getName()} on {$otherUser->getTalkPage()->getPrefixedText()}\n" );
+               $this->addToPageContent( $otherUser->getTalkPage(), $agent, 
$mention );
+
+               // any other page
+               $this->output( "{$agent->getName()} is mentioning 
{$user->getName()} on {$moai->getPrefixedText()}\n" );
+               $this->addToPageContent( $moai, $agent, $mention );
+       }
+
+       private function generatePageLink( User $user, User $agent ) {
+               $pageBeingMentioned = $this->generateNewPageTitle();
+               $this->addToPageContent( $pageBeingMentioned, $user, "this is a 
new page" );
+
+               $pageMentioning = $this->generateNewPageTitle();
+               $content = "checkout 
[[{$pageBeingMentioned->getPrefixedText()}]]!";
+               $this->output( "{$agent->getName()} is linking to 
{$pageBeingMentioned->getPrefixedText()} from 
{$pageMentioning->getPrefixedText()}\n" );
+               $this->addToPageContent( $pageMentioning, $agent, $content );
+       }
+
+       private function generateNewPageTitle() {
+               return Title::newFromText( $this->generateRandomString() );
+       }
+
+       private function generateReverted( User $user, User $agent ) {
+               global $wgRequest;
+               $agent->addGroup( 'sysop' );
+
+               // revert (undo)
+               $moai = Title::newFromText( 'Moai' );
+               $page = WikiPage::factory( $moai );
+               $this->output( "{$agent->getName()} is reverting 
{$user->getName()}'s edit on {$moai->getPrefixedText()}\n" );
+               $this->addToPageContent( $moai, $agent, "\ncreating a good 
revision here\n" );
+               $this->addToPageContent( $moai, $user, "\nadding a line here\n" 
);
+               // hack: EchoHooks::onArticleSaved depends on the request to 
know which revision is being reverted
+               $wgRequest->setVal( 'wpUndidRevision', 
$page->getRevision()->getId() );
+               $content = $page->getUndoContent( $page->getRevision(), 
$page->getRevision()->getPrevious() );
+               $status = $page->doEditContent( $content, 'undo', 0, false, 
$agent );
+               if ( !$status->isGood() ) {
+                       $this->error( "Failed to undo 
{$moai->getPrefixedText()}: {$status->getMessage()}" );
+               }
+
+               // rollback
+               $moai2 = Title::newFromText( 'Moai2' );
+               $page = WikiPage::factory( $moai2 );
+               $this->output( "{$agent->getName()} is rolling back 
{$user->getName()}'s edits on {$moai2->getPrefixedText()}\n" );
+               $this->addToPageContent( $moai2, $agent, "\ncreating a good 
revision here\n" );
+               $this->addToPageContent( $moai2, $user, "\nadding a line 
here\n" );
+               $this->addToPageContent( $moai2, $user, "\nadding a line 
here\n" );
+               $details = array();
+               $token = $agent->getEditToken( array( 
$moai2->getPrefixedText(), $user->getName() ), null );
+               $errors = $page->doRollback( $user->getName(), 'generating 
reverted notification', $token, false, $details, $agent );
+               if ( $errors ) {
+                       $errorAsString = serialize( $errors );
+                       $this->error( $errorAsString );
+               }
+       }
+
+       private function generateWelcome( User $user ) {
+               $this->output( "Welcoming {$user->getName()}\n" );
+               EchoEvent::create( array(
+                       'type' => 'welcome',
+                       'agent' => $user,
+                       'extra' => array(
+                               'notifyAgent' => true
+                       )
+               ) );
+       }
+
+       private function generateEmail( User $user, User $agent ) {
+               $this->output( "{$agent->getName()} is emailing 
{$user->getName()}\n" );
+               EchoEvent::create( array(
+                       'type' => 'emailuser',
+                       'extra' => array(
+                               'to-user-id' => $user->getId(),
+                       ),
+                       'agent' => $agent,
+               ) );
+       }
+
+       private function generateUserRights( User $user, User $agent ) {
+               $this->output( "{$agent->getName()} is changing 
{$user->getName()}'s rights\n" );
+               $this->createUserRightsNotification( $user, $agent, array( 
'OnlyAdd-1' ), null );
+               $this->createUserRightsNotification( $user, $agent, null, 
array( 'JustRemove-1', 'JustRemove-2' ) );
+               $this->createUserRightsNotification( $user, $agent, array( 
'Add-1', 'Add-2' ), array( 'Remove-1', 'Remove-2' ) );
+       }
+
+       private function createUserRightsNotification( User $user, User $agent, 
$add, $remove ) {
+               EchoEvent::create(
+                       array(
+                               'type' => 'user-rights',
+                               'title' => Title::newMainPage(),
+                               'extra' => array(
+                                       'user' => $user->getID(),
+                                       'add' => $add,
+                                       'remove' => $remove,
+                               ),
+                               'agent' => $agent,
+                       )
+               );
+       }
+}
+
+$maintClass = "GenerateSampleNotifications";
+require_once ( DO_MAINTENANCE );

-- 
To view, visit https://gerrit.wikimedia.org/r/266920
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I5c88920a417a04cfd06d281f23b4c77368091776
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Echo
Gerrit-Branch: master
Gerrit-Owner: Sbisson <[email protected]>
Gerrit-Reviewer: Matthias Mullie <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to