Example #1
0
 /**
  * 
  * @param int $id
  * @return WpMember|null The WpMember, or null if it doesn't exist
  */
 public static function GetFromId($id)
 {
     return WpMember::search(array('wpm_id' => $id));
 }
Example #2
0
 /**
  * @param User $user
  * @return boolean
  */
 public function isMember($user)
 {
     return WpMember::IsMember($this, $user);
 }
Example #3
0
 /**
  * @todo should not be a hook. Should be...
  * WpWikiPlaces->hasMember($user) 
  * WpMember->isMember($WikiPlace) 
  * and called by getUserPermissionError()
  * 
  * @param Title $title
  * @param User $user
  * @param boolean $result
  * @return boolean
  */
 public static function isMember($title, $user, &$result)
 {
     $namespace = $title->getNamespace();
     $db_key = $title->getDBkey();
     if ($user->getId() !== 0 && WpPage::isInWikiplace($namespace, $db_key) && ($wikiplace = WpWikiplace::getBySubpage($db_key, $namespace)) instanceof WpWikiplace) {
         // is in a wikiplace
         $result = WpMember::IsMember($wikiplace, $user);
         return false;
         // stop hook processing, because we have the answer
     }
     return true;
     // continue hook processing
 }
 /**
  * Uses GET data
  */
 public function processRemoveMember()
 {
     $wikiplace = $this->checkWikiPlace($this->name);
     if (is_null($wikiplace)) {
         return;
     }
     // else, the wikiplace exists and the User executing this instance is the wikiplace owner, continue
     $this->action = self::ACTION_LIST_MEMBERS;
     // always
     if (!($user = User::newFromName($this->user)) instanceof User || $user->getId() == 0) {
         $this->msgKey = 'noname';
         // invalid username
         $this->msgType = 'error';
     } elseif (!($member = WpMember::GetFromWikiPlaceAndUser($wikiplace, $user)) instanceof WpMember) {
         $this->msgKey = 'wp-not-member';
         $this->msgType = 'error';
     } elseif (!$member->delete()) {
         $this->msgKey = 'internalerror';
         // sql error ?
         $this->msgType = 'error';
     } else {
         // everything is fine :)
         $user->invalidateCache();
         // necessary to update menus and link of the user
         $this->logActionMember('remove', $wikiplace->getTitle(), $user);
         $this->msgKey = 'wp-remove-member-success';
         $this->msgType = 'success';
     }
     // always
     $this->display();
     return;
 }
 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 ! ==");
     }
 }
Example #6
0
 /**
  * Checks subscription is active, page creation quota is not exceeded and
  * diskpace quota is not exceeded.
  * @param int $current_user_id The current user identifier (used to select i18n message)
  * @param int|WpWikiplace $wikiplace An instance of WpWikiplace (faster) or the wikiplace id (int), checks the
  * subscriptions associated to the wikiplace and the quotas of the subscription buyer.
  * @return boolean/string True if user can, or string message explaining why she can't
  * <ul>
  * <li><b>wp-no-active-sub</b> you have no active subscription</li>
  * <li><b>wp-wikiplace-no-active-sub</b> wikiplace has no active subscription associated</li>
  * <li><b>wp-page-quota-exceeded</b> your page quota exceeded</li>
  * <li><b>wp-wikiplace-page-quota-exceeded</b> the subscriber page quota exceeded</li>
  * <li><b>wp-diskspace-quota-exceeded</b> your diskspace quota exceeded</li>
  * <li><b>wp-wikiplace-diskspace-quota-exceeded</b> the subscriber diskspace quota exceeded</li>
  * </ul>
  */
 public static function userCanUploadNewFile($current_user_id, $wikiplace)
 {
     if (is_int($wikiplace)) {
         $wikiplace = WpWikiplace::getById($wikiplace);
     }
     if (!$wikiplace instanceof WpWikiplace) {
         throw new MWException('Invalid $wikiplace argument.');
     }
     $subscription = self::newFromId($wikiplace->getSubscriptionId());
     if (!$subscription instanceof WpSubscription) {
         return 'wp-wikiplace-no-active-sub';
         // "THE OWNER subscription ..."
     } else {
         if (!$subscription->isActive()) {
             if ($wikiplace->isOwner($current_user_id)) {
                 return 'wp-no-active-sub';
                 // "YOUR subscription ..."
             } else {
                 return 'wp-wikiplace-no-active-sub';
                 // "THE OWNER subscription ..."
             }
         }
     }
     if (!$wikiplace->isOwner($current_user_id) && !WpMember::IsMember($wikiplace, $current_user_id)) {
         return 'wp-not-owner-or-member';
     }
     $plan = $subscription->getPlan();
     $max_pages = $plan->getNbWikiplacePages();
     $owner_pages_nb = WpPage::countPagesOwnedByUser($wikiplace->getOwnerUserId());
     if ($owner_pages_nb >= $max_pages) {
         if ($wikiplace->isOwner($current_user_id)) {
             return 'wp-page-quota-exceeded';
             // "YOUR quota..."
         } else {
             return 'wp-wikiplace-page-quota-exceeded';
             // "THE OWNER quota ..."
         }
     }
     $max_diskspace = $plan->getDiskspace();
     $owner_diskspace_usage = WpPage::countDiskspaceUsageByUser($wikiplace->getOwnerUserId());
     if ($owner_diskspace_usage >= $max_diskspace) {
         if ($wikiplace->isOwner($current_user_id)) {
             return 'wp-diskspace-quota-exceeded';
             // "YOUR quota..."
         } else {
             return 'wp-wikiplace-diskspace-quota-exceeded';
             // "THE OWNER quota ..."
         }
     }
     return true;
 }