public function toModeratorsEvent($runData) { $userId = $runData->getParameterList()->getParameterValue("user_id"); $siteId = $runData->getTemp("site")->getSiteId(); $site = $runData->getTemp("site"); $db = Database::connection(); $db->begin(); $user = DB_OzoneUserPeer::instance()->selectByPrimaryKey($userId); if ($user == null) { $runData->ajaxResponseAdd("status", "no_user"); $runData->ajaxResponseAdd("message", _("The user does not exist? This should not happen.")); $db->commit(); return; } // check if a member $c = new Criteria(); $c->add("user_id", $userId); $c->add("site_id", $siteId); $mem = DB_MemberPeer::instance()->selectOne($c); if ($mem == null) { $runData->ajaxResponseAdd("status", "not_member"); $runData->ajaxResponseAdd("message", _("The user is not a member of this site (anymore).")); $db->commit(); return; } // check if not already a moderator $mod = DB_ModeratorPeer::instance()->selectOne($c); if ($mod != null) { $runData->ajaxResponseAdd("status", "already_moderator"); $runData->ajaxResponseAdd("message", _("The user is already a moderator of this site.")); $db->commit(); return; } // check if not already an admin. The roles should not duplicate. $mod = DB_AdminPeer::instance()->selectOne($c); if ($mod != null) { $runData->ajaxResponseAdd("status", "already_admin"); $runData->ajaxResponseAdd("message", _("The user is already an administrator of this site.")); $db->commit(); return; } // ok, add now! $mod = new DB_Moderator(); $mod->setSiteId($siteId); $mod->setUserId($userId); $mod->save(); NotificationMaker::instance()->addedToModerators($site, $user); $runData->ajaxResponseAdd("userName", $user->getNickName()); $db->commit(); }
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); } } } } }