Advertisement
terorama

fb / fb.inc.php

Nov 5th, 2012
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 30.84 KB | None | 0 0
  1. <?php
  2.  
  3. require 'fbbase.inc.php';
  4.  
  5. class fbManager {
  6.  
  7.    //const APPID = '361072007313712';
  8.    //const SECRETID = '4d8af4a7e0ce2cd3176a2a0fc564a485';
  9.    
  10.    const APPID = '114645945357623';
  11.    const SECRETID = 'e94d46ad52ab2ade6116ef5637c52c39';
  12.    
  13.    const DEBUGFILE = 'debugfbman9.txt';
  14.    
  15.    const FBPAGE = 'http://www.facebook.com/UnisampleDebug';
  16.    
  17.    //----------------------------------------------------------------
  18.    const SCOPESTR ='user_about_me,  user_activities,  user_birthday,  user_checkins,
  19.      user_education_history,  user_events,  user_groups,  user_hometown,  user_interests,
  20.      user_likes,  user_location,  user_notes,  user_photos,  user_questions,  user_relationships,
  21.      user_relationship_details,  user_religion_politics,  user_status,  user_subscriptions,
  22.      user_videos,  user_website,  user_work_history,  email,
  23.      read_friendlists,  read_insights,  read_mailbox,  read_requests,  read_stream,
  24.      xmpp_login,  ads_management,  create_event,  manage_friendlists,
  25.      manage_notifications,  user_online_presence,  friends_online_presence,
  26.      publish_checkins,  publish_stream,  rsvp_event';
  27.  
  28.   //----------------------------------------------------------------
  29.   const USERFQL ='select uid, username, first_name, middle_name, last_name,
  30.       name, pic_small, pic_big, pic_square, pic, affiliations, profile_update_time,
  31.       timezone, religion, birthday, birthday_date, devices, sex, hometown_location,
  32.       meeting_sex, meeting_for, relationship_status, significant_other_id, political,
  33.       current_location, activities, interests, is_app_user, music, tv, movies, books, quotes,
  34.       about_me, notes_count, wall_count, status, online_presence, locale, proxied_email,
  35.       profile_url, pic_small_with_logo, pic_big_with_logo, pic_square_with_logo, pic_with_logo,
  36.       pic_cover, allowed_restrictions, verified, profile_blurb, family, website, is_blocked, contact_email,
  37.       email, third_party_id, name_format, video_upload_limits, games, work, education, sports,
  38.       favorite_athletes, favorite_teams, inspirational_people, languages, likes_count,
  39.       friend_count, mutual_friend_count, can_post from user ';
  40.    
  41.    private static $instance;
  42.    public $db;
  43.    
  44.    public $debug_mode=true;
  45.    public $debug_array=array();
  46.    
  47.    private $facebook;
  48.    private $user=0;
  49.    public $loginUrl='';
  50.    public $logoutUrl='';
  51.    
  52.    public $errors = array();
  53.    
  54.    //-----------------------------------------
  55.    private function declear() {
  56.       for ($i=0; $i<count($this->debug_array); $i++) {
  57.          unset($this->debug_array[$i]);
  58.       }
  59.    }
  60.    //-----------------------------------------
  61.    private function dewr($s)  {
  62.    
  63.       if ($this->debug_mode) {
  64.      
  65.          if (file_exists(fbManager::DEBUGFILE)) {
  66.             $fh = fopen(fbManager::DEBUGFILE,'a');
  67.          }
  68.          else
  69.             {
  70.                $fh = fopen (fbManager::DEBUGFILE,'w');
  71.             }
  72.            
  73.          fwrite($fh, date('d.m.Y H:i:s ').$s."\r\n\r\n");
  74.          fclose($fh);
  75.                  
  76.          //$this->debug_array[]=$s;
  77.          }
  78.    }
  79.    //-----------------------------------------
  80.    public function deshow() {
  81.       $inf = '<pre>'.print_r($this->debug_array, true).'</pre>';
  82.       $this->declear();
  83.       return $inf;
  84.      
  85.    }
  86.    
  87.    
  88.    //-------------------------------------------get instance
  89.    public static function getInstance() {
  90.       if (!self::$instance) {
  91.          self::$instance = new fbManager();
  92.       }
  93.      
  94.       return self::$instance;
  95.    }
  96.    //------------------------------------------init facebook object
  97.    private function __construct() {
  98.    
  99.       $this->dewr('start construct');
  100.      
  101.       require 'facebook.php';
  102.       $this->dewr('got facebook.php');
  103.  
  104.       $this->facebook = new Facebook(array(
  105.             'appId'  => fbManager::APPID,
  106.             'secret' => fbManager::SECRETID ,
  107.          ));
  108.          
  109.       $this->dewr('Facebook created');
  110.          
  111.       if (!$this->facebook)
  112.          throw new Exception('failed to init facebook PHP SDK');
  113.          
  114.       if (isset($_REQUEST["logoutapp"])) {
  115.      
  116.          unset($_SESSION['fb_'.fbManager::APPID.'_access_token']);
  117.          unset($_SESSION['fb_'.fbManager::APPID.'_user_id']);
  118.          
  119.       }
  120.      
  121.       $this->user = $this->facebook->getUser();
  122.      
  123.       $this->dewr('finished facebook->getUser');
  124.      
  125.       $this->db = Baser::getInstance($this->user);
  126.      
  127.      
  128.      
  129.       //----------------
  130.       if ($this->user)
  131. {
  132.          $this->logoutUrl = $this->facebook->getLogoutUrl(array('next' =>
  133.                     'http://'.$_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"].'?logoutapp'));
  134.       }
  135.       else {
  136.         $this->loginUrl = $this->facebook->getLoginUrl(array(
  137.         'redirect_uri' =>
  138.         'http://'.$_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"],                
  139.         'scope'=> fbManager::SCOPESTR
  140.       ));}
  141.    }
  142.    
  143.    //--------------------------------------------------------------
  144.    //     direct calls to Baser methods
  145.    //--------------------------------------------------------------
  146.    public function __call($name, $arguments) {
  147.      
  148.       if (substr($name,0,3)=='db_') {
  149.      
  150.          $pname = substr($name,3);
  151.          
  152.          if (method_exists($this->db, $pname)) {
  153.          
  154.             $rez = call_user_func_array(array($this->db, $pname), $arguments);
  155.             return $rez;
  156.          }
  157.          else {
  158.             return 'error: unknown db method: '.$pname;
  159.          }       
  160.       }
  161.      
  162.       else
  163.          return 'error: unknown method: '.$name;
  164.          
  165.    }
  166.    
  167.    //--------------------------------------------connected
  168.    public function connected() {
  169.       return $this->user;
  170.    }
  171.    
  172.    //---------------------------------------------draw widget
  173.    public function drawWidget($widget) {
  174.    
  175.      ob_start();
  176.      //---------------------------------------
  177.      //           common part
  178.      //---------------------------------------
  179.    ?>
  180.    
  181.    <html xmlns:fb="http://ogp.me/ns/fb#">
  182.    
  183.    <head>
  184.       <script type="text/javascript" src="jquery.min.js"></script>
  185.    </head>
  186.    
  187.    <body>
  188.      <div id="fb-root"></div>
  189.      
  190.      <script>
  191.      
  192.      (function(d, s, id) {
  193.             //---------------------------------------------------
  194.             //    load all.js asynchronously
  195.             //---------------------------------------------------
  196.             var js;
  197.             var fjs = d.getElementsByTagName(s)[0];
  198.            
  199.             if (d.getElementById(id))
  200.                 return;
  201.                
  202.             js = d.createElement(s);
  203.             js.id = id;
  204.            
  205.             js.src = "//connect.facebook.net/ru_RU/all.js#xfbml=1&appId=<?php echo fbManager::APPID;?>";
  206.             fjs.parentNode.insertBefore(js, fjs);
  207.            
  208.            }(document, 'script', 'facebook-jssdk'));
  209.      </script>
  210.            
  211.      <script type="text/javascript">
  212.             //---------------------------------------------------
  213.             //      get widget iframe ref
  214.             //---------------------------------------------------
  215.             $(document).ready(
  216.              setTimeout(
  217.                      function() {
  218.                        var ifr=$('.fb_iframe_widget iframe:first');
  219.                        
  220.                        $(ifr).parents('.fb_iframe_widget').before($('<div/>')
  221.                          .css('word-wrap','break-word')                      
  222.                          .html('<a href="'+ifr.get(0).src+
  223.                            '" target="_blank">'+ifr.get(0).src+'</a>'));
  224.                     },3000));
  225.     </script>  
  226.            
  227.    
  228. <?php  
  229.      //------------------------------------------
  230.      //     choose  widget
  231.      //------------------------------------------
  232.      
  233.      if (isset($_REQUEST["alt3"]))
  234.      
  235.         $targ = fbManager::FBPAGE;
  236.      else
  237.         $targ = 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"];
  238.      
  239.      switch($widget) {
  240.      
  241.        
  242.         //---------------------------  
  243.         case 'login_html5':
  244.          
  245.             echo '<div class="fb-login-button" data-show-faces="true" data-width="200" data-max-rows="1">';
  246.             echo '</div>';
  247.             break;
  248.            
  249.         //---------------------------
  250.         case 'login_opengraph':
  251.        
  252.            echo '<fb:login-button show-faces="true" width="200" max-rows="1"></fb:login-button>';          
  253.            break;
  254.            
  255.         //---------------------------
  256.         case 'activity_html5':
  257.        
  258.            echo '<div class="fb-activity"'.
  259.            ' data-href="'.$targ.'"'.
  260.            ' data-app-id="'.fbManager::APPID.'"'.
  261.            ' data-width="300" data-height="300" '.
  262.            ' data-header="true" data-recommendations="false"></div>';
  263.            break;
  264.            
  265.         //---------------------------    
  266.         case 'activity_opengraph':
  267.        
  268.            echo '<fb:activity '.
  269.            ' href="'.$targ.'" '.
  270.            ' app_id="'.fbManager::APPID.'" '.
  271.            ' width="300" height="300" header="true" recommendations="false"></fb:activity>';
  272.            break;
  273.            
  274.         //---------------------------  
  275.         case 'activity_iframe':
  276.        
  277.            echo '<iframe '.
  278.            'src="//www.facebook.com'.
  279.            '/plugins/activity.php'.
  280.            '?href='.urlencode($targ).'&amp;'.
  281.            'app_id='.fbManager::APPID.'&amp;'.
  282.            'action&amp;width=300&amp;height=300&amp;header=true&amp;'.
  283.            'colorscheme=light&amp;linktarget=_blank&amp;border_color&amp;'.
  284.            'font&amp;recommendations=false&amp;'.
  285.            'appId='.fbManager::APPID.'" scrolling="no" frameborder="0"'.
  286.            ' style="border:none; overflow:hidden;'.
  287.            ' width:300px; height:300px;" allowTransparency="true"></iframe>';
  288.            break;
  289.            
  290.         //---------------------------  
  291.         case 'activity_link':
  292.        
  293.            $lnk = 'http://www.facebook.com/plugins/activity.php'.
  294.            '?href='.urlencode($targ).'&'.
  295.            'app_id='.fbManager::APPID.
  296.            '&action&width=300&height=300&'.
  297.            'header=true&colorscheme=light&linktarget=_blank'.
  298.            '&border_color&font&recommendations=false&appId='.fbManager::APPID;
  299.            
  300.            echo "<a href=\"$lnk\" target=\"_blank\">$lnk</a>";
  301.            break;
  302.            
  303.         //---------------------------
  304.         case 'comments_html5':
  305.            
  306.            echo
  307.            '<div class="fb-comments" '.
  308.            ' data-href="'.$targ.'" '.
  309.            ' data-num-posts="6" data-width="470"></div>';
  310.            break;
  311.            
  312.         //---------------------------
  313.         case 'comments_opengraph':
  314.        
  315.            echo '<fb:comments href="'.$targ.'"'.
  316.            ' num_posts="6" width="470"></fb:comments>';
  317.            break;
  318.            
  319.         //---------------------------
  320.         case 'facepile_html5':
  321.        
  322.            echo '<div class="fb-facepile" '.
  323.            'data-href="'.$targ.'" '.
  324.            'data-size="large" data-max-rows="6" data-width="300"></div>';
  325.            break;
  326.            
  327.         //---------------------------
  328.         case 'facepile_opengraph':
  329.        
  330.            echo '<fb:facepile href="'.$targ.'" '.
  331.            'size="large" max_rows="6" width="300"></fb:facepile>';
  332.            break;
  333.            
  334.         //---------------------------  
  335.         case 'facepile_iframe':
  336.        
  337.            echo '<iframe '.
  338.            ' src="//www.facebook.com/plugins/facepile.php?'.
  339.            'href='.urlencode($targ).'&amp;'.
  340.            'action&amp;size=large&amp;'.
  341.            'max_rows=6&amp;width=300&amp;'.
  342.            'colorscheme=light&amp;appId='.fbManager::APPID.
  343.            '" scrolling="no" frameborder="0"'.
  344.            ' style="border:none; overflow:hidden;'.
  345.            ' width:300px;" allowTransparency="true"></iframe>';
  346.            break;
  347.            
  348.         //---------------------------
  349.         case 'facepile_link':
  350.        
  351.            $lnk = 'http://www.facebook.com/plugins/facepile.php?'.
  352.            'href='.urlencode($targ).
  353.            '&action&size=large&max_rows=6&width=300'.
  354.            '&colorscheme=light&appId='.fbManager::APPID;
  355.            
  356.            echo "<a href=\"$lnk\" target=\"_blank\">$lnk</a>";
  357.            break;
  358.            
  359.         //---------------------------
  360.         case 'likebox_html5':
  361.            echo '<div class="fb-like-box" '.
  362.            'data-href="'.$targ.'" '.
  363.            'data-width="292" data-height="700" '.
  364.            'data-show-faces="true" data-stream="true" '.
  365.            'data-header="true"></div>';
  366.            break;
  367.          
  368.         //---------------------------
  369.         case 'likebox_opengraph':
  370.            echo '<fb:like-box '.
  371.            'href="'.$targ.'" '.
  372.            'width="292" height="700" show_faces="true"'.
  373.            ' stream="true" header="true"></fb:like-box>';
  374.            break;
  375.        
  376.         //---------------------------
  377.         case 'likebox_iframe':
  378.            echo
  379.            '<iframe src="//www.facebook.com/plugins/likebox.php'.
  380.            '?href='.urlencode($targ).
  381.            '&amp;width=292&amp;height=590&amp;'.
  382.            'colorscheme=light&amp;show_faces=true&amp;'.
  383.            'border_color&amp;stream=true&amp;'.
  384.            'header=true&amp;appId='.fbManager::APPID.'" '.
  385.            'scrolling="no" frameborder="0" '.
  386.            'style="border:none; overflow:hidden; '.
  387.            'width:292px; height:590px;" allowTransparency="true"></iframe>';
  388.            break;
  389.            
  390.         //----------------------------
  391.         case 'likebox_link':
  392.            
  393.            $lnk = 'http://www.facebook.com/plugins/likebox.php'.'
  394.            ?href='.urlencode($targ).'&'.
  395.            'width=292&height=590&colorscheme=light&'.
  396.            'show_faces=true&border_color&stream=true'.'
  397.            &header=true&appId='.fbManager::APPID;
  398.            
  399.            echo "<a href=\"$lnk\" target=\"_blank\">$lnk</a>";
  400.            break;
  401.            
  402.         //----------------------------
  403.         case 'likebutton_html5':   
  404.        
  405.            echo '<div class="fb-like" '.
  406.            'data-href="'.$targ.'" '.
  407.            'data-send="true" '.
  408.            'data-width="450" '.
  409.            'data-show-faces="true"></div>';
  410.            break;
  411.            
  412.         //----------------------------
  413.         case 'likebutton_opengraph':   
  414.        
  415.            echo '<fb:like href="'.$targ.'" '.
  416.            'send="true" width="450" show_faces="true"></fb:like>';
  417.            break;
  418.            
  419.         //----------------------------
  420.         case 'recommendbar_html5':
  421.        
  422.            echo '<div class="fb-recommendations-bar" '.
  423.            'data-href="'.$targ.'"></div>';
  424.            break;
  425.            
  426.         //----------------------------
  427.         case 'recommendbar_opengraph': 
  428.        
  429.            echo '<fb:recommendations-bar '.
  430.            'href="'.$targ.'"></fb:recommendations-bar>';
  431.            break;
  432.            
  433.         //----------------------------
  434.         case 'recommendbox_html5':
  435.        
  436.            echo '<div class="fb-recommendations" '.
  437.            'data-site="'.$targ.'" data-app-id="'.fbManager::APPID.'" '.
  438.            'data-width="300" data-height="300" data-header="true"></div>';
  439.            break;
  440.            
  441.         //----------------------------
  442.         case 'recommendbox_opengraph': 
  443.        
  444.            echo '<fb:recommendations site="'.$targ.'" '.
  445.            'app_id="'.fbManager::APPID.'" '.
  446.            'width="300" height="300" header="true"></fb:recommendations>';
  447.            break;
  448.            
  449.         //----------------------------
  450.         case 'sendbutton_html5':
  451.        
  452.            echo '<div class="fb-send" data-href="'.$targ.'"></div>';
  453.            break;
  454.            
  455.         //----------------------------
  456.         case 'sendbutton_opengraph':
  457.            
  458.            echo '<fb:send href="'.$targ.'"></fb:send>';
  459.            break;
  460.            
  461.         //----------------------------
  462.         case 'sharedactivity_html5':
  463.        
  464.            echo '<div class="fb-shared-activity" data-width="300" '.
  465.            'data-height="300"></div>';
  466.            break;
  467.        
  468.         //----------------------------
  469.         case 'sharedactivity_opengraph':
  470.        
  471.            echo '<fb:shared-activity width="300" height="300">'.
  472.            '</fb:shared-activity>';
  473.            break;
  474.            
  475.         //----------------------------
  476.         case 'subscribebutton_html5':
  477.        
  478.            echo '<div class="fb-subscribe" data-href="'.$targ.'" '.
  479.            'data-show-faces="true" data-width="450"></div>';
  480.            break;
  481.  
  482.     }
  483.    
  484.     echo '</body></html>';
  485.    
  486.     $inf = ob_get_clean();
  487.    
  488.     return $inf;
  489.    }
  490.    
  491.    //-----------------------------------------register error
  492.    private function saveError($e, $mtname, $args) {
  493.    
  494.       $s = 'Exception: '.$e->getType().':'.$e->getMessage()."\r\n";
  495.       $s.= 'in method: '.$mtname."\r\n";
  496.       $s.= 'arguments: '.implode(',',$args)."\r\n\r\n";
  497.      
  498.       $this->errors[]= $s;
  499.      
  500.       return $s;
  501.    }  
  502.    
  503.    //---------------------------------show errors
  504.    public function showErrors() {
  505.    
  506.       return implode('',array_reverse($this->errors));
  507.    }
  508.    
  509.    //-------------------------------flush errors
  510.    public function flushErrors() {
  511.       for ($i=0; $i<count($this->errors); $i++) {
  512.          unset($this->errors[$i]);
  513.          }
  514.    }
  515.    
  516.    //---------------------------------------------get GraphApi node
  517.    public function getNode($inf) {
  518.  
  519.       $s=array();
  520.       try {
  521.          $s= $this->facebook->api($inf);     
  522.       }
  523.       catch (FacebookApiException $e) {
  524.          $args =  func_get_args();
  525.          $s['err'] = $this->saveError($e, __METHOD__,$args);
  526.          
  527.       }
  528.      
  529.      return $s;
  530.    }
  531.  
  532.    //-----------------------------------------------------get Fql
  533.    public function get_fql($query) {
  534.    
  535.  
  536.       $inf = array();
  537.      
  538.       $param = array(
  539.                      'method'=> 'fql.query',
  540.                      'query'=>$query);
  541.       try {
  542.          $inf = $this->facebook->api($param);
  543.       }
  544.      
  545.       catch (FacebookApiException $e) {
  546.          $args = func_get_args();
  547.          $inf['err'] = $this->saveError($e, __METHOD__, $args);
  548.       }
  549.      
  550.       return $inf;                       
  551.    }
  552.    
  553.    //--------------------------------------get GraphApi node async
  554.    public function getNodeAsync($inf) {
  555.    
  556.       $url = 'http://'.$_SERVER["SERVER_NAME"].'/uni/test45.php'.//$_SERVER["PHP_SELF"].
  557.       '?ajax&reqtype=apigrapha&req='.urlencode($inf);
  558.      
  559.       $this->dewr($url);
  560.  
  561.       $ch = curl_init();
  562.       curl_setopt($ch, CURLOPT_HEADER,0);
  563.       curl_setopt($ch, CURLOPT_URL, $url);
  564.       curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  565.       curl_setopt($ch, CURLOPT_TIMEOUT, 8);
  566.       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  567.       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0");
  568.       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  569.       curl_setopt($ch, CURLOPT_COOKIE, session_name().'='.$_COOKIE[session_name()].'; path=/');
  570.      
  571.       session_write_close();
  572.       $result = curl_exec($ch);
  573.      
  574.       $this->dewr($result);
  575.      
  576.       if (curl_errno($ch)) {
  577.      
  578.          $inf = array();
  579.          $inf['err'] = 'curl error: '.curl_error($ch);
  580.          
  581.          curl_close($ch);        
  582.          //session_start();  
  583.          return $inf;
  584.       }  
  585.       curl_close($ch);
  586.       session_start();
  587.        
  588.       $inf = unserialize($result);
  589.       return $inf;
  590.      
  591.    }  
  592.    
  593.    //--------------------------------------get Fql async
  594.    public function getFqlAsync($inf) {
  595.    
  596.       $url = 'http://'.$_SERVER["SERVER_NAME"].'/uni/test45.php'.//.$_SERVER["PHP_SELF"].
  597.       '?ajax&reqtype=fqla&req='.urlencode($inf);
  598.      
  599.       $this->dewr($url);
  600.      
  601.       $ch = curl_init();
  602.       curl_setopt($ch, CURLOPT_HEADER,0);
  603.       curl_setopt($ch, CURLOPT_URL, $url);
  604.       curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  605.       curl_setopt($ch, CURLOPT_TIMEOUT,10);
  606.       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  607.       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0");
  608.       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  609.       curl_setopt($ch, CURLOPT_COOKIE, session_name().'='.$_COOKIE[session_name()].'; path=/');
  610.      
  611.       session_write_close();
  612.       $result = curl_exec($ch);
  613.       $this->dewr('curl finished');
  614.       $this->dewr($result);
  615.      
  616.       if (curl_errno($ch)) {
  617.          $this->dewr('curl error');  
  618.          $inf = array();
  619.          $inf['err'] = 'curl error: '.curl_error($ch);
  620.          $this->dewr('curl error checked');
  621.          curl_close($ch);
  622.          $this->dewr('curl closed');   
  623.          //session_start();
  624.          //$this->dewr('session restarted');
  625.          return $inf;
  626.       }
  627.       $this->dewr('curl success');
  628.       curl_close($ch);
  629.       session_start();
  630.       $this->dewr('session restarted');
  631.       $inf = unserialize($result);
  632.       return $inf;
  633.    }      
  634.    
  635.    
  636.    //------------------------------------create structure for node
  637.    
  638.    public function createNodeTable($inf, $checkifexists=false) {
  639.      
  640.          $desc = $this->getNodeAsync($inf);
  641.          echo $desc;
  642.          
  643.          if (isset($desc['err']))
  644.             return $desc;
  645.  
  646.          $tabname = 'fb_'.array_pop(explode('/',$inf));
  647.          $res = $this->db->createTable($desc, $tabname, $checkifexists );
  648.        
  649.      
  650.       return $res;
  651.          
  652.    }
  653.    
  654.    //-------------------------------------create table for fql_query
  655.    
  656.    public function createFqlTable($fql, $checkifexists=false) {
  657.      
  658.          $desc = $this->getFqlAsync($fql);
  659.          
  660.          if (isset($desc['err']))
  661.             return $desc;
  662.          
  663.          if (isset($desc[0]))
  664.             $desc = $desc[0];  
  665.            
  666.          $tname = trim(substr($fql, strpos($fql, 'from')+4));
  667.          $tname = substr($tname,0, strpos($tname,' '));
  668.          
  669.          $tname='fql_'.$tname;
  670.          
  671.          $res = $this->db->createTable($desc, $tname, $checkifexists);
  672.      
  673.       return $res;
  674.    }
  675.    
  676.    //-----------------------------------filling node table
  677.    public function fillNodeTable($inf) {
  678.  
  679.          $desc = $this->getNodeAsync($inf);
  680.          
  681.          if (isset($desc['err']))
  682.             return $desc;
  683.          
  684.          $tabname = 'fb_'.array_pop(explode('/',$inf));
  685.          $res = $this->db->fillTable($desc, $tabname);
  686.    
  687.       return $res;
  688.    }
  689.    
  690.    //-----------------------------------fill fql table
  691.    
  692.    public function fillFqlTable($fql, $clear=true) {
  693.    
  694.          $desc = $this->getFqlAsync($fql);
  695.          
  696.           if (isset($desc['err']))
  697.             return $desc;
  698.          
  699.          
  700.          $tname = trim(substr($fql, strpos($fql,'from')+4));
  701.          $tname = substr($tname, 0, strpos($tname,' '));
  702.          $tname='fql_'.$tname;
  703.          
  704.          $res = $this->db->fillTable($desc, $tname, $clear);
  705.      
  706.       return $res;
  707.    }
  708.    
  709.    //---------------------------------insert users into fql_user
  710.    
  711.    public function insertFqlUsers($filter) {
  712.    
  713.       $inf = $this->getFqlAsync(fbManager::USERFQL.$filter);
  714.       if (isset($inf['err']))
  715.          return $inf;
  716.          
  717.       $tname='fql_user';
  718.       $this->dewr('filling fql_user table');
  719.       $res = array();
  720.       for ($i=0; $i<count($inf); $i++) {
  721.          if (!$this->db->checkQuery("select * from  $tname where fb_uid={$inf[$i]["uid"]}")) {
  722.          
  723.             $res = array_merge_recursive($res, $this->db->fillTable($inf[$i],$tname,false));
  724.          }         
  725.       }
  726.       $this->dewr('insertFqlUsers finished');
  727.       return $res;  
  728.    }
  729.    
  730.    //-------------------------insert fb_likes ->fb_base_user_id into fql_users
  731.    
  732.    public function likesBasesToFqlUsers() {
  733.    
  734.       $usrs = $this->db->fetchQueryField(
  735.          'select fb_base_user_id from fb_likes group by fb_base_user_id',
  736.          'fb_base_user_id');
  737.          
  738.       if (isset($usrs['err']))
  739.          return $usrs;
  740.          
  741.       $filt=' where uid in('.implode(',',$usrs).')';
  742.      
  743.       $rez = $this->insertFqlUsers($filt);
  744.       return $rez;
  745.  
  746.    }
  747.    
  748.    //---------------------------------------find Related Users
  749.    
  750.    public function findRelatedUsers() {
  751.    
  752.       $result = array();
  753.      
  754.       $result['inf']=$this->db->getQuery(
  755.       'select a.fb_name, a.fb_category, c.fb_name, c.fb_pic_square,  '.
  756.       'c.fb_profile_url, c.fb_uid '.
  757.       'from fb_likes a, fbs_likes_users b, fql_user c '.
  758.       'where a.fb_base_user_id=b.fb_base_user_id '.
  759.       ' '.
  760.       'and a.fb_id=b.fb_like_id and b.fb_reluser_id=c.fb_uid '.
  761.       'and a.fb_base_user_id=\''.$this->user.'\'');
  762.      
  763.       $result['likes']=$this->db->getQuery(
  764.          'select * from fb_likes where fb_base_user_id=\''.$this->user.'\'');
  765.    
  766.       $result['rel_users']=$this->db->getQuery(
  767.          'select * from fbs_likes_users where fb_base_user_id=\''.$this->user.'\'');
  768.        
  769.    
  770.  
  771.       return $result;
  772.    }
  773.    
  774.    //-------------------------------------------------------------
  775.    //          draw related users page
  776.    //-------------------------------------------------------------
  777.    public function drawRelatedUsers() {
  778.    
  779.  
  780.       $result=$this->db->getQuery(
  781.       'select a.fb_name as likename, a.fb_category as likecategory, '.
  782.       'c.fb_name as username, c.fb_pic_square as userpic,  '.
  783.       'c.fb_profile_url as userurl, c.fb_uid as userid '.
  784.       'from fb_likes a, fbs_likes_users b, fql_user c '.
  785.       'where a.fb_base_user_id=b.fb_base_user_id '.
  786.       ' '.
  787.       'and a.fb_id=b.fb_like_id and b.fb_reluser_id=c.fb_uid '.
  788.       'and a.fb_base_user_id=\''.$this->user.'\'');
  789.      
  790.       $s = '<table><tr><td>like</td><td>username</td><td>userpic</td></tr>';
  791.       foreach ($result as $el) {
  792.          
  793.          $s.= "<tr><td>{$el["likename"]}</td>".
  794.                 "<td>{$el["username"]}</td>".
  795.                 "<td><a href=\"{$el["userurl"]}\" target=\"_blank\">".
  796.                 "<img src=\"{$el["userpic"]}\" /></a></td></tr>";
  797.       }
  798.       $s.='</table>';
  799.      
  800.       return $s;
  801.    }
  802.    
  803.    //---------------------------------------------------
  804.    //          halt on error
  805.    //---------------------------------------------------
  806.    private function halt($err, $header='<html><head></head>') {
  807.    
  808.       if (isset($err['err'])) {
  809.          echo $header;
  810.          echo '<body><h3>error during operation</h3>';
  811.          echo '<pre>'.print_r($err,true).'</pre></body></html>';
  812.          
  813.          exit();
  814.       }
  815.    }
  816.    
  817.    //---------------------------------------------------
  818.    //         fill related users table
  819.    //---------------------------------------------------
  820.    public function writeRelatedUsers() {
  821.      
  822.       //header('content-type: text/html; charset=utf-8');    
  823.       //set_time_limit(0);
  824.       //ob_implicit_flush(true);  
  825.       //$exc = 1/0;
  826.       //@ini_set('zlib.output_compression',0);
  827.       //@ini_set('implicit_flush',1);    
  828.      
  829.       $this->dewr('start writeRelatedUsers');
  830.      
  831.       $header = '<html><head><script type="text/javascript">'.
  832.                 'setTimeout(function(){location.replace(location.href);},1000);'.
  833.                 '</script></head>';
  834.                
  835.       $header4 = '<html><head><script type="text/javascript">'.
  836.                 'setTimeout(function(){location.replace(location.href);},1000);'.
  837.                 '</script></head>';        
  838.                
  839.      
  840.       $lk_addr = <<<INF
  841.          http://www.facebook.com/plugins/likebox.php?
  842.          href=https%3A%2F%2Fwww.facebook.com%2F
  843.          ##LIKEID##
  844.          &width=200&height=6000&
  845.          colorscheme=light&show_faces=true&border_color&
  846.          stream=false
  847. INF;
  848.          
  849.       $lk_addr = str_replace(array(chr(10),chr(9),chr(32)), "", $lk_addr);   
  850.      
  851.       $opts = array(
  852.             'http'=>array (
  853.                'method'=>'GET',
  854.                'header'=>"Accept: text/html\r\n".
  855.                          "User-Agent: Mozilla/5.0\r\n"));
  856.                      
  857.       $context = stream_context_create($opts);     
  858.      
  859.       //------------------------------
  860.       function restruct($val, $key) {
  861.      
  862.             $z = $key;
  863.             if ($val<4)
  864.                return $z;
  865.          }   
  866.       //------------------------------
  867.    
  868.       if (!isset($_SESSION["step"]))
  869.          $_SESSION["step"]=1;
  870.          
  871.          
  872.       //----------------------------------
  873.       switch ($_SESSION["step"]) {
  874.      
  875.       //----------------------------------
  876.       //         step 1
  877.       //----------------------------------
  878.          case 1:
  879.            
  880.            
  881.             $err  = $this->fillNodeTable('me/likes');      
  882.             $this->halt($err);
  883.                        
  884.             $err = $this->createFqlTable(fbManager::USERFQL.' where uid=me()', true);
  885.             $this->halt($err);
  886.          
  887.             $like_ids = $this->db->fetchField('fb_likes','fb_id');
  888.             $this->halt($like_ids);
  889.          
  890.             $_SESSION['like_ids']=$like_ids;
  891.             $_SESSION['users_likes']=array();
  892.             $_SESSION['step_ids']=0;
  893.             $_SESSION['step']+=2;
  894.          
  895.             echo $header;
  896.             echo '<body>Start processing...'.count($like_ids).' likes</body></html>';
  897.          
  898.          break;
  899.          
  900.       //----------------------------------------------
  901.       //            step 3
  902.       //----------------------------------------------
  903.          case 3:
  904.          
  905.             $like_ids = $_SESSION['like_ids'];
  906.          
  907.             //------------------------------               
  908.             $users_likes = $_SESSION['users_likes'];
  909.  
  910.             $j= $_SESSION['step_ids'];
  911.             //-----------------------------    
  912.             $lk_addr3 = str_replace('##LIKEID##', $like_ids[$j], $lk_addr);
  913.                          
  914.             $users = array();    
  915.            
  916.             for ($i=0; $i<3; $i++) {
  917.                
  918.                $inf = file_get_contents($lk_addr3, false, $context);
  919.      
  920.                preg_match_all('/<div[^>]*class=[\'"]grid_item[\'"][^>]*>'.
  921.                '[^<]*<a[^>]*href=([\'"])([^\1>]*?)\1[^>]*>/ims', $inf, $out);
  922.          
  923.                $users = array_merge($users, $out[2]);
  924.             }
  925.        
  926.             $users3 = array_count_values($users);    
  927.             $users4 = array_values(array_filter(array_map('restruct', $users3, array_keys($users3))));
  928.          
  929.             $users_like=array();
  930.             $users_like['like']=$like_ids[$j];
  931.             $users_like['users']=$users4;
  932.          
  933.             $users_likes[]=$users_like;
  934.          
  935.             $_SESSION["users_likes"]=$users_likes;
  936.             $_SESSION['step_ids']++;
  937.            
  938.             if ($_SESSION['step_ids']==min(3,count($like_ids)))
  939.                $_SESSION['step']++;
  940.          
  941.             echo $header;          
  942.             echo '<body>iteration...'.$j.' like='.$like_ids[$j].'</body></html>';                      
  943.          break;
  944.          
  945.       //----------------------------------------------
  946.       //            step 4
  947.       //----------------------------------------------
  948.          case 4:
  949.              
  950.             $insstr = $this->db->execQuery(
  951.             'delete from fbs_likes_users where fb_base_user_id=\''.$this->user.'\'');                      
  952.            
  953.             $this->halt($insstr);
  954.            
  955.             $users_likes=$_SESSION['users_likes'];
  956.            
  957.             $likes_users = array();
  958.            
  959.             $f = create_function('$el1,$el2',
  960.                '$rez["like"]=$el1; $rez["user"]=$el2; return $rez;');
  961.            
  962.             foreach ($users_likes as $el) {
  963.            
  964.                $arr1= array_fill(0,count($el['users']),$el['like']);
  965.                $likes_users=array_merge($likes_users, array_map($f, $arr1, $el['users']));
  966.             }
  967.            
  968.             $_SESSION['step']++;
  969.             $_SESSION['step_lu']=0;
  970.             $_SESSION['likes_users']=$likes_users;
  971.            
  972.             echo $header;
  973.             echo '<body>step 4, delete previous info<br/>'.
  974.             '<pre>'.print_r($insstr,true).'</pre>'.
  975.             '</body></html>';
  976.          
  977.          break;      
  978.  
  979.       //----------------------------------------------
  980.       //            step 5
  981.       //----------------------------------------------
  982.          case 5:   
  983.      
  984.             $likes_users = $_SESSION['likes_users'];
  985.            
  986.             $el = $likes_users[$_SESSION['step_lu']];
  987.             $reluser = $el['user'];
  988.             $reluser = substr(strrchr($reluser,'/'),1);
  989.            
  990.             $user_all = $this->getNodeAsync($reluser);
  991.             $this->halt($user_all, $header4);
  992.            
  993.             $userid = $user_all['id'];
  994.            
  995.             $user_all3 = $this->insertFqlUsers(" where username =\"$reluser\"");   
  996.            
  997.             //-------------------------------------
  998.             if (isset($user_all3['err']))
  999.                {
  1000.                //--------------------------ftg
  1001.                $_SESSION["errorsz"]++;
  1002.                echo $header4;
  1003.                
  1004.                echo '<body>error '.$_SESSION['errorsz'].'on step '.$_SESSION['step_lu'].'<br/>';
  1005.                echo '<pre>'.print_r($user_all3['err'],true).'</pre></body></html>';
  1006.                
  1007.                }
  1008.             else {
  1009.                   $this->dewr('fill fbs_likes_users');
  1010.  
  1011.                   $insstr=$this->db->execQuery(
  1012.                   'insert into fbs_likes_users(fb_base_user_id, fb_like_id, fb_reluser_id) '.
  1013.                   ' values(\''.$this->user.'\',\''.$el['like'].'\',\''.$userid.'\')');
  1014.            
  1015.                   $this->halt($insstr);
  1016.            
  1017.                   $out_fql_user = $this->db->drawTab('fql_user');
  1018.                   $out_likes_users = $this->db->drawTab('fbs_likes_users');
  1019.            
  1020.                   $_SESSION['step_lu']++;
  1021.            
  1022.                   if ($_SESSION['step_lu']==min(8000, count($likes_users)))
  1023.                      $_SESSION['step']++;
  1024.                      
  1025.                   $this->dewr('starting output');
  1026.              
  1027.                   echo $header;
  1028.                   echo '<body>current step: '.$_SESSION['step_lu'].'<br/>';
  1029.                   echo 'fql_user<br/>';
  1030.                   echo $out_fql_user.'<br/><br/>';
  1031.                   echo 'fbs_likes_users<br/>';
  1032.                   echo $out_likes_users.'</body></html>';
  1033.                  
  1034.                   $this->dewr('output finished');
  1035.             }
  1036.  
  1037.          break;
  1038.          
  1039.       //----------------------------------------------
  1040.       //            step 6 ftg
  1041.       //----------------------------------------------
  1042.          case 6:   
  1043.             echo '<h3>Information collected</h3>';
  1044.            
  1045.             $out_fql_user = $this->db->drawTab('fql_user');
  1046.             $out_likes_users = $this->db->drawTab('fbs_likes_users');
  1047.            
  1048.             echo 'fql_user<br/>';
  1049.             echo $out_fql_user.'<br/><br/>';
  1050.             echo 'fbs_likes_users<br/>';
  1051.             echo $out_likes_users;
  1052.            
  1053.            
  1054.            
  1055.          break;
  1056.      
  1057.      
  1058.       //---------------------------------------------------------
  1059.       }
  1060.      
  1061.        
  1062.      
  1063.    }
  1064.    
  1065.    
  1066.    
  1067.    
  1068.    
  1069. }
  1070.  
  1071.  
  1072.  
  1073. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement