Changeset 6193


Ignore:
Timestamp:
05/16/10 15:45:47 (9 years ago)
Author:
vdigital
Message:

New: Piwigo 2.1 support
Fix: Flags could be based on Languages if api calls are forbidden by a provider.
Part of a code review.

Location:
extensions/whois_online
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • extensions/whois_online/Changelog.txt.php

    r6172 r6193  
    33Plugin Name: Whois online 
    44** History ** 
     5  2010-05-16 2.1.a 
     6                                                 New: Piwigo 2.1 support 
     7                                                 Fix: Flags could be based on Languages if api calls are forbidden by a provider. 
     8                                                  
    59  2010-04-24 2.0.n 
    610                                                 Fix: Flags are coming back  
  • extensions/whois_online/config.php

    r3695 r6193  
    219219                'Members' => $conf_whois['Users'], 
    220220                'Whois_url' => WHOIS_ONLINE_PATH, 
     221                'Whois_Smarty' => 'file:' . dirname(__FILE__), 
    221222        )); 
    222223  // Include reload.php for first request (Filtering is an intrusive jQuery) 
  • extensions/whois_online/config.tpl

    r3319 r6193  
    141141 
    142142<fieldset> 
    143         <legend>{'User access details'|@translate}</legend> 
     143        <legend>{'User access details'|@translate}</legend><!-- {$Whois_Smarty}/report.tpl --> 
    144144<div id="reloadable"> 
    145 {include file="../../.`$Whois_url`report.tpl"} 
     145{include file="`$Whois_Smarty`/report.tpl"} 
    146146</div> 
    147147</fieldset> 
  • extensions/whois_online/include/wo_functions.inc.php

    r6172 r6193  
    44/* Secure Config */ 
    55if (!isset($conf['Whois Online']) or !isset($conf_whois['Active'])) $conf_whois = whois_online_conf(); 
     6 
     7if (defined('IN_ADMIN') and IN_ADMIN) include_once(WHOIS_ONLINE_PATH.'include/wo_admin_functions.inc.php'); 
    68 
    79function whois_online_conf() 
     
    3436} 
    3537 
    36  
    37 if ( !function_exists('pwg_get_contents') ) { 
    38         function pwg_get_contents($url, $mode='') { 
    39  
    40                 global $pwg_mode, $pwg_prev_host; 
    41                 $timeout = 5; // will be a parameter (only for the socket) 
    42  
    43                 $host = (strtolower(substr($url,0,7)) == 'http://') ? substr($url,7) : $url; 
    44                 $host = (strtolower(substr($host,0,8)) == 'https://') ? substr($host,8) : $host; 
    45                 $doc = substr($host, strpos($host, '/')); 
    46                 $host = substr($host, 0, strpos($host, '/')); 
    47  
    48                 if ($pwg_prev_host != $host) $pwg_mode = ''; // What was possible with one website could be different with another 
    49                 $pwg_prev_host = $host; 
    50                 if (isset($pwg_mode)) $mode = $pwg_mode; 
    51                 if ($mode == 'r') $mode = ''; 
    52                 // $mode = 'ch'; // Forcing a test '' all, 'fs' fsockopen, 'ch' cURL 
    53  
    54         // 1 - The simplest solution: file_get_contents 
    55         // Contraint: php.ini 
    56         //      ; Whether to allow the treatment of URLs (like http:// or ftp://) as files. 
    57         //      allow_url_fopen = On 
    58                 if ( $mode == '' ) { 
    59                   if ( true === (bool) ini_get('allow_url_fopen') ) {  
    60                                 $value = file_get_contents($url); 
    61                                 if ( $value !== false and substr($value,0,21) != '<!DOCTYPE HTML PUBLIC') { 
    62                                         return $value; 
    63                                 } 
    64                         } 
    65                 } 
    66                 if ( $mode == '' ) $mode = 'fs'; 
    67                 if ( $pwg_mode == '' ) $pwg_mode = 'fs'; // Remind it 
    68         // 2 - Often accepted access: fsockopen 
    69                 if ($mode == 'fs') { 
    70                         $fs = fsockopen($host, 80, $errno, $errstr, $timeout); 
    71                         if ( $fs !== false ) { 
    72                                 fwrite($fs, 'GET ' . $doc . " HTTP/1.1\r\n"); 
    73                                 fwrite($fs, 'Host: ' . $host . "\r\n"); 
    74                                 fwrite($fs, "Connection: Close\r\n\r\n"); 
    75                                 stream_set_blocking($fs, TRUE); 
    76                                 stream_set_timeout($fs,$timeout); // Again the $timeout on the get 
    77                                 $info = stream_get_meta_data($fs); 
    78                                 $value = ''; 
    79                                 while ((!feof($fs)) && (!$info['timed_out'])) { 
    80                                                                 $value .= fgets($fs, 4096); 
    81                                                                 $info = stream_get_meta_data($fs); 
    82                                                                 flush(); 
    83                                 } 
    84                                 if ( $info['timed_out'] === false  and substr($value,0,21) != '<!DOCTYPE HTML PUBLIC') return $value; 
    85                         } 
    86                 } 
    87  
    88                 if ( $pwg_mode == 'fs' ) $pwg_mode = 'ch'; // Remind it 
    89         // 3 - Sometime another solution: curl_exec 
    90         // See http://fr2.php.net/manual/en/curl.installation.php 
    91           if (function_exists('curl_init') and $pwg_mode == 'ch') { 
    92                         $ch = @curl_init(); 
    93                         @curl_setopt($ch, CURLOPT_URL, $url); 
    94                         @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    95                         @curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); 
    96                         @curl_setopt($ch, CURLOPT_HEADER, 1); 
    97                         @curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0'); 
    98                         @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    99                         @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    100                         $value = @curl_exec($ch); 
    101                         $header_length = @curl_getinfo($ch, CURLINFO_HEADER_SIZE); 
    102                         $status = @curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    103                         @curl_close($value); 
    104                         if ($value !== false and $status >= 200 and $status < 400) { 
    105                                 $value = substr($value, $header_length); 
    106                                 // echo '<br/>-ch- ('. $value . ') <br/>'; 
    107                                 return $value; 
    108                         } 
    109                         else $pwg_mode = 'failed'; // Sorry but remind it as well 
    110                 } 
    111  
    112                 // No other solutions 
    113                 return false; 
    114         } 
    115 } 
    11638// Assume the Default display on pages 
    11739function whois_default_display() { 
     
    11941        $template->set_filenames(array( 'Whois_display' => dirname(__FILE__).'/../default.tpl')); 
    12042        $template->pparse('Whois_display'); 
    121 } 
    122  
    123 // Add admin links 
    124 function whois_add_icon($menu) { 
    125         global $conf_whois, $lang; 
    126         if ($conf_whois['Add icon to History']) 
    127                 $lang['History'] .= '</a> <a class="external" href="' . get_admin_plugin_menu_link(WHOIS_ONLINE_PATH.'config.php') . '"> 
    128                         <img class="button" src="' . WHOIS_ONLINE_PATH . 'icons/Whois_tuner.gif" alt="Whois Online configuration" title="Whois Online configuration" /></a>'; 
    129         if ($conf_whois['Add to Plugins menu']) array_push($menu, array( 
    130                                 'NAME' => 'Whois Online', 
    131                                 'URL' => get_admin_plugin_menu_link(WHOIS_ONLINE_PATH.'config.php'), 
    132                         )); 
    133         return $menu; 
    134 } 
    135  
    136 // Template function 
    137 function Whois_most($text, $count, $when, $format) { 
    138  return sprintf(l10n($text),$count,date(l10n($format),$when)); 
    13943} 
    14044 
     
    14751  VALUES ('Whois Online','". $conf['Whois Online'] ."','Whois Online configuration');"); 
    14852        return; 
    149 } 
    150  
    151 function whois_country($trace, $bypass = false) { 
    152   if (!isset($trace['country'])) { 
    153                         pwg_query('ALTER TABLE ' . WHOIS_ONLINE_TABLE . ' ADD `country` VARCHAR( 254 ) NOT NULL AFTER `lang` ;'); 
    154                         $trace['country']=''; 
    155         } 
    156         $c = array(); 
    157         if ($trace['country']!='') $c = @unserialize(htmlspecialchars_decode($trace['country'])); 
    158         if (isset($c['Code']) and $c['Code']!='' and $c['Code']!='__') return $c;  
    159         if ($bypass and isset($c['Code'])) return $c; 
    160     $result = pwg_get_contents ('http://api.hostip.info/get_html.php?ip=' . $trace['IP'], 'r'); 
    161         if ( $result !== false ) {  
    162                 $tokens = preg_split("/[:]+/", $result); 
    163                 $c = array ('Name' => $tokens[1], 'City' => substr($tokens[3],0,-3)); 
    164                 if (strpos ($c['Name'], '?') === FALSE) { 
    165                         $c['Code'] = substr($c['Name'],-8,2); # " (Private Address) (XX) City" 
    166                         $c['Name'] = ucwords ( strtolower( substr($c['Name'],0,-5))); 
    167                 } 
    168                 else $c = Array('Code' => '__', 'Name' => l10n('Unknown country'), 'City' => 'N/A',); 
    169         } 
    170         if (stripos($c['Name'], 'Squid')!==false) $c = Array('Code' => '__', 'Name' => l10n('Unknown country'), 'City' => 'N/A',); 
    171         // else $c = Array('Code' => '__', 'Name' => l10n('Unknown country'), 'City' => 'N/A',); 
    172         if ($c['Code'] == 'Private Address') { 
    173                 $c['Name'] = l10n('Private Address'); 
    174                 $c['City'] = l10n('N/A'); 
    175                 $c['Code'] = '__'; 
    176         } 
    177         $new = htmlspecialchars(serialize($c),ENT_QUOTES,'UTF-8'); 
    178         if ($new == $trace['country']) return $c; 
    179         pwg_query('UPDATE ' . WHOIS_ONLINE_TABLE . '  
    180       SET `country` = \'' . $new . '\' 
    181     WHERE `session_id` = \'' . $trace['session_id'] . '\';'); 
    182   return $c; 
    183 } 
    184  
    185 function whois_flag($trace, &$step, $limit = 10) { 
    186   $flag = WHOIS_ONLINE_PATH . 'flags/' . $trace['Country']['Code'] . '.jpg'; 
    187         if (file_exists($flag) and $flag != '__' ) return $flag; 
    188         if ( $step > $limit ) return WHOIS_ONLINE_PATH . 'flags/__.jpg'; 
    189         $f = fopen  ('http://api.hostip.info/flag.php?ip=' . $trace['IP'], 'r'); 
    190         $result=''; 
    191         while ($l = fgets ($f, 1024)) $result .= $l; 
    192         fclose ($f); 
    193                 $f = fopen($flag,"w+"); 
    194         fputs($f,$result); 
    195         fclose($f); 
    196   return $flag; 
    19753} 
    19854 
     
    245101        } 
    246102        // Write or Rewrite the dedicated record 
     103        $ctry = '_' . strtoupper( substr(@$_SERVER["HTTP_ACCEPT_LANGUAGE"],6,2) ); 
    247104        $query = 'REPLACE INTO ' . WHOIS_ONLINE_TABLE . ' (`IP`, `hidden_IP`, `session_id`,`user_id`,`username`,`lang`, `user_agent`, 
    248105        `any_previous`, `same_previous`, `permanent`,`last_access`,`last_elm_ids`, `last_cat_ids`, `last_tag_ids`, `last_sch_ids`, 
     
    251108                . $dedicated['hidden_IP'] .'\', \''. $dedicated['session_id'] .'\', \'' 
    252109                . $dedicated['user_id'] .'\', \''. $dedicated['username'] .'\', \'' 
    253                 . substr($lang_info['code'],0,2) .'\', \'' 
     110                . substr($lang_info['code'],0,2). $ctry .'\', \'' 
    254111                . $dedicated['user_agent'] .'\', \'' 
    255112                . $dedicated['any_previous'] .'\', \'' 
     
    297154} 
    298155 
    299 /* 
    300   returns (mixed): (string) 'bot agent name'  || (bool) false 
    301   @param (string) HTTP_USER_AGENT 
    302 */ 
    303 function is_a_bot($agent = '')  
    304 { 
    305   global $conf; 
    306         if ($agent == '') $agent = $_SERVER['HTTP_USER_AGENT']; 
    307         $botlist = array('Teoma', 'alexa', 'froogle', 'Gigabot', 'inktomi', 
    308         'looksmart', 'URL_Spider_SQL', 'Firefly', 'NationalDirectory',  
    309         'Ask Jeeves', 'TECNOSEEK', 'InfoSeek', 'WebFindBot', 'girafabot', 
    310         'crawler', 'www.galaxy.com', 'Googlebot', 'Scooter', 'Slurp', 
    311         'msnbot', 'appie', 'FAST', 'WebBug', 'Spade', 'ZyBorg', 'rabaz', 
    312         'Baiduspider', 'Feedfetcher-Google', 'TechnoratiSnoop', 'Rankivabot', 
    313         'Mediapartners-Google', 'Sogou web spider', 'WebAlta Crawler'); 
    314   if (isset($conf['search_agents'])) 
    315           $botlist = array_merge( $botlist, array_diff( $conf['search_agents'], $botlist ) ); 
    316   foreach($botlist as $bot) { 
    317     if (stripos($agent, $bot)!==false) return $bot;  
    318   } 
    319   return false; 
    320 }  
     156// Add admin links 
     157function whois_add_icon($menu) { 
     158        global $conf_whois, $lang; 
     159        if ($conf_whois['Add icon to History']) 
     160                $lang['History'] .= '</a> <a class="external" href="' . get_admin_plugin_menu_link(WHOIS_ONLINE_PATH.'config.php') . '"> 
     161                        <img class="button" src="' . WHOIS_ONLINE_PATH . 'icons/Whois_tuner.gif" alt="Whois Online configuration" title="Whois Online configuration" /></a>'; 
     162        if ($conf_whois['Add to Plugins menu']) array_push($menu, array( 
     163                                'NAME' => 'Whois Online', 
     164                                'URL' => get_admin_plugin_menu_link(WHOIS_ONLINE_PATH.'config.php'), 
     165                        )); 
     166        return $menu; 
     167} 
     168 
    321169?> 
  • extensions/whois_online/main.inc.php

    r6172 r6193  
    2323/* 
    2424Plugin Name: Whois online 
    25 Version: 2.0.n 
     25Version: 2.1.a 
    2626Description: Who is online? 
    2727Plugin URI: http://fr.piwigo.org/ext/extension_view.php?eid=279 
     
    2929Author URI: http://www.vdigital.org 
    3030*/ 
    31 define('WHOIS_ONLINE_VER', '2.0.n');  
     31define('WHOIS_ONLINE_VER', '2.1.a');  
    3232global $prefixeTable, $conf; 
    3333// $conf['debug_l10n'] = true; 
  • extensions/whois_online/maintain.inc.php

    r5954 r6193  
    3535"; 
    3636        $result = pwg_query($query); 
     37        pwg_query('ALTER TABLE '. WHOIS_ONLINE_TABLE .' CHANGE `lang` `lang` CHAR( 5 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT \'en\''); 
    3738        if (!isset($conf['Whois Online'])) { 
    3839                $conf['Whois Online'] = serialize(Array()); 
  • extensions/whois_online/online.php

    r5954 r6193  
    7070        // Step 2 - Assume a new comer 
    7171        if ( !isset($visit) ) { 
     72                $ctry = '_' . strtoupper( substr(@$_SERVER["HTTP_ACCEPT_LANGUAGE"],6,2) ); 
    7273                $visit = Array(  
    7374                        'IP' => $_SERVER['REMOTE_ADDR'], // First known IP (Is that one true?) 
     
    7778                        'username' => $user['username'], 
    7879                        'delay' => 0, 
    79                         'lang' => substr($lang_info['code'],0,2), 
     80                        'lang' => substr($lang_info['code'],0,2) . $ctry, 
    8081                        'permanent' => 'false', // False: delete after 72 Hours / True: delete after 90 days 
    8182                        'last_access' => time(), // Last access by this user 
  • extensions/whois_online/report.tpl

    r3695 r6193  
     1{known_script id="jquery.cluetip" src=$ROOT_URL|@cat:"plugins/whois_online/jquery/cluetip/jquery.cluetip.min.js" } 
    12<table class="table2" id="detailedStats"> 
    23<thead>  
     
    3031                                <td class=&#34;right&#34;><b><i>{'on pages'|@translate}</i></b></td><td>{$detail.pag_hits}</td></tr> 
    3132                        </table>">{$detail.username}</a>  
    32                                 <a href="./admin.php?page=profile&amp;user_id={$detail.user_id}" title="{'Profile'|@translate}" alt="{'Profile'|@translate}"  
     33                                <a href="./admin.php?page=profile&amp;user_id={$detail.user_id}" title="{'Profile'|@translate}"  
    3334                                onclick="window.open(this.href); return false;">[{$detail.lang}]</a> 
    3435        </td> 
    3536        <td> 
    3637                {if ($detail.user_id == '1')}<a class="external" href="{'http:hostip'|@translate}" title="{':hostip:title'|@translate}"> 
    37                         <img src="{$detail.Flag}" border="0" alt="{$detail.IP} - {'language'|@translate}: {$detail.Language}" width="24" height="16"> 
     38                        <img src="{$detail.Flag}" alt="{$detail.IP} - {'language'|@translate}: {$detail.Language}" width="24" height="16"> 
    3839                </a> 
    3940                {else}<a class="external" href="{'http:geoiptool'|@translate}{$detail.IP}" title="{':geoiptool:title'|@translate}"> 
    40                         <img src="{$detail.Flag}" border="0" alt="{$detail.IP} - {'language'|@translate}: {$detail.Language}" width="24" height="16"> 
     41                        <img src="{$detail.Flag}" alt="{$detail.IP} - {'language'|@translate}: {$detail.Language}" width="24" height="16"> 
    4142                </a> 
    4243                {/if} 
     
    8384</tr> 
    8485{/foreach} 
    85 <tbody>  
     86</tbody>  
    8687</table> 
    87 <p><a class="external" href="{'http:hostip'|@translate}" title="{':hostip:title'|@translate}" 
    88  alt="">hostip.info</a>{': provides newcomers\' localization and possibly new country flags, thanks to them.'|@translate}</p> 
    89 <p><a class="external" href="{'http:geoiptool'|@translate}" title="{':geoiptool:title'|@translate}" 
    90  alt="">geoiptool.com</a>{': provides IP geolocalization on request (link on flag). Useful for unknown countries.'|@translate}</p> 
     88<p><a class="external" href="{'http:hostip'|@translate}" title="{':hostip:title'|@translate}">hostip.info</a>{ 
     89 ': provides newcomers\' localization and possibly new country flags, thanks to them.'|@translate}</p> 
     90<p><a class="external" href="{'http:geoiptool'|@translate}" title="{':geoiptool:title'|@translate}">geoiptool.com</a>{ 
     91 ': provides IP geolocalization on request (link on flag). Useful for unknown countries.'|@translate}</p> 
    9192{literal} 
    9293<script type="text/javascript">// <![CDATA[ 
Note: See TracChangeset for help on using the changeset viewer.