車輪の再発明記録

車輪の再発明記録

無駄なことを再発明するブログです。

Amebaでブログを始めよう!
update_access_collection(collection_id, members)メソッド

説明
アクセスコレクションの更新は、メンバーシップ。
共通変数
CONFIG

1 collection_idをintに変換
2 members変数がnullの場合
2.1 members変数を配列で初期化
3 collections = get_write_access_array()を代入
指定したユーザーが使用してオブジェクトを保存するために許可されているアクセス許可の配列を返します。
4 collections内にcollection_idのkeyが存在する場合
4.1 cur_members = get_members_of_access_collection(collection_id, true)
友人のコレクションのすべてのメンバーを取得する
4.2 cur_membersがnullであった場合
4.2.1 cur_members変数を配列で初期化
4.3 remove_members = array_diff(cur_members, members)を代入
cur_membersにありmembersにないものを抽出する
4.4 add_members = array_diff(members, cur_members) を代入
membersにありcur_membersにないものを抽出する
4.5 params = array(
'collection_id' => collection_id,
'members' => members,
'add_members' => add_members,
'remove_members' => remove_members)を代入する
4.6 add_membersをforeachで回す(guid)
4.6.1 add_user_to_access_collection(guid, collection_id)
指定したユーザーのコレクションにユーザーを追加します
4.7 remove_membersをforeachで回す(guid)
4.7.1 remove_user_from_access_collection(guid, collection_id)
アクセスコレクションからユーザーを削除します。
4.8 trueを返す
5 falseを返す
create_access_collection(name, owner_guid = 0, site_guid = 0)メソッド

説明
指定されたユーザーが所有している新しいアクセス制御コレクションを作成します。
共通変数
CONFIG

1 name = trim($name)
前後についている空文字を除去する
2 nameに値がない場合
2.1 falseを返す
3 owner_guidが0であった場合
3.1 owner_guid = get_loggedin_userid()
ログインしているユーザーのidを返す
4 site_guidが0でかつ、CONFIG.site_guidがnullでない場合
4.1 site_guid = CONFIG.site_guidを代入
5 name = sanitise_string(name)
name変数をエスケープする
6 "INSERT INTO " + CONFIG.dbprefix + "access_collections" +
"SET name = '" + name + "', " +
"owner_guid = " + owner_guid + "," +
"site_guid = " + site_guid
上記SQL文をq変数に代入する
7 insert_data(q)を実行できなかった場合
7.1 falseを返す
8 params = array('collection_id' => id)を代入する
※C#で作成する場合Dictionaryクラスを使用する
9 trigger_plugin_hook('access:collections:addcollection', 'collection', params, true)が実行できなかった場合
9.1 falseを返す
10 idを返す
get_write_access_array(user_id = 0, site_id = 0, flush = false)メソッド

説明
指定したユーザーが使用してオブジェクトを保存するために許可されているアクセス許可の配列を返します。
共通変数
CONFIG
静的変数
access_array

1 user_idが0であった場合
1.1 user_id = get_loggedin_userid()
ログインユーザーのuseridを返します。
2 site_idが0でかつ、CONFIG.site_idがnullでない場合
2.1 site_id = CONFIG.site_idを代入
3 user_idをintに変換
4 site_idをintに変換
5 access_array[user_id]がnullまたは、flushがtrueであった場合
5.1 "SELECT ag.* FROM " + CONFIG.dbprefix + "access_collections ag " +
" WHERE (ag.site_guid = " + site_id + " OR ag.site_guid = 0)" +
" AND (ag.owner_guid = " + user_id + ")" +
" AND ag.id >= 3"
上記SQLをquery変数に代入する
5.2 get_data(query)に値が存在する場合(collections変数に代入する)
データベースからデータを取得する
5.2.1 取得したデータをforeachで回す(collectionに代入)
5.2.1.1 tmp_access_array[collection.id] = collection.nameを代入する
5.3 access_array[user_id] = tmp_access_arrayに代入
6 access_array[user_id]がnullまたは、flushがtrueでなかった場合
6.1 tmp_access_array = access_array[user_id]を代入
7 tmp_access_array =
trigger_plugin_hook('access:collections:write', 'user',array('user_id' => user_id, 'site_id' => site_id), tmp_access_array)
配列など、さまざまなパラメータを使用して、プラグインフックをトリガーします。
8 tmp_access_arrayを返す
has_access_to_entity(entity, user = null)メソッド

説明
特定のユーザーが特定のエンティティへのアクセス権を持っているかどうかを判断
共通変数
CONFIG

1 user変数がnullであった場合
1.1 access_bit = get_access_sql_suffix("e")を代入
指定されたクエリへのアクセス制限のSQLコードを追加します。
2 user変数がnullでなかった場合
2.1 access_bit = get_access_sql_suffix("e", user.getGUID())を代入
指定されたクエリへのアクセス制限のSQLコードを追加します。
3 "SELECT guid from " + CONFIG.dbprefix + "entities e WHERE e.guid = " + entity.getGUID() +
" AND " + access_bit
上記SQLをquery変数に代入する
4 get_data(query)にデータが存在する場合
データベースからデータを取得する
4.1 trueを返す
5 get_data(query)にデータが存在しない場合
5.1 falseを返す

get_access_sql_suffix(table_prefix = '', owner = null)メソッド

説明
指定されたクエリへのアクセス制限のSQLコードを追加します。
このコードは、特権モードで実行された場合は、空白を返すことに注意してください。
共通変数
ENTITY_SHOW_HIDDEN_OVERRIDE , CONFIG

1 sql変数をブランクで初期化
2 friends_bit変数をブランクで初期化
3 enemies_bit変数をブランクで初期化
4 table_prefixに値がある場合
4.1 table_prefixにsanitise_string(table_prefix) + “.”を代入
5 ownerがnullであった場合
5.1 owner = get_loggedin_userid()を代入
6 ownerに値がない場合(言い方が微妙だがそんなイメージ)
6.1 ownerに-1を代入
7 ignore_access = elgg_check_access_overrides(owner)を代入
アクセスシステムは無視されているかどうかを決定します。
8 access = get_access_list(owner)を代入
9 ignore_accessがtrueであった場合
9.1 sql = “ (1 = 1) “を代入
10 ownerが-1でなかった場合
10.1 table_prefix + “access_id = " + ACCESS_FRIENDS +
"AND “ + table_prefix + "owner_guid IN (" +
"SELECT guid_one FROM " + CONFIG->dbprefix + “entity_relationships"
"WHERE relationship = 'friend' AND guid_two = " + owner + ")"
上記SQL文をfriends_bitに代入
10.2 friends_bitに'(' + friends_bit + ') OR 'を代入
10.3 CONFIG->user_block_and_filter_enabledがnullでなく値が存在する場合(微妙)
10.3.1 enemies_bit = get_annotation_sql('elgg_block_list', able_prefix + "owner_guid", owner, false)を代入
注釈の制限を追加
10.3.2 enemies_bit = 下記文字列を代入
'(' + enemies_bit + ' AND ' + get_annotation_sql('elgg_filter_list', owner, table_prefix + "owner_guid", false) + ") "
11 sqlに値がない場合
11.1 friends_bit + " (" + table_prefix + "access_id IN " + access +
"OR (" + table_prefix + "owner_guid = " + owner + ")" +
"OR (" + table_prefix + "access_id = " + ACCESS_PRIVATE
"AND " + table_prefix + "owner_guid = " + owner + "))"
上記SQL文をsqlに代入
12 enemies_bitに値がない場合
12.1 sql = enemies_bit + " AND (" + sql + ")"を代入
13 ENTITY_SHOW_HIDDEN_OVERRIDEに値がない場合(falseかもしれない
13.1 sql = sql + " and " + table_prefix + "enabled='yes'"を代入
14 '(' + $sql + ')'を返す