public function acceptInvitationEvent($runData) { $pl = $runData->getParameterList(); $invitationId = $pl->getParameterValue("invitation_id"); $userId = $runData->getUserId(); $user = $runData->getUser(); $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"); } 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)); } } // all ok... ;-) $db = Database::connection(); $db->begin(); // create membership $member = new DB_Member(); $member->setUserId($userId); $member->setSiteId($invitation->getSiteId()); $member->setDateJoined(new ODate()); $member->save(); $ml = new DB_MembershipLink(); $ml->setUserId($userId); $ml->setSiteId($invitation->getSiteId()); $ml->setDate(new ODate()); $ml->setType('INTERNAL_INVITATION'); $ml->setByUserId($invitation->getByUserId()); $ml->save(); // remove application (if any) $c = new Criteria(); $c->add("site_id", $site->getSiteId()); $c->add("user_id", $userId); DB_MemberApplicationPeer::instance()->delete($c); DB_MemberInvitationPeer::instance()->deleteByPrimaryKey($invitationId); $runData->ajaxResponseAdd("message", _('Now you are a member of the site') . ' <a href="http://' . htmlspecialchars($site->getDomain()) . '">' . htmlspecialchars($site->getName()) . '</a>'); AdminNotificationMaker::instance()->memberInvitationAccepted($site, $user); $db->commit(); }
public function acceptApplicationEvent($runData) { $pl = $runData->getParameterList(); $userId = $pl->getParameterValue("user_id"); $site = $runData->getTemp("site"); $siteId = $site->getSiteId(); $user = DB_OzoneUserPeer::instance()->selectByPrimaryKey($userId); if ($user == null) { throw new ProcessException("Error"); } $type = $pl->getParameterValue("type"); $text = $pl->getParameterValue("text"); if ($type !== 'accept' && $type !== 'decline') { throw new ProcessException("Invalid action", "invalid_action"); } $c = new Criteria(); $c->add("user_id", $userId); $c->add("site_id", $siteId); $db = Database::connection(); $db->begin(); $application = DB_MemberApplicationPeer::instance()->selectOne($c); if ($application == null) { throw new ProcessException(_("This application does not exist (anymore)."), "no_application"); } if ($type == "accept") { // add to members $mem = new DB_Member(); $mem->setUserId($userId); $mem->setSiteId($siteId); $mem->setDateJoined(new ODate()); $mem->save(); $ml = new DB_MembershipLink(); $ml->setUserId($userId); $ml->setSiteId($site->getSiteId()); $ml->setDate(new ODate()); $ml->setType('APPLICATION_ACCEPTED'); $ml->setByUserId($runData->getUser()->getUserId()); $ml->save(); NotificationMaker::instance()->membershipApplicationAccepted($site, $user); } else { NotificationMaker::instance()->membershipApplicationDeclined($site, $user); } $application->setReply($text); if ($type == "accept") { $application->setStatus("accepted"); } else { $application->setStatus("declined"); } $application->save(); $db->commit(); }
public function restoreSite($nsite, $dump) { $superSettings = $dump['superSettings']; $settings = $dump['settings']; $superSettings->setNew(true); $superSettings->setSiteId($nsite->getSiteId()); $superSettings->save(); // site_settings $settings->setNew(true); $settings->setSiteId($nsite->getSiteId()); $settings->save(); $forumSettings = $dump['forumSettings']; $forumSettings->setNew(true); $forumSettings->setSiteId($nsite->getSiteId()); $forumSettings->save(); // add user as admin $owner = $this->owner; if ($owner) { $admin = new DB_Admin(); $admin->setSiteId($nsite->getSiteId()); $admin->setUserId($owner->getUserId()); $admin->setFounder(true); // will be nonremovable ;-) $admin->save(); $member = new DB_Member(); $member->setSiteId($nsite->getSiteId()); $member->setUserId($owner->getUserId()); $member->setDateJoined(new ODate()); $member->save(); } $categories = $dump['categories']; foreach ($categories as $category) { $cat = clone $category; $cat->setNew(true); $cat->setCategoryId(null); $cat->setSiteId($nsite->getSiteId()); $cat->save(); // get pages $pages = $dump['pages'][$category->getCategoryId()]; foreach ($pages as $page) { $newUnixName = $page->getUnixName(); $now = new ODate(); // create new page object based on the existing page $nsource = new DB_PageSource(); $nsource->setText($page->getTemp("source")); $nsource->save(); $meta = $page->getTemp("meta"); $nmeta = new DB_PageMetadata(); $nmeta->setTitle($meta->getTitle()); $nmeta->setUnixName($newUnixName); if ($owner) { $nmeta->setOwnerUserId($owner->getUserId()); } else { $nmeta->setOwnerUserId($meta->getOwnerUserId()); } $nmeta->save(); $nrev = new DB_PageRevision(); $nrev->setSiteId($nsite->getSiteId()); $nrev->setSourceId($nsource->getSourceId()); $nrev->setMetadataId($nmeta->getMetadataId()); $nrev->setFlagNew(true); $nrev->setDateLastEdited($now); $nrev->setUserId($owner->getUserId()); $nrev->obtainPK(); $npage = new DB_Page(); $npage->setSiteId($nsite->getSiteId()); $npage->setCategoryId($cat->getCategoryId()); $npage->setRevisionId($nrev->getRevisionId()); $npage->setSourceId($nsource->getSourceId()); $npage->setMetadataId($nmeta->getMetadataId()); $npage->setTitle($page->getTitle()); $npage->setUnixName($newUnixName); $npage->setDateLastEdited($now); $npage->setLastEditUserId($owner->getUserId()); $npage->setOwnerUserId($owner->getUserId()); $npage->save(); $nrev->setPageId($npage->getPageId()); $nrev->save(); $ncomp = new DB_PageCompiled(); $ncomp->setPageId($npage->getPageId()); $ncomp->setDateCompiled($now); $ncomp->save(); } } $od = new Outdater(); $od->recompileWholeSite($nsite); }
public function acceptEmailInvitationEvent($runData) { $pl = $runData->getParameterList(); $user = $runData->getUser(); $hash = $pl->getParameterValue("hash"); // get the invitation entry (if any) $c = new Criteria(); $c->add("hash", $hash); $c->add("accepted", false); $inv = DB_EmailInvitationPeer::instance()->selectOne($c); $runData->contextAdd("user", $user); if (!$inv) { throw new ProcessException(_("Sorry, no invitation can be found.")); } $site = DB_SitePeer::instance()->selectByPrimaryKey($inv->getSiteId()); // check if not a member already $c = new Criteria(); $c->add("user_id", $user->getUserId()); $c->add("site_id", $site->getSiteId()); $mem = DB_MemberPeer::instance()->selectOne($c); if ($mem) { throw new ProcessException(_("It seems you already are a member of this site! Congratulations anyway ;-)")); } // check if not > max _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)); } } // all should be fine at this point - add to members $db = Database::connection(); $db->begin(); $mem = new DB_Member(); $mem->setDateJoined(new ODate()); $mem->setSiteId($site->getSiteId()); $mem->setUserId($user->getUserId()); $mem->save(); $ml = new DB_MembershipLink(); $ml->setUserId($user->getUserId()); $ml->setSiteId($site->getSiteId()); $ml->setDate(new ODate()); $ml->setType('EMAIL_INVITATION'); $ml->setByUserId($inv->getUserId()); $ml->save(); // add to contacts? $sender = DB_OzoneUserPeer::instance()->selectByPrimaryKey($inv->getUserId()); if ($inv->getToContacts() && $sender->getUserId() != $user->getUserId()) { try { // check if contact already exists $c = new Criteria(); $c->add("user_id", $user->getUserId()); $c->add("target_user_id", $sender->getUserId()); $con0 = DB_ContactPeer::instance()->selectOne($c); if (!$con0) { $con = new DB_Contact(); $con->setUserId($user->getUserId()); $con->setTargetUserId($sender->getUserId()); $con->save(); } } catch (Exception $e) { } try { // check if contact already exists $c = new Criteria(); $c->add("user_id", $sender->getUserId()); $c->add("target_user_id", $user->getUserId()); $con0 = DB_ContactPeer::instance()->selectOne($c); if (!$con0) { $con = new DB_Contact(); $con->setUserId($sender->getUserId()); $con->setTargetUserId($user->getUserId()); $con->save(); } } catch (Exception $e) { } } // set accepted $inv->setAccepted(true); $inv->save(); // create a notification AdminNotificationMaker::instance()->acceptedEmailInvitation($inv, $user); $db->commit(); $runData->contextAdd("site", $site); }
public function saveEvent($runData) { $params = $runData->getParameterList()->asArray(); $ids = array(); foreach ($params as $param_key => $param_val) { $m = array(); if (preg_match(';^nick_name_([new0-9]+)$;', $param_key, $m)) { $ids[] = $m[1]; } } foreach ($ids as $id) { $nick_name = $params["nick_name_{$id}"]; $password = $params["password_{$id}"]; $admin = $params["admin_{$id}"] ? true : false; $mod = $params["mod_{$id}"] ? true : false; $site = $runData->getTemp('site'); if ($nick_name) { if ($id = 1 * $id) { $u = DB_OzoneUserPeer::instance()->selectByPrimaryKey($id); } else { $u = null; } $next = false; if (!$u) { $u = new DB_OzoneUser(); if (!$password) { $next = true; } $u->save(); $m = new DB_Member(); $m->setUserId($u->getUserId()); $m->setSiteId($site->getSiteId()); $m->save(); } if (!$next) { $u->setName($nick_name); $u->setEmail($nick_name); $u->setNickName($nick_name); $u->setUnixName(WDStringUtils::toUnixName($nick_name)); if ($password) { $u->setPassword(md5($password)); } $u->save(); if ($admin) { if (!WDPermissionManager::hasPermission('manage_site', $u, $site)) { $a = new DB_Admin(); $a->setUserId($u->getUserId()); $a->setSiteId($site->getSiteId()); $a->save(); } } else { // ! $admin $c = new Criteria(); $c->add('site_id', $site->getSiteId()); $c->add('user_id', $u->getUserId()); DB_AdminPeer::instance()->delete($c); } if ($mod) { if (!WDPermissionManager::hasPermission('moderate_site', $u, $site)) { $m = new DB_Moderator(); $m->setUserId($u->getUserId()); $m->setSiteId($site->getSiteId()); $m->save(); } } else { // ! $mod $c = new Criteria(); $c->add('site_id', $site->getSiteId()); $c->add('user_id', $u->getUserId()); DB_ModeratorPeer::instance()->delete($c); } } } } }