/**
  * Ensures <ul>
  * <li>the wikiplace exists and</li>
  * <li>the User executing this instance is the wikiplace owner</li>
  * </ul>
  * If WikiPlace is not good, this function displays ACTION_LIST_WIKIPLACES page with error message and returns <code>null</code>.
  * @param string|int|WpWikiplace $wikiplace The wikiplace name (with spaces or undescores), or id, or instance
  * @param bool $memberOK true if members are allowed, false by default.
  * @return WpWikiplace|null The WpWikiPlace if OK, or null
  */
 protected function checkWikiPlace($wikiplace, $memberOK = false)
 {
     $user = $this->getUser();
     $error = 'internalerror';
     // "Internal error", cleared if $wikiplace not null
     if (is_string($wikiplace)) {
         $title = Title::newFromText($wikiplace);
         if (!is_null($title)) {
             $wikiplace = WpWikiplace::newFromName($title->getDBkey());
         }
         $error = 'wp-invalid-name';
         // "This name is invalid.", cleared if $wikiplace not null
     } elseif (is_int($wikiplace)) {
         $wikiplace = WpWikiplace::getById($wikiplace);
     }
     if ($wikiplace instanceof WpWikiplace) {
         if ($wikiplace->isOwner($user->getId()) || $user->isAllowed(WP_ADMIN_RIGHT)) {
             $error = null;
         } else {
             if ($memberOK) {
                 if ($wikiplace->isMember($user)) {
                     $error = null;
                 } else {
                     $error = 'wp-not-member';
                 }
             } else {
                 $error = 'wp-not-owner';
                 // "you are not the owner of this wp"
             }
         }
     }
     if (!is_null($error)) {
         $this->action = self::ACTION_LIST_WIKIPLACES;
         $this->msgKey = $error;
         $this->msgType = 'error';
         $this->display();
         return null;
     }
     // else : ok :)
     return $wikiplace;
 }
 private function changeWikiplaceOwner($wikiplace_name = null, $user_name = null, $confirm = false)
 {
     $output = $this->getOutput();
     $output->addWikiText("=== Change Wikiplace Owner ===");
     $this->prettyOutput($output, array('wikiplace' => $wikiplace_name, 'user' => $user_name));
     $output->addWikiText("----");
     if (empty($wikiplace_name)) {
         $output->addWikiText("=== Specify a wikiplace name. ===");
         return;
     }
     $wikiplace = WpWikiplace::newFromName($wikiplace_name);
     if (is_null($wikiplace)) {
         $output->addWikiText("== ERROR! No Wikiplace with that name was found. ==");
         return;
     }
     $output->addWikiText("=== Wikiplace ===");
     $this->prettyOutput($output, array('id' => $wikiplace->getId(), 'name' => $wikiplace->getName(), 'report_expires' => $wikiplace->getDateExpires(), 'report_updated' => $wikiplace->getReportUpdated()));
     $owner = User::newFromId($wikiplace->getOwnerUserId());
     if (!$owner->loadFromId()) {
         $output->addWikiText("== WARNING! Owner is not an existing user! ==");
     } else {
         $output->addWikiText("==== Current owner ====");
         $this->prettyOutput($output, array('id' => $owner->getId(), 'name' => $owner->getName(), 'email' => $owner->getEmail(), 'email confirmed' => $owner->isEmailConfirmed() ? 'yes' : 'no', 'timestamp of account creation' => $owner->getRegistration()));
     }
     $output->addWikiText("----");
     if (empty($user_name)) {
         $output->addWikiText("=== Specify a user name. ===");
         return;
     }
     $user = User::newFromName($user_name);
     if (!$user || $user->getId() == 0) {
         $output->addWikiText("== ERROR! The user doesn't exist ! ==");
         return;
     }
     $output->addWikiText("=== New Owner ===");
     $this->prettyOutput($output, array('id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), 'email confirmed' => $user->isEmailConfirmed() ? 'yes' : 'no', 'timestamp of account creation' => $user->getRegistration()));
     if (!$user->isEmailConfirmed()) {
         $output->addWikiText("== WARNING! Email is not confirmed! ==");
     }
     $last_subscription = WpSubscription::newByUserId($user->getId());
     if (is_null($last_subscription)) {
         $output->addWikiText("== ERROR! The user doesn't have any subscription! ==");
         return;
     }
     $output->addWikiText("==== Last subscription ====");
     $this->prettyOutput($output, array('id' => $last_subscription->getId(), 'starts' => $last_subscription->getStart(), 'ends' => $last_subscription->getEnd(), 'active' => $last_subscription->isActive() ? "yes" : "no", 'transaction status' => $last_subscription->getTmrStatus()));
     if (!$last_subscription->isActive()) {
         $output->addWikiText("== WARNING! The subscription is not active! ==");
     }
     $plan = $last_subscription->getPlan();
     if (is_null($plan)) {
         $output->addWikiText("== ERROR! The subscribed plan doesn't exist! ==");
         return;
     }
     $output->addWikiText("==== Plan ====");
     $price = $plan->getPrice();
     $this->prettyOutput($output, array('id' => $plan->getId(), 'name' => $plan->getName(), 'period' => $plan->getPeriod() . ' month(s)', 'by invitation only' => $plan->isInvitationRequired() ? 'yes' : 'no', 'price' => $price['amount'] . ' ' . $price['currency']));
     $output->addWikiText("==== Membership ====");
     $member = WpMember::GetFromWikiPlaceAndUser($wikiplace, $user);
     if ($member instanceof WpMember) {
         $output->addWikiText("Target user, {$user->getName()}, is a member of {$wikiplace->getName()}.");
         $output->addWikiText("Membership will be removed for ownership change.");
     } else {
         $output->addWikiText("{$user->getName()} is <b>NOT</b> a member of {$wikiplace->getName()}.");
     }
     $output->addWikiText("----");
     if ($confirm !== true) {
         $output->addWikiText("=== To confirm ===");
         $output->addHTML($this->getLink(self::ACTION_CHANGE_WIKIPLACE_OWNER, array('wikiplace' => $wikiplace_name, 'user' => $user_name), true));
     } else {
         if ($member instanceof WpMember) {
             $member->delete();
         }
         $wikiplace->setOwnerUserId($user->getId());
         $output->addWikiText("== Done ! ==");
     }
 }