Changeset 6193


Ignore:
Timestamp:
May 16, 2010, 3:45:47 PM (10 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.