public function build($runData) { // just get invitations $userId = $runData->getUserId(); $c = new Criteria(); $c->add("user_id", $userId); $c->addOrderDescending("invitation_id"); $invs = DB_MemberInvitationPeer::instance()->select($c); if (count($invs) > 0) { $runData->contextAdd("invitations", $invs); } }
public function inviteMemberEvent($runData) { $site = $runData->getTemp("site"); $pl = $runData->getParameterList(); $userId = $pl->getParameterValue("user_id"); $user = DB_OzoneUserPeer::instance()->selectByPrimaryKey($userId); if ($user == null) { throw new ProcessException("Error"); } try { WDPermissionManager::instance()->hasPermission("become_member", $user, $site); } catch (Exception $e) { throw new ProcessException(_("It seems that this user is on the blacklist")); } $c = new Criteria(); $c->add("user_id", $userId); $c->add("site_id", $site->getSiteId()); $mem = DB_MemberPeer::instance()->select($c); if (count($mem) > 0) { throw new ProcessException(_("This user already is a member of this site."), "already_member"); } $invs = DB_MemberInvitationPeer::instance()->select($c); if (count($invs) > 0) { throw new ProcessException(_("This user has been already invited to this site."), "already_invited"); } // check if user WISHES to receive invitations $set = DB_UserSettingsPeer::instance()->selectByPrimaryKey($user->getUserId()); if (!$set->getReceiveInvitations()) { throw new ProcessException(_("This user does not wish to receive any invitations.", "wishes_not")); } $db = Database::connection(); $db->begin(); // ok, create invitation $text = substr(trim($pl->getParameterValue("text")), 0, 300); $inv = new DB_MemberInvitation(); $inv->setUserId($userId); $inv->setByUserId($runData->getUserId()); $inv->setSiteId($site->getSiteId()); $inv->setDate(new ODate()); $inv->setBody($text); $inv->save(); // and create a notification too... NotificationMaker::instance()->newMembershipInvitation($inv); $db->commit(); $runData->ajaxResponseAdd("result", 'invited'); $runData->ajaxResponseAdd("userId", $userId); }
public function throwAwayInvitationEvent($runData) { $pl = $runData->getParameterList(); $invitationId = $pl->getParameterValue("invitation_id"); $userId = $runData->getUserId(); $user = $runData->getUser(); $db = Database::connection(); $db->begin(); $invitation = DB_MemberInvitationPeer::instance()->selectByPrimaryKey($invitationId); $site = DB_SitePeer::instance()->selectByPrimaryKey($invitation->getSiteId()); if ($invitation == null || $invitation->getUserId() != $userId || $site == null) { throw new ProcessException(_("Invitation can not be found."), "no_invitation"); } $c = new Criteria(); $c->add("invitation_id", $invitationId); $c->add("user_id", $userId); DB_MemberInvitationPeer::instance()->delete($c); AdminNotificationMaker::instance()->memberInvitationDeclined($site, $user); $db->commit(); }
public function applyByPasswordEvent($runData) { $site = $runData->getTemp("site"); $pl = $runData->getParameterList(); $comment = $pl->getParameterValue("comment"); $userId = $runData->getUserId(); $settings = $site->getSettings(); $db = Database::connection(); $db->begin(); if (!$settings->getAllowMembershipByPassword()) { throw new ProcessException(_("Applying is disabled for this site."), "not_enabled"); } $user = $runData->getUser(); if ($user == null) { throw new ProcessException(_("Sorry, you are not logged in. Anonymous users can not apply ;-)")); } // check for permissions WDPermissionManager::instance()->hasPermission("become_member", $user, $site); $c = new Criteria(); $c->add("site_id", $site->getSiteId()); $c->add("user_id", $userId); $a = DB_MemberPeer::instance()->selectOne($c); if ($a != null) { $runData->ajaxResponseAdd('status', 'already_member'); $runData->ajaxResponseAdd("message", _("You already are a member of this site.")); $db->commit(); return; } $password = $pl->getParameterValue("password"); if ($password === $settings->getMembershipPassword()) { // create member... // check if not >=10 members if ($site->getPrivate()) { $settings = $site->getSettings(); $maxMembers = $settings->getMaxPrivateMembers(); $c = new Criteria(); $c->add("site_id", $site->getSiteId()); $cmem = DB_MemberPeer::instance()->selectCount($c); if ($cmem >= $maxMembers) { throw new ProcessException(sprintf(_('Sorry, at the moment max %d member limit apply for private Wikis. The Site would have to be upgraded to allow more members.'), $maxMembers)); } } $mem = new DB_Member(); $mem->setUserId($userId); $mem->setSiteId($site->getSiteId()); $mem->setDateJoined(new ODate()); $mem->save(); $ml = new DB_MembershipLink(); $ml->setUserId($userId); $ml->setSiteId($site->getSiteId()); $ml->setDate(new ODate()); $ml->setType('BY_PASSWORD'); $ml->save(); $runData->ajaxResponseAdd("message", _("Congratulations! You are now a member of this site!")); // remove application (if any) and invitations $c = new Criteria(); $c->add("site_id", $site->getSiteId()); $c->add("user_id", $userId); DB_MemberApplicationPeer::instance()->delete($c); DB_MemberInvitationPeer::instance()->delete($c); AdminNotificationMaker::instance()->newMemberByPassword($site, $user); } else { $runData->ajaxResponseAdd('status', 'wrong_password'); $runData->ajaxResponseAdd("message", _("Sorry, wrong password...")); $db->commit(); return; } $db->commit(); }
/** * Marks the site as "deleted" and invalidates all the cache related to the site. * * @param unknown_type $runData */ public function deleteSiteEvent($runData) { $site = $runData->getTemp("site"); $user = $runData->getUser(); $c = new Criteria(); $c->add("user_id", $user->getUserId()); $c->add("site_id", $site->getSiteId()); $c->add("founder", true); $rel = DB_AdminPeer::instance()->selectOne($c); if (!$rel) { throw new ProcessException(_("Sorry, you have no permissions to delete this site.")); } $db = Database::connection(); $db->begin(); $oldUnixName = $site->getUnixName(); $site->setDeleted(true); // remove some data. $c = new Criteria(); $c->add('site_id', $site->getSiteId()); DB_AnonymousAbuseFlagPeer::instance()->delete($c); DB_DomainRedirectPeer::instance()->delete($c); DB_EmailInvitationPeer::instance()->delete($c); DB_MemberApplicationPeer::instance()->delete($c); DB_MemberInvitationPeer::instance()->delete($c); // now clear cache! $keys = array(); $keys[] = 'site..' . $site->getUnixName(); $keys[] = 'site_cd..' . $site->getCustomDomain(); $mc = OZONE::$memcache; foreach ($keys as $k) { $mc->delete($k); } $outdater = new Outdater(); $outdater->siteEvent('delete', $site); $outdater->siteEvent('sitewide_change', $site); // change site name!!! $site->setUnixName($site->getUnixName() . '..del..' . time()); $site->save(); // remove custom domain link // rename the files @rename(WIKIDOT_ROOT . '/web/files--sites/' . $oldUnixName, WIKIDOT_ROOT . '/web/files--sites/' . $site->getUnixName()); // delete custom domain link if ($site->getCustomDomain()) { @unlink(WIKIDOT_ROOT . '/web/custom--domains/' . $site->getCustomDomain()); $site->setCustomDomain(null); } $db->commit(); }