Automatischer Update der Klasse zur Erkennung von mobilen Geräten

Thema wurde von Avenger, 10. Dezember 2014 erstellt.

  1. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Zur Erkennung von mobilen Geräten bedient sich Gambio der Opensource-Klasse "Mobile_Detect.php".

    Diese prüft anhand von vorgegebenen Modellnummern und Betriebssystemmnamen mit Hilfe des "User-Agent"-Strings, den die Browser an PHP übermitteln, ob das aktuelle Gerät, das den Shop aufruft, ein Smartphone oder Tablett ist.

    Da ja dauernd neue mobile Geräte auf den Markt kommen, müssen diese Erkennungsparameter immer aktuell sein, damit die Erkennung funktioniert.

    Die Opensource-Klasse "Mobile_Detect.php" wird weitestmöglich von einer Community aktuell gehalten.

    Um hier aktuell zu bleiben, habe ich ein kleines (updatesicheres) Modul entwickelt, das ein Mal pro Tag prüft, ob es eine neuere "Mobile_Detect.php"-Klasse gibt, als die derzeit vorhandene.

    Und diese aktualisiert, falls notwendig.

    Den Inhalt des beigefügten Archivs in die Shop-Root kopieren.

    Um die Funktion zu aktivieren, in "admin/includes/configure.php"

    PHP:
    define('USE_MOBILEDETECT_UPGRADE',true);
    einfügen.

    Wie immer gilt:

    • Anwendung auf das ausschließliche Risiko des Shopbetreibers.
    • Es gibt keinerlei Gewährleistung.
    • Erst in einem Testshop testen.
    • Cache leeren.
     

    Anhänge:

  2. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Hi,

    auf Linux-Servern dürfte das nur funktionieren, wenn der Ordner system/data mittels FTP-User 777-Rechte bekommt. Wenn ich mich jetzt nicht täusche, liegt ab der Shopversion 2.1 die Mobile_Detect.php nicht im system/data-Ordner.
     
  3. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Eine neue Version, die für v2.0, v2.1 und v2.2 gilt.

    Folgenden Code als

    PHP:
    user_classes\overloads\AdminApplicationTopExtenderComponent\pt_mobiledetect_upgrade_AdminApplicationTopExtender.inc.php
    abspeichern. (Eine Zeile, ohne Umbruch!)

    Verzeichnis "system/classes/mobile/" mit Recht 777 versehen (ab v2.1.x)

    Verzeichnis "system/data/" mit Recht 777 versehen (v2.0.x)

    In "admin/includes/configure.php" einfügen:

    PHP:
    define('USE_MOBILEDETECT_UPGRADE',true);
    PHP:
    <?php
    /* --------------------------------------------------------------
    pt_mobiledetect_upgrade_AdminApplicationTopExtender.inc.php 2014-12-10 Avenger

    Copyright (c) 2014 Avenger, entwicklung@powertemplate.de
    Check for updates of "Mobile_Detect.php" class
    This class is used to detect mobile devices based on headers and/or user agent strings

    Released under the GNU General Public License (Version 2)
    [http://www.gnu.org/licenses/gpl-2.0.html]
    --------------------------------------------------------------
    */

    class pt_mobiledetect_upgrade_AdminApplicationTopExtender extends pt_mobiledetect_upgrade_AdminApplicationTopExtender_parent
    {
        function 
    proceed()
        {
            
    parent::proceed();
        if (
    USE_MOBILEDETECT_UPGRADE===true && !$_SESSION['MOBILEDETECT_UPGRADE_CHECKED'])
        {
          
    $force_mobiledetect_upgrade=$_GET['force_mobiledetect_upgrade']=='true';
          
    //debugbreak();
          
    if ($force_mobiledetect_upgrade)
          {
            
    $check_for_update=true;
          }
          else
          {
            
    $update_date_today=date('Y-m-d');
            
    $mobiledetect_upgrade_date_text='MOBILEDETECT_DATE';
            
    $mobiledetect_upgrade_version_text='MOBILEDETECT_UPGRADE_VERSION';
            
    $mobiledetect_available=defined($mobiledetect_upgrade_date_text);
            if (
    $mobiledetect_available)
            {
              
    $today=time();
              
    $last_update_date=strtotime(@constant($mobiledetect_upgrade_date_text));
              
    $next_update_date=strtotime("+1 day",$last_update_date);
              
    $check_for_update=$today>=$next_update_date;
            }
            else
            {
              
    $check_for_update=true;
            }
          }
          if (
    $check_for_update)
          {
            
    $ctx stream_context_create(array(
              
    'http' => array(
                
    'timeout' => 5
                
    )
              )
            );
            
    $mobiledectect_class=file_get_contents('https://raw.githubusercontent.com/serbanghita/Mobile-Detect/master/Mobile_Detect.php',false,$ctx);
            if (
    $mobiledectect_class)
            {
              
    $mobiledectect_class=trim($mobiledectect_class);
              if (
    $mobiledectect_class)
              {
                
    $_SESSION['MOBILEDETECT_UPGRADE_CHECKED']=true;
                
    //Check version number of class
                
    $version_match=preg_match('/@version(.+)/',$mobiledectect_class,$matches);
                if (
    $version_match)
                {
                  
    $version=trim($matches[1]);
                  
    $mobiledetect_upgrade_version=@constant($mobiledetect_upgrade_version_text);
                  
    //Actual version > active version?
                  
    if ($version>$mobiledetect_upgrade_version)
                  {
                    
    $mobiledectect_class=str_replace('|272|','|',$mobiledectect_class); //Eliminate pattern, which detects Chrome-Version as smartphone.
                    
    $file=DIR_FS_CATALOG.'system/classes/mobile/Mobile_Detect.php';
                    if (!
    file_exists($file))
                    {
                      
    $file=DIR_FS_CATALOG.'system/data/Mobile_Detect.php';
                    }
                    if (
    is_writable($file))
                    {
                      
    $old_file=str_replace('.php','_bak.php',$file);
                      @
    unlink($old_file);
                      @
    rename($file,$old_file);
                      
    file_put_contents($file,$mobiledectect_class);
                    }
                    
    //Mark day as checked....
                    
    if ($mobiledetect_available)
                    {
                      
    $date_value='last_modified';
                      
    $sql_function='update';
                    }
                    else
                    {
                      
    $date_value='date_added';
                      
    $sql_function='insert';
                      
    $where='';
                    }
                    
    $configuration_key='configuration_key';
                    
    $update_keys=array($mobiledetect_upgrade_date_text,'MOBILEDETECT_UPGRADE_VERSION');
                    
    $update_data=array($update_date_today,$version);
                    foreach (
    $update_keys as $index=>$key)
                    {
                      
    $sql_array=array('configuration_value'=>$update_data[$index]);
                      if (
    $mobiledetect_available)
                      {
                        
    $where=$configuration_key."='$key'";
                      }
                      else
                      {
                        
    $sql_array[$configuration_key]=$key;
                      }
                      
    $sql_array=array_merge($sql_array, array($date_value=>'now()'));
                      
    $res=xtc_db_perform(TABLE_CONFIGURATION,$sql_array,$sql_function,$where);
                    }
                  }
                }
              }
            }
          }
        }
        }
    }