/** * * @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)); }
/** * @param User $user * @return boolean */ public function isMember($user) { return WpMember::IsMember($this, $user); }
/** * @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 ! =="); } }
/** * 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; }