Changeset 10098 for trunk/admin/include


Ignore:
Timestamp:
Apr 6, 2011, 11:43:46 AM (13 years ago)
Author:
patdenice
Message:

feature:2250
Incompatible plugins and obsolete plugins may not be activated.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/admin/include/plugins.class.php

    r8728 r10098  
    2727  var $db_plugins_by_id = array();
    2828  var $server_plugins = array();
     29  var $default_plugins = array('LocalFilesEditor', 'language_switch', 'c13y_upgrade', 'admin_multi_view');
    2930
    3031  /**
     
    186187          break;
    187188        }
     189        $query = '
     190DELETE FROM ' . PLUGINS_TABLE . ' WHERE id=\'' . $plugin_id . '\'';
     191        pwg_query($query);
    188192        if (!$this->deltree(PHPWG_PLUGINS_PATH . $plugin_id))
    189193        {
     
    284288  }
    285289
     290  // Retrieve PEM versions
     291  function get_versions_to_check($version=PHPWG_VERSION)
     292  {
     293    $versions_to_check = array();
     294    $url = PEM_URL . '/api/get_version_list.php?category=12&format=php';
     295    if (fetchRemote($url, $result) and $pem_versions = @unserialize($result))
     296    {
     297      if (!preg_match('/^\d+\.\d+\.\d+/', $version))
     298      {
     299        $version = $pem_versions[0]['name'];
     300      }
     301      $branch = substr($version, 0, strrpos($version, '.'));
     302      foreach ($pem_versions as $pem_version)
     303      {
     304        if (strpos($pem_version['name'], $branch) === 0)
     305        {
     306          $versions_to_check[] = $pem_version['id'];
     307        }
     308      }
     309    }
     310    return $versions_to_check;
     311  }
     312
    286313  /**
    287314   * Retrieve PEM server datas to $server_plugins
     
    291318    global $user;
    292319
     320    $versions_to_check = $this->get_versions_to_check();
     321    if (empty($versions_to_check))
     322    {
     323      return false;
     324    }
     325
     326    // Plugins to check
     327    $plugins_to_check = array();
     328    foreach($this->fs_plugins as $fs_plugin)
     329    {
     330      if (isset($fs_plugin['extension']))
     331      {
     332        $plugins_to_check[] = $fs_plugin['extension'];
     333      }
     334    }
     335
     336    // Retrieve PEM plugins infos
     337    $url = PEM_URL . '/api/get_revision_list.php';
    293338    $get_data = array(
    294339      'category_id' => 12,
    295340      'format' => 'php',
    296     );
    297 
    298     // Retrieve PEM versions
    299     $version = PHPWG_VERSION;
    300     $versions_to_check = array();
    301     $url = PEM_URL . '/api/get_version_list.php';
    302     if (fetchRemote($url, $result, $get_data) and $pem_versions = @unserialize($result))
    303     {
    304       if (!preg_match('/^\d+\.\d+\.\d+/', $version))
    305       {
    306         $version = $pem_versions[0]['name'];
    307       }
    308       $branch = substr($version, 0, strrpos($version, '.'));
    309       foreach ($pem_versions as $pem_version)
    310       {
    311         if (strpos($pem_version['name'], $branch) === 0)
    312         {
    313           $versions_to_check[] = $pem_version['id'];
    314         }
    315       }
    316     }
    317     if (empty($versions_to_check))
    318     {
    319       return false;
    320     }
    321 
    322     // Plugins to check
    323     $plugins_to_check = array();
    324     foreach($this->fs_plugins as $fs_plugin)
    325     {
    326       if (isset($fs_plugin['extension']))
    327       {
    328         $plugins_to_check[] = $fs_plugin['extension'];
    329       }
    330     }
    331 
    332     // Retrieve PEM plugins infos
    333     $url = PEM_URL . '/api/get_revision_list.php';
    334     $get_data = array_merge($get_data, array(
    335341      'last_revision_only' => 'true',
    336342      'version' => implode(',', $versions_to_check),
    337343      'lang' => substr($user['language'], 0, 2),
    338344      'get_nb_downloads' => 'true',
    339       )
    340345    );
    341346
     
    363368      }
    364369      return true;
     370    }
     371    return false;
     372  }
     373
     374  function get_incompatible_plugins()
     375  {
     376    if (isset($_SESSION['incompatible_plugins']))
     377    {
     378      return $_SESSION['incompatible_plugins'];
     379    }
     380
     381    $_SESSION['incompatible_plugins'] = array();
     382
     383    $versions_to_check = $this->get_versions_to_check();
     384    if (empty($versions_to_check))
     385    {
     386      return false;
     387    }
     388
     389    // Plugins to check
     390    $plugins_to_check = array();
     391    foreach($this->fs_plugins as $fs_plugin)
     392    {
     393      if (isset($fs_plugin['extension']))
     394      {
     395        $plugins_to_check[] = $fs_plugin['extension'];
     396      }
     397    }
     398
     399    // Retrieve PEM plugins infos
     400    $url = PEM_URL . '/api/get_revision_list.php';
     401    $get_data = array(
     402      'category_id' => 12,
     403      'format' => 'php',
     404      'version' => implode(',', $versions_to_check),
     405      'extension_include' => implode(',', $plugins_to_check),
     406    );
     407
     408    if (fetchRemote($url, $result, $get_data))
     409    {
     410      $pem_plugins = @unserialize($result);
     411      if (!is_array($pem_plugins))
     412      {
     413        return false;
     414      }
     415
     416      $server_plugins = array();
     417      foreach ($pem_plugins as $plugin)
     418      {
     419        if (!isset($server_plugins[$plugin['extension_id']]))
     420        {
     421          $server_plugins[$plugin['extension_id']] = array();
     422        }
     423        array_push($server_plugins[$plugin['extension_id']], $plugin['revision_name']);
     424      }
     425
     426      foreach ($this->fs_plugins as $plugin_id => $fs_plugin)
     427      {
     428        if (isset($fs_plugin['extension'])
     429          and !in_array($plugin_id, $this->default_plugins)
     430          and $fs_plugin['version'] != 'auto'
     431          and (!isset($server_plugins[$fs_plugin['extension']]) or !in_array($fs_plugin['version'], $server_plugins[$fs_plugin['extension']])))
     432        {
     433          $_SESSION['incompatible_plugins'][$plugin_id] = $fs_plugin['version'];
     434        }
     435      }
     436      return $_SESSION['incompatible_plugins'];
    365437    }
    366438    return false;
     
    484556    return $status;
    485557  }
     558
     559  function get_merged_extensions($version=PHPWG_VERSION)
     560  {
     561    if (!isset($_SESSION['merged_extensions']))
     562    {
     563      $_SESSION['merged_extensions'] = array();
     564      if (fetchRemote(MERGED_EXTENSIONS_URL, $result))
     565      {
     566        $rows = explode("\n", $result);
     567        foreach ($rows as $row)
     568        {
     569          if (preg_match('/^(\d+\.\d+): *(.*)$/', $row, $match))
     570          {
     571            if (version_compare($version, $match[1], '>='))
     572            {
     573              $extensions = explode(',', trim($match[2]));
     574              $_SESSION['merged_extensions'] = array_merge($_SESSION['merged_extensions'], $extensions);
     575            }
     576          }
     577        }
     578      }
     579    }
     580    return $_SESSION['merged_extensions'];
     581  }
    486582 
    487583  /**
Note: See TracChangeset for help on using the changeset viewer.