/**
Extension Name: Wordbooker Cron
Extension URI: http://blogs.canalplan.org.uk/steve
Version: 2.1
Description: Collection of processes that are often handled by wp_cron scheduled jobs
Author: Steve Atty
*/
function wordbooker_cache_refresh($user_id)
{
    global $blog_id, $wpdb, $table_prefix, $wordbooker_user_settings_id, $wbooker_user_id;
    $wbooker_user_id = $user_id;
    $result = $wpdb->query(' DELETE FROM ' . WORDBOOKER_ERRORLOGS . ' WHERE   blog_id =' . $blog_id . ' and (user_ID=' . $user_id . ' or user_ID=0 ) and post_id<=1');
    wordbooker_debugger("Cache Refresh Commence ", $user_id, -1, 9);
    $result = $wpdb->get_row("select facebook_id from " . WORDBOOKER_USERDATA . " where user_ID=" . $user_id);
    $uid = $result->facebook_id;
    $wbuser2 = wordbooker_get_userdata($user_id);
    $wordbooker_settings = get_option('wordbooker_settings');
    wordbooker_debugger("Cache Refresh for ", $wbuser2->name, -1, 9);
    wordbooker_debugger("UID length : ", strlen($uid), -1, 9);
    # If we've not got the ID from the table lets try to get it from the logged in user
    if (strlen($uid) == 0) {
        wordbooker_debugger("No Cache record for user - getting Logged in user ", $uid, -1, 9);
        try {
            $x = wordbooker_get_fb_id(null, $wbuser2->access_token);
            $uid = $x->id;
        } catch (Exception $e) {
            $error_code = $e->getCode();
            $error_msg = $e->getMessage();
            wordbooker_debugger($error_msg, " ", -1, 9);
            #unset($uid);
        }
    }
    # If we now have a uid lets go and do a few things.
    if (strlen($uid) > 0) {
        wordbooker_debugger("Cache processing for user : "******" (" . $uid . ")", -1, 9);
        wordbooker_debugger("Getting Permisions for : ", $uid, -1, 9);
        $ret = wordbooker_fb_pemissions($wbuser2->facebook_id, $wbuser2->access_token);
        # If we have an  $ret->error->message then we have a problem
        if ($ret->error->message) {
            wordbooker_append_to_errorlogs("Your Facebook Session is invalid", "99", $ret->error->message, '', $user_id);
            wordbooker_delete_user($user_id, 1);
            return;
        }
        if (strlen(serialize($ret)) < 20) {
            wordbooker_debugger("Permissions fetch failed - skipping ", '', -1, 9);
        } else {
            $add_auths = 0;
            $permlist = array(WORDBOOKER_FB_PUBLISH_STREAM, WORDBOOKER_FB_STATUS_UPDATE, WORDBOOKER_FB_READ_STREAM, WORDBOOKER_FB_CREATE_NOTE, WORDBOOKER_FB_PHOTO_UPLOAD, WORDBOOKER_FB_VIDEO_UPLOAD, WORDBOOKER_FB_MANAGE_PAGES, WORDBOOKER_FB_READ_FRIENDS);
            $key = 0;
            foreach ($permlist as $perm) {
                try {
                    $permy = $ret->data[0]->{$perm};
                    $error_code = null;
                    if ($permy != 1) {
                        wordbooker_debugger("User is missing permssion : ", $perm, -1, 9);
                        $add_auths = $add_auths | pow(2, $key);
                    } else {
                        wordbooker_debugger("User has permssion : ", $perm, -1, 9);
                    }
                    $error_msg = null;
                } catch (Exception $e) {
                    $error_msg = $e->getMessage();
                    wordbooker_debugger("Permissions may be corrupted  ", $error_message, -1, 9);
                    $users = null;
                    $add_auths = 1;
                }
                $key = $key + 1;
            }
            wordbooker_debugger("Additional Permissions needed : ", $add_auths, -1, 9);
            $sql = "update " . WORDBOOKER_USERDATA . " set auths_needed=" . $add_auths . " where user_ID=" . $user_id;
            $result = $wpdb->get_results($sql);
        }
        # Lets get the person/page this user wants to get the status for. We get this from the user_meta
        $wordbooker_user_settings_id = "wordbookuser" . $blog_id;
        $wordbookuser_setting = get_usermeta($user_id, $wordbooker_user_settings_id);
        $suid = "PW:" . $uid;
        if (isset($wordbookuser_setting['wordbooker_status_id']) && $wordbookuser_setting['wordbooker_status_id'] != -100) {
            $suid = $wordbookuser_setting['wordbooker_status_id'];
        }
        $x = explode(":", $suid);
        $suid = $x[1];
        wordbooker_debugger("Getting Pages administered by : ", $uid, -1, 9);
        try {
            $query = "SELECT name, page_url, page_id FROM page WHERE page_id IN (SELECT page_id FROM page_admin WHERE uid= {$uid} )";
            $fb_page_info = wordbooker_fql_query($query, $wbuser2->access_token);
        } catch (Exception $e) {
            $error_msg = $e->getMessage();
            wordbooker_debugger("Failed to get page info : ", $error_msg, -1, 9);
        }
        try {
            $ret_code = wordbooker_me($wbuser2->access_token);
        } catch (Exception $e) {
            $error_msg = $e->getMessage();
            wordbooker_debugger("Failed to get page tokens : " . $error_msg, " ", -1, 9);
        }
        if (isset($ret_code->data)) {
            foreach ($ret_code->data as $page_access) {
                $page_token[$page_access->id] = $page_access->access_token;
            }
            $all_pages = array();
            if (is_array($fb_page_info)) {
                $encoded_names = str_replace('\\', '\\\\', serialize($fb_page_info));
                foreach ($fb_page_info as $pageinfo) {
                    $pages["id"] = "FW:" . trim($pageinfo->page_id, ',');
                    if (strlen($pageinfo->name) > 1) {
                        $page_desc = "";
                        if (strpos($pageinfo->page_url, "application.php")) {
                            $page_desc = __(" (Application)", 'wordbooker');
                        }
                        if (function_exists('mb_convert_encoding')) {
                            $pages["name"] = mb_convert_encoding($pageinfo->name . $page_desc, 'UTF-8');
                        } else {
                            $pages["name"] = $pageinfo->name . $page_desc;
                        }
                        $pages['url'] = $pageinfo->page_url;
                        $pages["access_token"] = $page_token[$pageinfo->page_id];
                        $all_pages[] = $pages;
                        wordbooker_debugger("Page info for page ID " . $pageinfo->page_id, $pageinfo->name . $page_desc, -1, 9);
                    }
                }
            } else {
                wordbooker_debugger("Failed to get page information from FB", " ", -1, 9);
            }
        }
        $fb_group_list = array();
        $all_groups = array();
        wordbooker_debugger("Getting Groups owned or managed by : ", $uid, -1, 9);
        try {
            $query = "Select positions, gid from group_member where uid={$uid}";
            $fb_groups = wordbooker_fql_query($query, $wbuser2->access_token);
            if (is_array($fb_groups)) {
                foreach ($fb_groups as $fb_group) {
                    # Check to see if there are any positions. If not then the user is only a member of the group and thus we dont want it in the list.
                    if (count($fb_group->positions) > 0) {
                        wordbooker_debugger("Getting details for group : ", $fb_group->gid, -1, 9);
                        $query = "Select name,gid from group where gid =" . $fb_group->gid;
                        $fb_group_info = wordbooker_fql_query($query, $wbuser2->access_token);
                        $fb_group_list[] = (array) $fb_group_info;
                    }
                }
            }
        } catch (Exception $e) {
            $error_msg = $e->getMessage();
            wordbooker_debugger("Failed to get group info : ", $error_msg, -1, 9);
        }
        if (is_array($fb_group_list)) {
            $encoded_names = str_replace('\\', '\\\\', serialize($fb_group_list));
            foreach ($fb_group_list as $groupinfo) {
                $groupinfo = (array) $groupinfo;
                if (strlen($groupinfo[0]->gid) > 1) {
                    $groups["page_id"] = trim($groupinfo[0]->gid, ',');
                    $groups["id"] = "GW:" . trim($groupinfo[0]->gid, ',');
                    if (function_exists('mb_convert_encoding')) {
                        $groups["name"] = mb_convert_encoding($groupinfo[0]->name, 'UTF-8');
                    } else {
                        $groups["name"] = $groupinfo[0]->name;
                    }
                    $groups["access_token"] = "dummy access token";
                    $all_groups[] = $groups;
                    wordbooker_debugger("Group info for group ID " . $groupinfo[0]->gid, $groupinfo[0]->name, -1, 9);
                }
            }
        } else {
            wordbooker_debugger("Failed to get group information from FB", " ", -1, 9);
        }
        $all_pages_groups = @array_merge($all_pages, $all_groups);
        $encoded_names = str_replace('\\', '\\\\', serialize($all_pages_groups));
        /*
        
        		try {
        			$query="SELECT flid, owner, name FROM friendlist WHERE owner=$uid";
        			$fb_friend_lists= wordbooker_fql_query($query,$wbuser2->access_token);
        		if (is_array($fb_friend_lists)) {
        		$sql="Delete from ".WORDBOOKER_FB_FRIEND_LISTS." where user_id=".$user_id;
        		$result = $wpdb->get_results($sql);
        		foreach ($fb_friend_lists as $friend_list) {
        			if (function_exists('mb_convert_encoding')) {
        				$friend_list->name=mb_convert_encoding($friend_list->name,'UTF-8');
        			}
        		$sql="replace into ".WORDBOOKER_FB_FRIEND_LISTS." (user_id, flid,  owner, name) values (".$user_id.",'".$friend_list->flid."','".$friend_list->owner."','".$friend_list->name."')";
        		$result = $wpdb->get_results($sql);
        		}
        		}	
        
        		}
        		catch (Exception $e) 
        		{
        			$error_msg = $e->getMessage();
        			wordbooker_debugger("Failed to get friend lists : ",$error_msg,-1,9);
        		}
        
         
        		try {
        			$query="Select name,uid from user where uid in (Select uid from friendlist_member where flid='10150839623220195')";
        			$fb_friends_info = wordbooker_fql_query($query,$wbuser2->access_token);
        		} 
        		catch (Exception $e) 
        		{
        			$error_msg = $e->getMessage();
        			wordbooker_debugger("Failed to get friends : ",$error_msg,-1,9);
        		}
        			if (is_array($fb_friends_info) ) {
        			$sql="delete from ".WORDBOOKER_FB_FRIENDS." where user_id=".$user_id;
        			$result = $wpdb->get_results($sql);
        			foreach ($fb_friends_info as $friend_info) {
        				if (function_exists('mb_convert_encoding')) {
        					$friend_info->name=mb_convert_encoding($friend_info->name,'UTF-8');
        				}
        			$sql="insert into ".WORDBOOKER_FB_FRIENDS." (user_id, facebook_id, name, blog_id) values (".$user_id.",'".$friend_info->uid."','".$friend_info->name."',".$blog_id.")";
        			$result = $wpdb->get_results($sql);
        			}
        		}
        */
        $fb_status_info = wordbooker_status_feed($suid, $wbuser2->access_token);
        foreach ($fb_status_info->data as $fbstat) {
            if (!is_null($fbstat->message)) {
                if ($suid == $fbstat->from->id) {
                    $status_message = $fbstat->message;
                    $status_time = $fbstat->created_time;
                    break;
                }
            }
        }
        $picture = 'https://graph.facebook.com/' . $suid . '/picture?type=normal';
        $fb_profile_info = wordbooker_get_fb_id($suid, $wbuser2->access_token);
        wordbooker_debugger("Setting Status Name as  : ", mysql_real_escape_string($fb_profile_info->name), -1, 9);
        $sql = "insert into " . WORDBOOKER_USERSTATUS . " set name='" . mysql_real_escape_string($fb_profile_info->name) . "'";
        if (isset($status_time)) {
            if (stristr($status_message, "[[PV]]")) {
                wordbooker_debugger("Found [[PV]] - not updating status", " ", -1, 9);
            } else {
                wordbooker_debugger("Setting status as  : ", mysql_real_escape_string($status_message), -1, 9);
                $sql .= ", status='" . mysql_real_escape_string($status_message) . "'";
                $sql .= ", updated=" . mysql_real_escape_string(strtotime($status_time));
            }
        } else {
            wordbooker_debugger("Failed to get Status information from FB", " ", -1, 9);
        }
        wordbooker_debugger("Setting Status URL as  : ", mysql_real_escape_string($fb_profile_info->link), -1, 9);
        $sql .= ", url='" . mysql_real_escape_string($fb_profile_info->link) . "'";
        $sql .= ", pic='" . mysql_real_escape_string($picture) . "'";
        $sql .= ", facebook_id='" . $uid . "'";
        $sql .= ",user_ID=" . $user_id;
        $sql .= ",blog_id=" . $blog_id;
        $sql .= " on duplicate key update name='" . mysql_real_escape_string($fb_profile_info->name) . "'";
        if (isset($status_message)) {
            if (stristr($status_message, "[[PV]]")) {
            } else {
                $sql .= ", status='" . mysql_real_escape_string($status_message) . "'";
                $sql .= ", updated=" . mysql_real_escape_string(strtotime($status_time));
            }
        }
        if (isset($fb_profile_info->link)) {
            $sql .= ", url='" . mysql_real_escape_string($fb_profile_info->link) . "'";
            $sql .= ", pic='" . mysql_real_escape_string($picture) . "'";
        }
        $result = $wpdb->get_results($sql);
        $real_user = wordbooker_get_fb_id($uid, $wbuser2->access_token);
        wordbooker_debugger("Setting user name as  : ", mysql_real_escape_string($real_user->name), -1, 9);
        $sql = "update " . WORDBOOKER_USERDATA . " set name='" . mysql_real_escape_string($real_user->name) . "'";
        $sql .= ", facebook_id='" . $uid . "'";
        $sql .= ", pages= '" . mysql_real_escape_string($encoded_names) . "'";
        $sql .= ", use_facebook=1";
        $sql .= "  where user_ID=" . $user_id . " and blog_id=" . $blog_id;
        $result = $wpdb->get_results($sql);
    }
    #fclose($fp);
    wordbooker_debugger("Cache Refresh Complete for user", $uid, -1, 9);
}
Example #2
0
function get_check_session()
{
    global $facebook2, $user_ID;
    # This function basically checks for a stored session and if we have one it returns it, If we have no stored session then it gets one and stores it
    # OK lets go to the database and see if we have a session stored
    wordbooker_debugger("Getting Userdata ", " ", 0);
    $session = wordbooker_get_userdata($user_ID);
    if (strlen($session->access_token) > 5) {
        wordbooker_debugger("Session found. Check validity ", " ", 0);
        # We have a session ID so lets not get a new one
        # Put some session checking in here to make sure its valid
        try {
            wordbooker_debugger("Calling Facebook API : get current user ", " ", 0);
            $ret_code = wordbooker_me($session->facebook_id, $session->access_token);
        } catch (Exception $e) {
            # We don't have a good session so
            wordbooker_debugger("User Session invalid - clear down data ", " ", 0);
            #wordbooker_delete_user($user_ID,1);
            return;
        }
        return $session->access_token;
    } else {
        # Are we coming back from a login with a session set?
        $zz = htmlspecialchars_decode($_POST['session']) . "<br>";
        $oldkey = explode("|", $zz);
        $newkey = explode("&expires", $zz);
        $session->access_token = $newkey[0];
        $session->session_key = $oldkey[1];
        $session->expires = 0;
        $ret_code = wordbooker_me_status($session->facebook_id, $session->access_token);
        wordbooker_debugger("Checking session (2) ", " ", 0);
        if (strlen($session->access_token) > 5) {
            wordbooker_debugger("Session found. Store it ", " ", 0);
            # Yes! so lets store it
            wordbooker_set_userdata($onetime_data, $facebook_error, $secret, $session, $ret_code->id);
            return $session->access_token;
        }
    }
}