function execute() { $context = $this->getContext(); $controller = $context->getController(); $request = $context->getRequest(); $user = $context->getUser(); // 管理者かどうか確認 if (!$this->get_execute_privilege()) { $controller->forward(SECURE_MODULE, SECURE_ACTION); return; } $acs_user_info_row = $user->getAttribute('acs_user_info_row'); // get $form = $request->ACSGetParameters(); $user_id = $form['user_id']; if (ACSUser::get_user_info_row_by_user_id($user_id)) { echo ACSMsg::get_msg('System', 'AddUserAction.class.php', 'M001'); return; } // ユーザ情報を新規登録する $ret = ACSUser::set_user_info($form); // ログ登録: ユーザ新規登録 ACSLog::set_log($acs_user_info_row, 'New User Registration', $ret, "[UserID:{$form['user_id']}]"); $user_list_url = $this->getControllerPath('System', 'UserList'); header("Location: {$user_list_url}"); }
function execute() { $context = $this->getContext(); $controller = $context->getController(); $request = $context->getRequest(); $user = $context->getUser(); // 管理者かどうか確認 if (!$this->get_execute_privilege()) { $controller->forward(SECURE_MODULE, SECURE_ACTION); return; } $acs_user_info_row = $user->getAttribute('acs_user_info_row'); // get $form = $request->ACSGetParameters(); $user_community_id = $user->getAttribute('user_id'); $form['user_community_id'] = $user_community_id; $target_user_info_row = ACSUser::get_user_profile_row($user_community_id, 'include_private_flag'); $post_user_info_row = ACSUser::get_user_info_row_by_user_id($form['user_id']); if ($post_user_info_row && $user_community_id != $post_user_info_row['user_community_id']) { echo ACSMsg::get_msg('System', 'EditUserAction.class.php', 'M002'); return; } //パスワードチェック if ($form['passwd_change'] == 'change_on' && $form['passwd'] == $form['passwd2'] || $form['passwd_change'] == '') { // ユーザ情報を変更する $ret = ACSUser::update_user_info($form); if (!$ret) { echo "Warning: Update user information failed."; return; } } else { echo ACSMsg::get_msg('System', 'EditUserAction.class.php', 'M001'); return; } // ログ登録: ユーザ情報変更 ACSLog::set_log($acs_user_info_row, 'Change User Information', $ret, "[UserID:{$target_user_info_row['user_id']}]"); // ユーザ一覧を表示 $user_list_url = $this->getControllerPath('System', 'UserList'); header("Location: {$user_list_url}"); }
/** * パスワードファイルから指定のユーザIDのエントリを削除する * * @param $delete_user_id 削除するユーザID * @return 成功(true) / 失敗(false) */ function delete_passwd($delete_user_id) { $ret = 1; $entry_array = array(); // パスワードファイルエントリ保持配列 if (!is_writable(ACS_PASSWD_FILE)) { return 0; } // ファイル読み込み $data_arr = file(ACS_PASSWD_FILE); foreach ($data_arr as $line) { list($user_id, $passwd) = explode(':', trim($line)); // 削除するユーザIDはスキップ if ($user_id == $delete_user_id) { continue; } // ユーザ情報(user_info)が存在するユーザIDのみ保存対象とする if (ACSUser::get_user_info_row_by_user_id($user_id)) { $entry_array[$user_id] = $passwd; } } // ファイルオープン if (($fp = fopen(ACS_PASSWD_FILE, 'w')) === false) { return 0; } flock($fp, LOCK_EX); foreach ($entry_array as $user_id => $passwd) { // 空のパスワードは除去 if ($passwd != '') { fwrite($fp, "{$user_id}:{$passwd}\n"); } } // ファイルクローズ fclose($fp); return $ret; }
/** * ユーザ情報(プロフィール)をセットする * * @param $acs_user_info_row * @param ユーザ情報(プロフィール) * @return 成功(true) / 失敗(false) */ static function set_user_profile($acs_user_info_row, $form) { $user_community_id = $form['id']; $contents_type_master_array = ACSDB::get_master_array('contents_type'); $contents_type_code_array['self'] = array_search(ACSMsg::get_mst('contents_type_master', 'D00'), $contents_type_master_array); $contents_type_code_array['user_name'] = array_search(ACSMsg::get_mst('contents_type_master', 'D01'), $contents_type_master_array); $contents_type_code_array['mail_addr'] = array_search(ACSMsg::get_mst('contents_type_master', 'D02'), $contents_type_master_array); $contents_type_code_array['belonging'] = array_search(ACSMsg::get_mst('contents_type_master', 'D03'), $contents_type_master_array); $contents_type_code_array['speciality'] = array_search(ACSMsg::get_mst('contents_type_master', 'D04'), $contents_type_master_array); $contents_type_code_array['birthplace'] = array_search(ACSMsg::get_mst('contents_type_master', 'D05'), $contents_type_master_array); $contents_type_code_array['birthday'] = array_search(ACSMsg::get_mst('contents_type_master', 'D06'), $contents_type_master_array); $contents_type_code_array['community_profile'] = array_search(ACSMsg::get_mst('contents_type_master', 'D07'), $contents_type_master_array); $contents_type_code_array['community_profile_login'] = array_search(ACSMsg::get_mst('contents_type_master', 'D08'), $contents_type_master_array); $contents_type_code_array['community_profile_friend'] = array_search(ACSMsg::get_mst('contents_type_master', 'D09'), $contents_type_master_array); $contents_type_code_array['friends_list'] = array_search(ACSMsg::get_mst('contents_type_master', 'D11'), $contents_type_master_array); $contents_type_code_array['mail_lang'] = array_search(ACSMsg::get_mst('contents_type_master', 'D51'), $contents_type_master_array); // コミュニティ種別マスタ $community_type_master_array = ACSDB::get_master_array('community_type'); // コミュニティ種別コード $user_community_type_code = array_search(ACSMsg::get_mst('community_type_master', 'D10'), $community_type_master_array); $friends_community_type_code = array_search(ACSMsg::get_mst('community_type_master', 'D20'), $community_type_master_array); // 公開レベルマスタ $open_level_master_array = ACSDB::get_master_array('open_level'); // BEGIN ACSDB::_do_query("BEGIN"); // user_infoが未登録のLDAPユーザの場合は基本情報を登録する if (!$acs_user_info_row['is_acs_user'] && $acs_user_info_row['is_ldap_user']) { // 新コミュニティID $user_community_id_seq = ACSDB::get_next_seq('community_id_seq'); $user_community_id = $user_community_id_seq; // (1) ユーザコミュニティ (community) $sql = "INSERT INTO community"; $sql .= " (community_id, community_name, community_type_code)"; $sql .= " VALUES ({$user_community_id_seq}, null, '{$user_community_type_code}')"; $ret = ACSDB::_do_query($sql); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } // (2) ユーザ情報 (user_info) $sql = "INSERT INTO user_info"; $sql .= " (user_id, user_community_id, administrator_flag)"; $sql .= " VALUES ('{$form['user_id']}', '{$user_community_id_seq}', 'f')"; $ret = ACSDB::_do_query($sql); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } // (3) マイフレンズ $contents_form = array(); $contents_form['community_id'] = $user_community_id_seq; $contents_form['contents_type_code'] = array_search(ACSMsg::get_mst('contents_type_master', 'D11'), $contents_type_master_array); $contents_form['contents_value'] = ''; $contents_form['open_level_code'] = ACSAccessControl::get_default_open_level_code(ACSMsg::get_mst('community_type_master', 'D10'), ACSMsg::get_mst('contents_type_master', 'D11')); $ret = ACSCommunity::set_contents($contents_form); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } // (4) マイフレンズコミュニティ (community) $friends_community_id_seq = ACSDB::get_next_seq('community_id_seq'); $sql = "INSERT INTO community"; $sql .= " (community_id, community_type_code)"; $sql .= " VALUES ('{$friends_community_id_seq}', '{$friends_community_type_code}')"; $ret = ACSDB::_do_query($sql); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } // (5) マイフレンズコミュニティをユーザコミュニティのサブコミュニティとする (sub_community) $sql = "INSERT INTO sub_community"; $sql .= " (community_id, sub_community_id)"; $sql .= " VALUES ('{$user_community_id_seq}', '{$friends_community_id_seq}')"; $ret = ACSDB::_do_query($sql); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } $is_ldap_user_login_flag = 1; // ユーザ基本情報ここまで } // ニックネーム $ret = ACSCommunity::set_community_name($user_community_id, $form['community_name']); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } // コンテンツ: 氏名, メールアドレス, 所属, 専攻, 出身, 生年月日, プロフィールは3種 foreach (array('user_name', 'mail_addr', 'belonging', 'speciality', 'birthplace', 'birthday', 'community_profile', 'community_profile_login', 'community_profile_friend', 'friends_list', 'mail_lang') as $contents_key) { $contents_form = array('community_id' => $user_community_id, 'contents_type_code' => $contents_type_code_array[$contents_key], 'contents_value' => $form[$contents_key], 'open_level_code' => $form['open_level_code_array'][$contents_key]); $ret = ACSCommunity::set_contents($contents_form); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } } // コンテンツ: ページ全体 = 一般公開とする $contents_form = array('community_id' => $user_community_id, 'contents_type_code' => $contents_type_code_array['self'], 'contents_value' => '', 'open_level_code' => array_search(ACSMsg::get_mst('open_level_master', 'D01'), $open_level_master_array)); $ret = ACSCommunity::set_contents($contents_form); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } // 信頼済みコミュニティ: 出身, 生年月日 foreach (array('birthplace', 'birthday') as $contents_key) { if ($form['trusted_community_flag'][$contents_key]) { // マイフレンズグループ $trusted_community_id_array = explode(',', $form['trusted_community_id_csv_array'][$contents_key]); foreach ($trusted_community_id_array as $trusted_community_id) { if ($trusted_community_id == '') { continue; } $contents_trusted_community_form = array('community_id' => $user_community_id, 'contents_type_code' => $contents_type_code_array[$contents_key], 'open_level_code' => $form['open_level_code_array'][$contents_key], 'trusted_community_id' => $trusted_community_id); $ret = ACSCommunity::set_contents_trusted_community($contents_trusted_community_form); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } } } else { // マイフレンズ $trusted_community_id = ACSUser::get_friends_community_id($user_community_id); // フレンズコミュニティID $contents_trusted_community_form = array('community_id' => $user_community_id, 'contents_type_code' => $contents_type_code_array[$contents_key], 'open_level_code' => $form['open_level_code_array'][$contents_key], 'trusted_community_id' => $trusted_community_id); $ret = ACSCommunity::set_contents_trusted_community($contents_trusted_community_form); if (!$ret) { ACSDB::_do_query("ROLLBACK"); return $ret; } } } // COMMIT ACSDB::_do_query("COMMIT"); if ($is_ldap_user_login_flag) { $acs_user_info_row = ACSUser::get_user_info_row_by_user_id($form['user_id']); // ログ登録: LDAPユーザ新規登録 ACSLog::set_log($acs_user_info_row, 'New LDAP User Registration', $ret, "[UserID:{$form['user_id']}]"); // ラストログイン登録 ACSUser::set_last_login($acs_user_info_row); } return $ret; }
/** * 外部RSS自動取り込みを実行する * * @param $community_row コミュニティ情報 * @return $msg */ static function do_process($community_row) { $msg = ""; // 公開レベルマスタ $open_level_master_array = ACSDB::get_master_array('open_level'); // 外部RSSコンテンツ情報を付加 $community_row = ACSExternalRSS::add_contents_row_array($community_row); // RSS情報を取得 $rss_row_array = ACSExternalRSS::get_external_rss_row_array($community_row['contents_row_array']['external_rss_url']['contents_value']); if ($rss_row_array == false) { return; } // 外部RSS.投稿者が該当コミュニティのコミュニティ管理者であるかどうかチェックする $community_admin_user_info_row_array = ACSCommunity::get_community_admin_user_info_row_array($community_row['community_id']); $err_flg = 1; foreach ($community_admin_user_info_row_array as $community_admin_user_info_row) { if ($community_admin_user_info_row['user_community_id'] == $community_row['contents_row_array']['external_rss_post_user']['contents_value']) { $err_flg = 0; break; } } if ($err_flg) { return; } // 投稿者情報 (ml_addrを含む情報) $post_user_info_row = ACSUser::get_user_info_row_by_user_community_id($community_row['contents_row_array']['external_rss_post_user']['contents_value']); $post_user_info_row = ACSUser::get_user_info_row_by_user_id($post_user_info_row['user_id']); // 投稿情報($form) // // 初期化 $form = array(); $form['community_id'] = $community_row['community_id']; $form['user_community_id'] = $community_row['contents_row_array']['external_rss_post_user']['contents_value']; $form['open_level_code'] = $community_row['contents_row_array']['external_rss_url']['open_level_code']; // パブリックリリース の場合 if ($open_level_master_array[$form['open_level_code']] == ACSMsg::get_mst('open_level_master', 'D06') && intval($community_row['contents_row_array']['external_rss_public_release_expire_term']['contents_value']) >= 1) { $form['expire_date'] = "CURRENT_DATE + '@ " . ($community_row['contents_row_array']['external_rss_public_release_expire_term']['contents_value'] - 1) . " days'::INTERVAL"; } else { $form['expire_date'] = ''; } // 非公開 (メンバのみ) の場合 if ($open_level_master_array[$form['open_level_code']] == ACSMsg::get_mst('open_level_master', 'D04')) { $form['trusted_community_row_array'] = $community_row['contents_row_array']['external_rss_url']['trusted_community_row_array']; } else { $form['trusted_community_row_array'] = array(); } $form['ml_send_flag'] = ACSLib::get_pg_boolean(ACSLib::get_boolean($community_row['contents_row_array']['external_rss_ml_send_flag']['contents_value'])); // RSS記事ごとの処理 // foreach ($rss_row_array['items'] as $rss_item_row) { // 掲載されているかチェック if (!ACSExternalRSS::is_posted_value($community_row['community_id'], $rss_item_row['rss_item_title'], $rss_item_row['rss_item_date'])) { // 掲載されていない場合 $form['subject'] = $rss_item_row['rss_item_title']; $form['body'] = $rss_item_row['rss_item_content']; $form['post_date'] = $rss_item_row['rss_item_date']; $bbs_id = ACSExternalRSS::set_bbs_and_external_rss($form, $rss_row_array['channel_info'], $rss_item_row); if (!$bbs_id) { echo "ERROR\n"; exit; } else { $msg .= "掲載: {$community_row['community_name']} (community_id={$community_row['community_id']})\n"; $msg .= "\t=> {$form['subject']} (bbs_id={$bbs_id})\n"; if (ACSLib::get_boolean($form['ml_send_flag'])) { // MLステータスの取得 $ml_status_row = ACSCommunity::get_contents_row($community_row['community_id'], ACSMsg::get_mst('contents_type_master', 'D62')); $ml_status = $ml_status_row['contents_value']; // ML有りの場合メールを送信 if ($ml_status == 'ACTIVE') { // 件名編集 $subject = str_replace('{BBSID}', $bbs_id, ACS_COMMUNITY_ML_SUBJECT_FORMAT) . $form['subject']; // ML送信 ACSCommunityMail::send_community_mailing_list($community_row['community_id'], $post_user_info_row['mail_addr'], $form['subject'], $form['body']); $msg .= "\t=> ML送信\n"; } } } } } return $msg; }
/** * 初期処理 * @access public * @param Object $context context * @return boolean 処理結果 */ public function initialize($context) { parent::initialize($context); // アクションの共通処理を実装する /* 初期値をセットする */ $this->controller = $context->getController(); $this->request = $context->getRequest(); $this->user = $context->getUser(); $this->moduleName = $context->getModuleName(); $this->actionName = $context->getActionName(); $this->messages =& CommonMessages::getInstance(); /* requestオブジェクトにフォーム登録リストをセットする */ $this->request->setAttributeByRef('formList', $this->formList); $request =& $context->getRequest(); $user =& $context->getUser(); // セッションからユーザIDが取得できず、POSTでユーザIDが取得可能な場合 $user_id = $user->getAttribute('login_user_id'); $justLogin = false; if (($user_id == NULL || $user_id == "") && ($_POST['userid'] != NULL && $_POST['userid'] != "")) { $input_user_id = $_POST['userid']; $input_passwd = $_POST['passwd']; // エラーチェック(.htpasswd、LDAPの順) $user_id = ACSSystem::check_passwd($input_user_id, $input_passwd); if ($user_id) { $justLogin = true; $getLogoutDateEverytime = ACSSystemConfig::get_keyword_value(ACSMsg::get_mst('system_config_group', 'D08'), 'GET_LOGOUT_DATE_EVERYTIME'); $user->setAttribute('getLogoutDateEverytime', $getLogoutDateEverytime); } } // 言語設定の実行 if ($request->getparameter('acsmsg')) { ACSMsg::set_lang($request->getparameter('acsmsg')); ACSMsg::set_lang_cookie($request->getparameter('acsmsg')); } // 権限クリア $user->clearCredentials(); // 認証済みを登録 $user->setAuthenticated(true); // $acs_user_info_rowを設定する // $acs_user_info_row = array(); if ($user_id) { $acs_user_info_row = ACSUser::get_user_info_row_by_user_id($user_id); // ユーザ情報が無い if ($user_id && !$acs_user_info_row['user_id']) { $acs_user_info_row['user_id'] = $user_id; $acs_user_info_row['user_community_id'] = ACS_PUBLIC_USER_COMMUNITY_ID; $acs_user_info_row['is_acs_user'] = false; } else { $acs_user_info_row['is_acs_user'] = true; // 権限登録 $user->addCredential('ACS_USER'); } // ログインユーザ(認証を通過したユーザ)かどうか $acs_user_info_row['is_login_user'] = true; // システム管理者かどうか if ($acs_user_info_row['administrator_flag'] == 't') { // 権限登録 $user->addCredential('SYSTEM_ADMIN_USER'); } // LDAPユーザかどうか (ファイル認証ユーザでなければLDAPユーザとみなす) $acs_user_info_row['is_ldap_user'] = !ACSSystem::is_htpasswd_user($user_id); // LDAP認証以外の場合、パスワード変更権限を付与 if ($acs_user_info_row['is_ldap_user']) { $user->addCredential('LDAP_USER'); } else { $user->addCredential('NOT_LDAP_USER'); } // 未登録のLDAPユーザの場合は氏名を調べる if (!$acs_user_info_row['is_acs_user'] && $acs_user_info_row['is_ldap_user']) { $ldap_user_info_row = ACSLDAP::get_ldap_user_info_row($acs_user_info_row['user_id']); $acs_user_info_row['user_name'] = $ldap_user_info_row['user_name']; } // フレンズIDの配列を取得する $acs_user_info_row['friends_id_array'] = ACSUser::get_friends_id_array($acs_user_info_row['user_community_id']); // 各機能ごとで必要な権限を判別・設定する // マイページ所有者、コミュニティ管理者、メンバの設定など if ($this->moduleName == 'User') { $id = $request->getParameter('id'); if (!$id) { $id = $acs_user_info_row['user_community_id']; } // マイページ所有者かどうか if ($acs_user_info_row['user_community_id'] == $request->getParameter('id')) { $user->addCredential('USER_PAGE_OWNER'); // 友人かどうか } elseif (!ACSUser::is_friends($id, $acs_user_info_row['user_community_id'])) { $user->addCredential('NOT_FRIENDS'); } } elseif ($this->moduleName == 'Community') { $community_id = $request->getParameter('community_id'); // コミュニティIDの指定がある場合のみ、権限設定を行う if ($community_id) { $is_community_member = ACSCommunity::is_community_member($acs_user_info_row['user_community_id'], $community_id); $is_community_admin = ACSCommunity::is_community_admin($acs_user_info_row['user_community_id'], $community_id); // コミュニティメンバかどうか if ($is_community_member) { $user->addCredential('COMMUNITY_MEMBER'); // コミュニティ管理者かどうか if ($is_community_admin) { $user->addCredential('COMMUNITY_ADMIN'); } // コミュニティメンバではない } else { $user->addCredential('NOT_COMMUNITY_MEMBER'); } } } $user->setAttribute('login_user_id', $user_id); } else { $acs_user_info_row['user_name'] = ACS_PUBLIC_USER_NAME; $acs_user_info_row['user_community_id'] = ACS_PUBLIC_USER_COMMUNITY_ID; $acs_user_info_row['is_acs_user'] = false; $acs_user_info_row['is_login_user'] = false; // 権限設定 $user->addCredential('PUBLIC_USER'); } $user->setAttribute('acs_user_info_row', $acs_user_info_row); // ログイン情報作成 if ($justLogin) { ACSUser::set_login_date($user); } // アクセス毎のログアウト時間更新 $getLogoutDateEverytime = $user->getAttribute('getLogoutDateEverytime'); if ($getLogoutDateEverytime != NULL && $getLogoutDateEverytime == "1") { ACSUser::acs_login_date($user); } if ($acs_user_info_row['is_acs_user'] && $acs_user_info_row['open_level_name'] == ACSMsg::get_mst('open_level_master', 'D01')) { // OK } elseif ($acs_user_info_row['is_acs_user'] && $acs_user_info_row['open_level_name'] == ACSMsg::get_mst('open_level_master', 'D03') || !$acs_user_info_row['is_acs_user'] && $acs_user_info_row['is_ldap_user']) { // マイページ全体が非公開のユーザ or 未登録のLDAPユーザ // マイページのプロフィール編集可能な権限を付与する $user->addCredential('USER_PAGE_OWNER'); if ($this->moduleName == DEFAULT_MODULE && ($this->actionName == 'EditProfile' || $this->actionName == 'SetOpenLevelForProfile')) { // 未登録のLDAPユーザの場合、プロフィール設定画面へのアクセスを許可 } else { $edit_profile_url = $this->getControllerPath(DEFAULT_MODULE, 'EditProfile'); header("Location: {$edit_profile_url}"); } } elseif (!$acs_user_info_row['is_acs_user'] && $acs_user_info_row['is_login_user'] && !$acs_user_info_row['is_ldap_user']) { echo "Forbidden"; exit; } // form で enctype="multipart/form-data" の指定が合った場合の対処 // エンコーディングを変換する if (count($_FILES) && !ini_get('mbstring.encoding_translation')) { $request->params = ACSLib::convert_post_data_encoding($request->params); } // 共通アクセス制御 // $access_control_info = $this->get_access_control_info($controller, $request, $user); $valid_flag = true; if ($access_control_info) { $valid_flag = false; if ($access_control_info['role_array'] && $access_control_info['contents_row_array']) { foreach ($access_control_info['contents_row_array'] as $contents_row) { if ($contents_row['community_type_name'] == ACSMsg::get_mst('community_type_master', 'D40')) { if (ACSAccessControl::is_valid_user_for_community($acs_user_info_row, $access_control_info['role_array'], $contents_row)) { $valid_flag = true; } else { $valid_flag = false; break; } } elseif ($contents_row['community_type_name'] == ACSMsg::get_mst('community_type_master', 'D10')) { if (ACSAccessControl::is_valid_user_for_user_community($acs_user_info_row, $access_control_info['role_array'], $contents_row)) { $valid_flag = true; } else { $valid_flag = false; break; } } } } } if (!$valid_flag) { $this->controller->forward(SECURE_MODULE, SECURE_ACTION); exit; } // 各機能固有の権限判別を取得 if ($this->get_execute_privilege($controller, $request, $user)) { $user->addCredential('EXECUTE'); } //return parent::initialize($controller); return true; }