グループを操作する(メンバープラグイン)

ここでは、メンバーインスタンスにおけるグループを、SDKから操作する方法について解説します。

グループオブジェクトECHOMembersGroupObject

ECHOMembersGroupObjectは、グループを操作するためのオブジェクトです。

オブジェクトを生成する

新しいグループとしてオブジェクトを初期化するには、初期化メソッドの第一引数にメンバーインスタンスのIDを指定します。

ECHOMembersGroupObject *group = [[ECHOMembersGroupObject alloc] initWithInstanceId:@"メンバーインスタンスID"];

既存グループとしてオブジェクトを初期化するには、初期化メソッドの第二引数にグループIDを指定します。

ECHOMembersGroupObject *group = [[ECHOMembersGroupObject alloc] initWithInstanceId:@"メンバーインスタンスID" refid:@"グループID"];

オブジェクトフィールド

グループオブジェクトは、以下のフィールドを持ちます。

フィールド名説明可変
refid NSString グループID ×
name NSString グループ名

フィールドからデータを取得する

オブジェクトのフィールドからデータを取得する場合は、objectForKey:メソッドを使用します。

String *name = [group objectForKey:@"name"];

フィールドにデータをセットする

オブジェクトのフィールドにデータをセットするには、setObject:forKey:メソッドを使用します。

[group setObject:@"新しいカテゴリ" forKey:@"name"];

グループを保存する

リモートサーバーへグループを保存するには、push:メソッド(同期通信による保存)もしくはpushInBackgroundWithBlock:メソッド(非同期通信による保存)を使用します。

ECHOMembersGroupObject *group = [[ECHOMembersGroupObject alloc] initWithInstanceId:@"メンバーインスタンスID"];

[group setObject:@"新しいグループ" forKey:@"name"]; // グループ名をセット
....

// 非同期でグループを保存
[group pushInBackgroundWithBlock:^(NSError *e) {
            if(e == null) { // 正常終了
                  NSLog(@"Complete: %@", group);
            }else{ // 異常発生
                  NSLog(@"Error: %@", e);
            }
}];

グループを取得する

リモートサーバー上に存在するグループを取得するには、fetch:メソッド(同期通信による取得)もしくはfetchInBackgroundWithBlock:メソッド(非同期通信による取得)を使用します。

ECHOMembersGroupObject *group = [[ECHOMembersGroupObject alloc] initWithInstanceId:@"メンバーインスタンスID" refid:@"グループID"];

// 非同期でグループを取得
[group fetchInBackgroundWithBlock:^(NSError *e) {
            if(e == null) { // 正常終了
                  NSLog(@"Complete: %@", group);
            }else{ // 異常発生
                  NSLog(@"Error: %@", e);
            }
}];

グループを削除する

リモートサーバー上に存在するグループを削除するには、delete:メソッド(同期通信による削除)もしくはdeleteInBackgroundWithBlock:メソッド(非同期通信による削除)を使用します。

ECHOMembersGroupObject *group = [[ECHOMembersGroupObject alloc] initWithInstanceId:@"メンバーインスタンスID" refid:@"グループID"];

// 非同期でグループを削除

[group deleteInBackgroundWithBlock:^(NSError *e) {
            if(e == null) { // 正常終了
                  NSLog(@"Complete");
            }else{ // 異常発生
                  NSLog(@"Error: %@", e);
            }
}];

現在のACLを取得する

オブジェクトに現在設定されているACLを取得するには、currentACLプロパティを使用します。

ECHOACLObject *current_acl = group.currentACL;

ACLを変更する

オブジェクトに新しいACLを設定するには、setNewACL:メソッドを使用します。

ECHOACLObject *new_acl = [[ECHOACLObject alloc] init]; // ACLオブジェクトを生成
[new_acl putEntryForAll: [[ECHOACLEntry alloc] initWithGet:NO list:NO edit:NO delete:NO] ]; // 例:非ログイン訪問者の操作権限を全て奪う

[group setNewACL:new_acl]; // 新しいACLをセット

[group push:nil]; // セットしたACLを反映させるには、最後に必ず保存を実行してください

グループマップECHOMembersGroupsMap

ECHOMembersGroupsMapは、ツリー構造を持つグループマップを再帰的に表現します。

オブジェクトを生成する

ルートから最下層までを含んだ全グループマップとしてオブジェクトを初期化するには、初期化メソッドの第一引数にブログインスタンスまたはデータベースインスタンスのIDを指定します。

ECHOMembersGroupsMap *groups_map = [[ECHOMembersGroupsMap alloc] initWithInstanceId:@"メンバーインスタンスID"]; // 全グループマップオブジェクトを生成

特定のグループをルートにしたサブグループマップとしてオブジェクトを初期化するには、初期化メソッドの第二引数にルートとなるグループIDを指定します。

ECHOMembersGroupsMap *groups_map = [[ECHOMembersGroupsMap alloc] initWithInstanceId:@"メンバーインスタンスID" refid:@"グループID"]; // サブグループマップオブジェクトを生成

ルートグループを取得する

グループマップからルートグループを取得するには、nodeプロパティを使用します。

子サブグループマップを取得する

ルートグループの下層に属するサブグループマップ群を取得するには、childrenプロパティを使用します。

グループマップを取得する

リモートサーバーからグループマップを取得するには、fetch:メソッド(同期通信による取得)もしくはfetchInBackgroundWithBlock:メソッド(非同期通信による取得)を使用します。

// 非同期でグループマップを取得
[groups_map fetchInBackgroundWithBlock:^(NSError *e) {
            if(e == null) { // 正常終了
                  NSLog(@"Complete: %@", groups_map);
            }else{ // 異常発生
                  NSLog(@"Error: %@", e);
            }
}];

グループの所属階層を変更する

グループの所属階層を変更するには、グループオブジェクトのsetNewParent:メソッドを使用します。

ECHOMembersGroupObject *newParent = [[ECHOMembersGroupObject alloc] initWithInstanceId:@"メンバーインスタンスID" refid:@"新しい親グループID"];

[group setNewParent:newParent]; // 新しい親グループをセット

[group push:nil]; // 反映させるには、最後に必ず保存を実行してください