function quickSubscribe($email, $name = '', $memorials = false) { try { $subscriber = nc_subscriber::get_object(); $subscriber->subscription_add(1, 0, 0, false, array("Email" => $email, 'FIO' => $name)); if ($memorials) { update_row("User", array("Memorial_Subscriber" => 1), "Email='" . mysql_real_escape_string($email) . "'"); } } catch (\Exception $e) { dump($e->GetMessage()); } }
break; } subscribe_toggleItem($id); break; default: subscribe_addItem($cc); } if ($sub != $MODULE_VARS['subscriber']['SUBSCRIBER_LIST_SUB']) { echo s_browse_subscribes(); } } } else { // новая версия модуля try { // объект для управления рассылками $nc_subscriber = nc_subscriber::get_object(); // рассылка по этому компоненту в разделе $mailer = $nc_subscriber->get_mailer_by_cc($cc); // если пользователь авторизирован - то его сразу нужно попробовать подписать if ($AUTH_USER_ID) { $posting = 1; } // условие подписки $cond = $mailer['SubscribeCond']; if ($cond && $posting) { eval($cond); } if (!$posting) { if (!$AUTH_USER_ID) { // неавторизированный пользователь - выводим форму подписки eval("\$result= \"" . $nc_subscriber->tools->get_settings('FormSubscribe') . "\";");
function s_auth($cc_env, $action, $posting) { global $nc_core; global $admin_mode, $AUTHORIZATION_TYPE, $user_table_mode; global $AUTH_USER_ID; // редактирование пользователя через лицевую часть if ($action == "change" && $user_table_mode && ($AUTH_USER_ID || Authorize())) { return true; } if ($action == "index" || $action == "full" || $action == "search") { $action = "read"; } $cc = $cc_env["Sub_Class_ID"]; $MODULE_VARS = $nc_core->modules->get_module_vars(); // для модуля подписки версии 2 своя проверка прав if ($action == 'subscribe' && $MODULE_VARS['subscriber']['VERSION'] > 1) { try { $nc_s = nc_subscriber::get_object(); $mailer_id = $nc_s->get_mailer_by_cc($cc, 'Mailer_ID'); return $nc_s = $nc_s->check_rights($mailer_id); } catch (Exception $e) { } } // параметры текущего раздела $sub_env = $nc_core->subdivision->get_current(); // Если нет сс, то права на доступ нужно взять из раздела $instance = is_array($cc_env) && $cc ? "cc_env" : "sub_env"; switch ($action) { case "add": $f_access = ${$instance}["Write_Access_ID"]; break; case "change": $f_access = ${$instance}["Edit_Access_ID"]; break; case "subscribe": $f_access = ${$instance}["Subscribe_Access_ID"]; break; case "comment": $f_access = ${$instance}["Comment_Access_ID"]; break; case "moderate": $f_access = 3; break; //модерирование, надо провреить, не забанен ли, а потом проверить на наличие соответ. права //модерирование, надо провреить, не забанен ли, а потом проверить на наличие соответ. права default: $f_access = ${$instance}["Read_Access_ID"]; break; } // действия с объектами (изменение, удаление) не доступно неавторизованным if ($f_access == 1 && $action == "change") { $f_access = 2; } switch ($f_access) { case 1: // все if ($admin_mode) { if (!Authorize()) { return false; } if (!CheckUserRights($cc, $action, 1)) { return false; } } break; case 2: // только зарегистрированные if (!Authorize()) { return false; } global $perm; if ($perm->isBanned($cc_env, $action)) { return false; } break; case 3: // только уполномочнные if (!Authorize()) { return false; } global $perm; if ($perm->isBanned($cc_env, $action)) { return false; } if (!CheckUserRights($cc, $action, $posting)) { return false; } break; default: break; } return true; }
/** * Вернет массив с правами пользователя * каждая "строчка" - отдельное право, в строчке следующее "столбцы": * ID, live (время жизни), AdminType, title, 0, 1,2,3 4,5, ... * 0 1 2 3 4 5 - это чтение, добавление, изменнение, подписка, мод-ние и адм-ние (берется из констант, могут быть в другом порядке) * эти элменты - тоже массивы, ключи: 'checkbox' - 0 - нету, 1 - есть, 2 - есть всегда, 3 - нету в принипе * 'mask' - маска для этого права - берется из констант (1, 2,4,8,16....) * но может быть не массив, а "-1" - значит нету ничего в принципе (директор, ...) * * @param int UserID * @param int GroupID * @return array */ public static function GetAllPermission($UserID, $GroupID = 0) { global $nc_core, $db; //Получим все права if ($GroupID) { $Result = $db->get_results("SELECT * FROM `Permission` WHERE `PermissionGroup_ID`='" . (int) $GroupID . "'", ARRAY_A); } else { $Result = $db->get_results("SELECT * FROM `Permission` WHERE `User_ID`='" . (int) $UserID . "'", ARRAY_A); } foreach ((array) $Result as $prm) { $id = $prm['Permission_ID']; // если есть дата - преобразуем ее if ($prm['PermissionBegin']) { $prm['PermissionBegin'] = strtotime($prm['PermissionBegin']); $prm['PermissionBegin'] = strftime("%d.%m.%y %H:%M", $prm['PermissionBegin']); } if ($prm['PermissionEnd']) { $prm['PermissionEnd'] = strtotime($prm['PermissionEnd']); $prm['PermissionEnd'] = strftime("%d.%m.%y %H:%M", $prm['PermissionEnd']); } switch (true) { // определение live - времени жизни case !$prm['PermissionBegin'] && !$prm['PermissionEnd']: $ret[$id]['live'] = "<nobr>" . CONTROL_USER_RIGHTS_UNLIMITED . "</nobr>"; break; case $prm['PermissionBegin'] && $prm['PermissionEnd']: $ret[$id]['live'] = "<nobr>c " . $prm['PermissionBegin'] . "</nobr><br><nobr>по " . $prm['PermissionEnd'] . "</nobr>"; break; case $prm['PermissionBegin'] && !$prm['PermissionEnd']: $ret[$id]['live'] = "<nobr>c " . $prm['PermissionBegin'] . "</nobr>"; break; case !$prm['PermissionBegin'] && $prm['PermissionEnd']: $ret[$id]['live'] = "<nobr>по " . $prm['PermissionEnd'] . "</nobr>"; break; } $ret[$id]['AdminType'] = $prm['AdminType']; $ret[$id]['ID'] = $prm['AdminType']; $ps = $prm['PermissionSet']; // ps - permission set $c_id = $prm['Catalogue_ID']; // r - read, e - edit, d - add, s - subsribe, m - moderate, a - admin, l - delete, h -checked //в зависимости от этих переменных, включатся-выключатся checkbox'ы $r = $ps & MASK_READ ? 1 : 0; $d = $ps & MASK_ADD ? 1 : 0; $e = $ps & MASK_EDIT ? 1 : 0; $s = $ps & MASK_SUBSCRIBE ? 1 : 0; $m = $ps & MASK_MODERATE ? 1 : 0; $a = $ps & MASK_ADMIN ? 1 : 0; $c = $ps & MASK_COMMENT ? 1 : 0; $l = $ps & MASK_DELETE ? 1 : 0; $h = $ps & MASK_CHECKED ? 1 : 0; $ret[$id]['title'] = Permission::GetPermNameByID($prm['AdminType']); $ret[$id]['title'] .= " "; switch ($prm['AdminType']) { case DIRECTOR: case SUPERVISOR: case GUEST: //для них нету просмотр-измениие....-админ-ние вообще $r = $c = $e = $d = $s = $m = $a = $l = $h = -1; break; case SUBSCRIBER: $r = $c = $e = $d = $s = $m = $a = $l = $h = -1; $nc_s = nc_subscriber::get_object(); $ret[$id]['title'] = Permission::GetPermNameByID($prm['AdminType']) . " на рассылку " . $nc_s->get($c_id, 'Name'); break; case BAN_SITE: $m = $a = 3; // нету модерирования и админисрирования if ($c_id) { //определенный сайт $ret[$id]['title'] .= "\"" . $nc_core->catalogue->get_by_id($c_id, "Catalogue_Name") . "\""; } else { // все сайты $ret[$id]['title'] = CONTROL_USER_RIGHTS_SITEALL; } break; case CATALOGUE_ADMIN: if ($c_id) { $ret[$id]['title'] .= "\"" . $nc_core->catalogue->get_by_id($c_id, "Catalogue_Name") . "\""; } else { $ret[$id]['title'] = CONTROL_USER_RIGHTS_CATALOGUEADMINALL; } break; case BAN_SUB: $m = $a = 3; // нету модерирования и админисрирования // zdec break ne nugen // нету модерирования и админисрирования // zdec break ne nugen case SUBDIVISION_ADMIN: $catalogue_name = $nc_core->catalogue->get_by_id($nc_core->subdivision->get_by_id($c_id, 'Catalogue_ID'), 'Catalogue_Name'); $ret[$id]['title'] .= " \"" . $nc_core->subdivision->get_by_id($c_id, "Subdivision_Name") . "\" " . CONTROL_USER_FUNCS_FROMCAT . " \"" . $catalogue_name . "\""; break; case BAN_CC: $m = $a = 3; // zdec break ne nugen // zdec break ne nugen case SUB_CLASS_ADMIN: $ret[$id]['title'] .= " \"" . GetSubClassName($c_id) . "\" " . CONTROL_USER_FUNCS_FROMSEC . " \"" . $nc_core->subdivision->get_by_id(GetSubdivisionBySubClass($c_id), "Subdivision_Name") . "\""; break; case CLASSIFICATOR_ADMIN: $r = 2; $s = 3; $a = 3; $c = 3; $l = 3; $h = 3; // Просмотр - всегда, подписки и админ-ния нет if ($c_id) { $ret[$id]['title'] .= "\"" . Permission::_GetClassificatorNameByID($c_id) . "\""; } else { $ret[$id]['title'] = CONTROL_USER_RIGHTS_CLASSIFICATORADMINALL; } break; case MODERATOR: $r = 2; $s = $a = 3; $c = 3; $h = 3; $l = 3; // Просмотр - всегда, подписки и админ-ния нет break; } $ret[$id][NC_PERM_READ_ID]['checkbox'] = $r; $ret[$id][NC_PERM_READ_ID]['mask'] = MASK_READ; $ret[$id][NC_PERM_ADD_ID]['checkbox'] = $d; $ret[$id][NC_PERM_ADD_ID]['mask'] = MASK_ADD; $ret[$id][NC_PERM_EDIT_ID]['checkbox'] = $e; $ret[$id][NC_PERM_EDIT_ID]['mask'] = MASK_EDIT; $ret[$id][NC_PERM_SUBCRIBE_ID]['checkbox'] = $s; $ret[$id][NC_PERM_SUBCRIBE_ID]['mask'] = MASK_SUBSCRIBE; $ret[$id][NC_PERM_MODERATE_ID]['checkbox'] = $m; $ret[$id][NC_PERM_MODERATE_ID]['mask'] = MASK_MODERATE; $ret[$id][NC_PERM_ADMIN_ID]['checkbox'] = $a; $ret[$id][NC_PERM_ADMIN_ID]['mask'] = MASK_ADMIN; $ret[$id][NC_PERM_COMMENT_ID]['checkbox'] = $c; $ret[$id][NC_PERM_COMMENT_ID]['mask'] = MASK_COMMENT; $ret[$id][NC_PERM_CHECKED_ID]['checkbox'] = $h; $ret[$id][NC_PERM_CHECKED_ID]['mask'] = MASK_CHECKED; $ret[$id][NC_PERM_DELETE_ID]['checkbox'] = $l; $ret[$id][NC_PERM_DELETE_ID]['mask'] = MASK_DELETE; } // отсортируем массив с помощью пользователськой ф-цией cmp if (!empty($ret)) { uasort($ret, 'Permission::_cmp'); } return $ret; }