/**
  *	
  * @param array $permissions with the member and the changed_pgs
  */
 function afterMemberPermissionChanged($permissions)
 {
     $member = array_var($permissions, 'member');
     //get all users in the set of permissions groups
     $permissionGroupIds = array();
     foreach (array_var($permissions, 'changed_pgs') as $pg_id) {
         $permissionGroupId = $pg_id;
         if (!in_array($permissionGroupId, $permissionGroupIds)) {
             $permissionGroupIds[] = $permissionGroupId;
         }
     }
     if (count($permissionGroupIds) > 0) {
         $usersIds = ContactPermissionGroups::getAllContactsIdsByPermissionGroupIds($permissionGroupIds);
         foreach ($usersIds as $us_id) {
             $user = Contacts::findById($us_id);
             ContactMemberCaches::updateContactMemberCache($user, $member->getId());
         }
     } else {
         //update this member for all user in cache
         $contacts = Contacts::getAllUsers();
         foreach ($contacts as $contact) {
             ContactMemberCaches::updateContactMemberCache($contact, $member->getId());
         }
     }
 }
Пример #2
0
/**
 * Contact member cache
 *
 */
function core_dimensions_update_7_8()
{
    //UPDATE depth for all members
    //update root members
    DB::execute("UPDATE " . TABLE_PREFIX . "members SET depth = 1  WHERE parent_member_id = 0;");
    //clean root members
    DB::execute("UPDATE " . TABLE_PREFIX . "members SET depth = 2  WHERE parent_member_id != 0 AND depth = 1;");
    $members_depth = DB::executeAll("SELECT id FROM " . TABLE_PREFIX . "members WHERE parent_member_id =0 ORDER BY id");
    $members_depth = array_flat($members_depth);
    $members_depth = implode(",", $members_depth);
    $depth = 2;
    $max_depth = DB::executeOne("SELECT  MAX(depth) AS depth FROM `" . TABLE_PREFIX . "members`");
    //update all depths
    for ($i = $depth; $i <= $max_depth['depth']; $i++) {
        //update members depth
        DB::execute("UPDATE " . TABLE_PREFIX . "members SET depth = " . $depth . " WHERE parent_member_id  IN (" . $members_depth . ");");
        //Get member from next depth
        $members_depth = DB::executeAll("SELECT id FROM " . TABLE_PREFIX . "members WHERE depth= " . $depth . " ORDER BY id");
        $members_depth = array_flat($members_depth);
        $members_depth = implode(",", $members_depth);
        $depth++;
    }
    //END UPDATE depth for all members
    //Load the contact member cache
    set_time_limit(0);
    ini_set('memory_limit', '512M');
    $users = Contacts::getAllUsers();
    $dimensions = Dimensions::findAll();
    $dimensions_ids = array();
    foreach ($dimensions as $dimension) {
        if ($dimension->getDefinesPermissions()) {
            $dimensions_ids[] = $dimension->getId();
        }
    }
    $dimensions_ids = implode(",", $dimensions_ids);
    $root_members = DB::executeAll("SELECT * FROM " . TABLE_PREFIX . "members WHERE dimension_id IN (" . $dimensions_ids . ") AND parent_member_id=0 ORDER BY id");
    foreach ($users as $user) {
        try {
            DB::beginWork();
            foreach ($root_members as $member) {
                ContactMemberCaches::updateContactMemberCache($user, $member['id'], $member['parent_member_id']);
            }
            DB::commit();
        } catch (Exception $e) {
            DB::rollback();
            throw $e;
        }
    }
    //END Load the contact member cache
}
    $depth++;
}
//END UPDATE depth for all members
echo "\nStart Truncate  contact_member_cache\n-----------------------------------------------------------------";
DB::execute("TRUNCATE TABLE " . TABLE_PREFIX . "contact_member_cache;");
echo "\nEnd Truncate  contact_member_cache\n-----------------------------------------------------------------";
$users = Contacts::getAllUsers();
$dimensions = Dimensions::findAll();
$dimensions_ids = array();
foreach ($dimensions as $dimension) {
    if ($dimension->getDefinesPermissions()) {
        $dimensions_ids[] = $dimension->getId();
    }
}
$dimensions_ids = implode(",", $dimensions_ids);
$root_members = DB::executeAll("SELECT * FROM " . TABLE_PREFIX . "members WHERE dimension_id IN (" . $dimensions_ids . ") AND parent_member_id=0 ORDER BY id");
foreach ($users as $user) {
    echo "\n" . $user->getName();
    try {
        DB::beginWork();
        foreach ($root_members as $member) {
            ContactMemberCaches::updateContactMemberCache($user, $member['id'], $member['parent_member_id']);
        }
        DB::commit();
    } catch (Exception $e) {
        DB::rollback();
        echo $e->__toString();
    }
}
//END Load the contact member cache
echo "\nEnd rebuild  contact_member_cache\n-----------------------------------------------------------------";