function execute() { $context = $this->getContext(); $controller = $context->getController(); $request = $context->getRequest(); $user = $context->getUser(); $acs_user_info_row = $user->getAttribute('acs_user_info_row'); // 対象となるユーザコミュニティIDを取得 $target_user_community_id = $request->getParameter('id'); // 対象となるフォルダIDを取得 $target_user_community_folder_id = $request->getParameter('folder_id'); // 処理の種類 $action_type = $request->getParameter('action_type'); // get $form = $request->ACSGetParameters(); // Validatorで出来ないエラーチェックを行う // if (mb_strlen($form['folder_name']) > 100) { $this->setError($controller, $request, $user, 'folder_name', ACSMsg::get_msg('User', 'EditFolderAction.class.php', 'M001')); return $this->handleError(&$controller, &$request, &$user); } // 表示するページの所有者情報取得 $target_user_info_row = ACSUser::get_user_info_row_by_user_community_id($target_user_community_id); // フォルダ情報取得 $user_folder_obj = new ACSUserFolder($target_user_community_id, $acs_user_info_row, $target_user_community_folder_id); // set $request->setAttribute('target_user_info_row', $target_user_info_row); $request->setAttribute('user_folder_obj', $user_folder_obj); /* ----------------- */ /* 入力画面表示処理 */ /* ----------------- */ // action_type (create or update) が存在し、エラーで遷移してきていない場合 if (!$action_type || $this->hasErrors($controller, $request, $user)) { return $this->getDefaultView(); } // 選択された公開範囲の判別のためのデータ取得 $open_level_master_row_array = ACSAccessControl::get_all_open_level_master_row_array(); /* ---------- */ /* 入力値取得 */ /* ---------- */ $edit_folder_id = $request->getParameter('edit_folder_id'); $input_folder_row = array(); $input_folder_row['folder_name'] = $request->getParameter('folder_name'); $input_folder_row['comment'] = $request->getParameter('comment'); $input_folder_row['open_level_code'] = $request->getParameter('open_level_code'); $open_level_row = $open_level_master_row_array[$input_folder_row['open_level_code']]; $open_level_name = $open_level_row['open_level_name']; if ($open_level_name == ACSMsg::get_mst('open_level_master', 'D05')) { if ($request->getParameter('trusted_community_flag') == '0') { // 全ての友人をセット $friends_community_id = ACSUser::get_friends_community_id($target_user_community_id); $input_folder_row['trusted_community_id_array'] = array($friends_community_id); } else { // マイフレンズグループの場合は、指定されているマイフレンズグループIDをセット $input_folder_row['trusted_community_id_array'] = $request->getParameter('trusted_community'); } } /* ---------------------- */ /* フォルダ名重複チェック */ /* ---------------------- */ // 対象となるフォルダ配下のフォルダを取得 $sub_folder_obj_array = $user_folder_obj->folder_obj->get_folder_obj_array(); foreach ($sub_folder_obj_array as $sub_folder_obj) { if ($sub_folder_obj->get_folder_id() == $edit_folder_id) { // 更新対象のフォルダはチェック対象としない continue; } if ($sub_folder_obj->get_folder_name() == $input_folder_row['folder_name']) { // エラーメッセージをセットし、処理を中断する return $this->setError($controller, $request, $user, 'folder_name', ACSMsg::get_msg('User', 'EditFolderAction.class.php', 'M003') . '[' . $input_folder_row['folder_name'] . ']'); } } ACSDB::_do_query("BEGIN"); /* -------- */ /* 登録処理 */ /* -------- */ if ($action_type == 'create') { $ret = $user_folder_obj->folder_obj->create_folder($input_folder_row); if (!$ret) { ACSDB::_do_query("ROLLBACK;"); print "ERROR: フォルダを作成できませんでした。"; exit; } } elseif ($action_type == 'update') { /* -------- */ /* 更新処理 */ /* -------- */ // 更新対象のフォルダ情報取得 $update_user_folder_obj = new ACSUserFolder($request->getParameter('id'), $acs_user_info_row, $edit_folder_id); $ret = $update_user_folder_obj->folder_obj->update_folder($input_folder_row); if (!$ret) { ACSDB::_do_query("ROLLBACK;"); print "ERROR: フォルダ情報を変更できませんでした。"; exit; } } ACSDB::_do_query("COMMIT;"); /* -------------------- */ /* フォルダ一覧画面表示 */ /* -------------------- */ $acs_user_info_row = $user->getAttribute('acs_user_info_row'); $folder_action = $this->getControllerPath('User', 'Folder'); $folder_action .= '&id=' . $target_user_info_row['user_community_id']; $folder_action .= '&folder_id=' . $target_user_community_folder_id; header("Location: {$folder_action}"); }
/** * role_arrayに応じてobj_row_arrayを取得する (コミュニティ) * * @param $acs_user_info_row アクセス者のユーザ情報 * @param $role_array アクセス者のrole_array * @param $obj_row_array アクセス対象となるデータ (オブジェクトの配列) * @return アクセス可能なデータ(オブジェクトの配列) */ static function get_valid_obj_row_array_for_community($acs_user_info_row, $role_array, $obj_array) { $new_obj_array = array(); /* 公開範囲マスタ取得 */ $open_level_master_row_array = ACSAccessControl::get_all_open_level_master_row_array(); foreach ($obj_array as $obj) { $open_level_code = $obj->get_open_level_code(); // obj -> row に変換 $row['community_id'] = $obj->get_community_id(); $row['open_level_code'] = $open_level_code; $row['open_for_public'] = $open_level_master_row_array[$open_level_code]['open_for_public']; $row['open_for_user'] = $open_level_master_row_array[$open_level_code]['open_for_user']; $row['open_for_member'] = $open_level_master_row_array[$open_level_code]['open_for_member']; $row['open_for_administrator'] = $open_level_master_row_array[$open_level_code]['open_for_administrator']; $row['open_for_system_administrator'] = $open_level_master_row_array[$open_level_code]['open_for_system_administrator']; $row['trusted_community_row_array'] = $obj->get_trusted_community_row_array(); if (ACSAccessControl::is_valid_user_for_community($acs_user_info_row, $role_array, $row)) { array_push($new_obj_array, $obj); } } return $new_obj_array; }