AutoMod Instalare?

Discuţii legate de instalarea şi funcţionarea unor MODificări vechi sau noi ale forumului phpBB 3.0.x.
Reguli forum
Aveti o problema si vreti sa primiti ajutor? Click aici ! Nu uitati si de regulamentul forumului !
Avatar utilizator
Old Larry
Utilizator înregistrat
Mesaje: 120
Membru din: 27-Noi-2011, 12:51:54
Versiune: 3.1.5
Ext: Nu
Server: UNIX/Linux
Nivel phpBB: Mediu
Nivel php: Puţin experimentat
Localitate: Bucuresti
Contact:

Re: AutoMod Instalare?

Mesaj de Old Larry »

bogdan scrie:Dezactivata.
Am dezactivat-o si mi-a aparut urmatorul mesaj de eroare:

Cod: Selectaţi tot

[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions_mods.php on line 96: Invalid argument supplied for foreach()
Avatar utilizator
bogdan
AdministratorAdministrator
Mesaje: 10888
Membru din: 18-Oct-2002, 13:14:27
Versiune: 3.0.11
Ext: Da
Server: UNIX/Linux
Nivel phpBB: Experimentat
Nivel php: Mediu
Localitate: Bucuresti
Contact:

Re: AutoMod Instalare?

Mesaj de bogdan »

Posibil sa fie problema doar la ultima versiune AutoMOD. Vad ca s-a mai sesizat cineva: https://www.phpbb.com/customise/db/offi ... g-t_106045

Eventual scrie pe forumul de suport al MOD-ului.
Avatar utilizator
Old Larry
Utilizator înregistrat
Mesaje: 120
Membru din: 27-Noi-2011, 12:51:54
Versiune: 3.1.5
Ext: Nu
Server: UNIX/Linux
Nivel phpBB: Mediu
Nivel php: Puţin experimentat
Localitate: Bucuresti
Contact:

Re: AutoMod Instalare?

Mesaj de Old Larry »

bogdan scrie:Posibil sa fie problema doar la ultima versiune AutoMOD. Vad ca s-a mai sesizat cineva: https://www.phpbb.com/customise/db/offi ... g-t_106045

Eventual scrie pe forumul de suport al MOD-ului.
Am fost la linkul pus de tine, am facut si un ticket, sa vedem cand or sa dea un raspuns. :roll:
https://www.phpbb.com/bugs/supportteamtools/63451
Partea proasta e ca nu listeaza si versiunea mai veche automod, ei dau doar ultima versiune in download. :shock:
Imi poate da cineva un link spre versiunea precedenta acesteia, in care sa nu apara eroarea de care vorbim aici ?
Avatar utilizator
Old Larry
Utilizator înregistrat
Mesaje: 120
Membru din: 27-Noi-2011, 12:51:54
Versiune: 3.1.5
Ext: Nu
Server: UNIX/Linux
Nivel phpBB: Mediu
Nivel php: Puţin experimentat
Localitate: Bucuresti
Contact:

Re: AutoMod Instalare?

Mesaj de Old Larry »

Vad ca inca n-au raspuns cei de la phpbb.com :?
Poate ma puteti ajuta voi... iata fila cu pricina ("[ROOT]/includes/functions_mods.php") :

Cod: Selectaţi tot

<?php
/**
*
* @package automod
* @version $Id$
* @copyright (c) 2008 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
   exit;
}

global $table_prefix;
define('MODS_TABLE', $table_prefix . 'mods');

define('WRITE_DIRECT', 1);
define('WRITE_FTP', 2);
define('WRITE_MANUAL', 3);

function test_ftp_connection($method, &$test_ftp_connection, &$test_connection)
{
   global $phpbb_root_path, $phpEx;

   $transfer = new $method(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', ''));

   $test_connection = $transfer->open_session();

   // Make sure that the directory is correct by checking for the existence of common.php
   if ($test_connection === true)
   {
      // Check for common.php file
      if (!$transfer->file_exists($phpbb_root_path, 'common.' . $phpEx))
      {
         $test_connection = 'ERR_WRONG_PATH_TO_PHPBB';
      }
   }

   $transfer->close_session();

   // Make sure the login details are correct before continuing
   if ($test_connection !== true)
   {
      $test_ftp_connection = true;
   }

   return;
}

/**
* Helper function
* Runs basename() on $path, then trims the extension from it
* @param string $path - path to be basenamed
*/
function core_basename($path)
{
   $path = basename($path);
   $path = substr($path, 0, strrpos($path, '.'));

   $parts = explode('-', $path);
   return end($parts);
}

/**
* Helper function for matching languages
* This is a fairly dumb function because it ignores dialects.  But I have
* not seen any MODs that specify more than one dialect of the same language
* @param string $user_language - ISO language code of the current user
* @param string $xml_language - ISO language code of the MODX tag
* @return bool Whether or not this is a match
*/
function match_language($user_language, $xml_language)
{
   return strtolower(substr($user_language, 0, 2)) == strtolower(substr($xml_language, 0, 2));
}

/**
* Grab MOD titles
*
* @param $header - variable holding all relevant tag information
* @return array(language iso => MOD name)
*/
function get_title($header)
{
   if (is_string($header['TITLE']))
   {
      return($header['TITLE']);
   }

   $return = array();
   foreach ($header['TITLE'] as $row)
   {
      if (!is_array($row))
      {
         continue;
      }

      $return[$row['attrs']['LANG']] = trim($row['data']);
   }

   return($return);
}

/**
 * Get localized MOD title or English title
 *
 * @param $titles, string or a serialized array containing the MOD name(s)
 * @param $lang, string language ISO.
 * @return string with MOD name in users selected language or English.
 */
function localize_title($title, $lang = 'en')
{
   $name_ary = array();

   if (!is_array($title))
   {
      if (($name_ary = @unserialize($title)) === false)
      {
         // Before AutoMOD 1.0.1 the title was a string with only the MOD name.
         return($title);
      }
   }
   else
   {
      $name_ary = $title;
   }

   // If we get here the MOD is installed with AutoMOD 1.0.1+
   // And the stored title is a serialized array.
   if (!empty($name_ary[$lang]))
   {
      return($name_ary[$lang]);
   }
   else if (!empty($name_ary['en']))
   {
      // Default to English if the selected language is not found.
      return($name_ary['en']);
   }

   // Something went wrong.
   // We have a array that neither contain the selected language nor English.
   // Return the first array element.
   return(array_shift($name_ary));
}

/**
* Easy method to grab localisable tags from the XML array
* @param $header - variable holding all relevant tag information
* @param $tagname - tag name to fetch
* @param $index - Index number to pull.  Not required.
* @return $output - Localised contents of the tag in question
*/
function localise_tags($header, $tagname, $index = false)
{
   global $user;

   $output = '';

   if (isset($header[$tagname]) && is_array($header[$tagname]))
   {
      foreach ($header[$tagname] as $i => $void)
      {
         // Ugly.
         if ($index !== false && $index != $i)
         {
            continue;
         }

         if (!isset($header[$tagname][$i]['attrs']['LANG']))
         {
            // avoid notice...although, if we get here, MODX is invalid.
            continue;
         }

         if (match_language($user->data['user_lang'], $header[$tagname][$i]['attrs']['LANG']))
         {
            $output = isset($header[$tagname][$i]['data']) ? htmlspecialchars(trim($header[$tagname][$i]['data'])) : '';
         }
         else if (match_language('en', $header[$tagname][$i]['attrs']['LANG']))
         {
            $output = isset($header[$tagname][$i]['data']) ? htmlspecialchars(trim($header[$tagname][$i]['data'])) : '';
         }
      }

      // If there was no language match, put something out there
      // This is probably fairly common for non-English users of the MODs Manager
      if (!$output)
      {
         $output = isset($header[$tagname][0]['data']) ? htmlspecialchars(trim($header[$tagname][0]['data'])) : '';
      }
   }

   if (!$output)
   {
      // Should never happen.  If it does, either the MOD is not valid MODX
      // or the tag being localised is optional
      $output = isset($user->lang['UNKNOWN_MOD_' . $tagname]) ? $user->lang['UNKNOWN_MOD_' . $tagname] : 'UNKNOWN_MOD_' .$tagname;
   }

   return $output;
}

/**
* List files matching specified PCRE pattern.
*
* @access public
* @param string Relative or absolute path to the directory to be scanned.
* @param string Search pattern (perl compatible regular expression).
* @param integer Number of subdirectory levels to scan (set to 1 to scan only current).
* @param boolean List sub-directories only instead of files
* @param integer This one is used internally to control recursion level.
* @return array List of all files found matching the specified pattern.
*/
function find_files($directory, $pattern, $max_levels = 20, $subdirs_only = false, $_current_level = 1)
{
   if ($_current_level <= 1)
   {
      if (strpos($directory, '\\') !== false)
      {
         $directory = str_replace('\\', '/', $directory);
      }
      if (empty($directory))
      {
         $directory = './';
      }
      else if (substr($directory, -1) != '/')
      {
         $directory .= '/';
      }
   }

   $files = array();
   $subdir = array();
   if (is_dir($directory))
   {
      $handle = @opendir($directory);
      while (($file = @readdir($handle)) !== false)
      {
         if ($file == '.' || $file == '..')
         {
            continue;
         }

         $fullname = $directory . $file;

         if (is_dir($fullname))
         {
            if ($_current_level < $max_levels)
            {
               if ($subdirs_only)
               {
                  $subdir[] = $fullname . '/';
                  $subdir = array_merge($subdir, find_files($fullname . '/', $pattern, $max_levels, true, $_current_level + 1));
               }
               else
               {
                  $subdir = array_merge($subdir, find_files($fullname . '/', $pattern, $max_levels, false, $_current_level + 1));
               }
            }
         }
         else
         {
            if (!$subdirs_only && preg_match('/^' . $pattern . '$/i', $file))
            {
               $files[] = $fullname;
            }
         }
      }
      @closedir($handle);
      sort($files);
   }

   return array_merge($files, $subdir);
}

/**
* This function is common to all editor classes, so it is pulled out from them
* @param $filename - The filename to update
* @param $template_id - The template set to update
* @param $file_contents - The data to write
* @param $install_time - Essentially the current time
* @return bool true
*/
function update_database_template($filename, $template_id, $file_contents, $install_time)
{
   global $db;

   // grab filename
   preg_match('#styles/[a-z0-9_]+/template/([a-z0-9_]+.html)#i', $filename, $match);

   if (empty($match[1]))
   {
      return false;
   }

   $sql = 'UPDATE ' . STYLES_TEMPLATE_DATA_TABLE . "
      SET template_data = '" . $db->sql_escape($file_contents) . "', template_mtime = " . (int) $install_time . '
      WHERE template_id = ' . (int) $template_id . "
      AND template_filename = '" . $db->sql_escape($match[1]) . "'";
   $db->sql_query($sql);

   // if something failed, sql_query will error out
   return true;
}

function determine_write_method($preview = false)
{
   global $phpbb_root_path, $config;

   // to be truly correct, we should scan all files ...
   if (($config['write_method'] == WRITE_DIRECT && is_writable($phpbb_root_path)) || $preview)
   {
      $write_method = 'direct';
   }
   // FTP Method is now auto-detected
   else if ($config['write_method'] == WRITE_FTP)
   {
      $write_method = 'ftp';
   }
   // or zip or tarballs
   else if ($config['compress_method'])
   {
      $write_method = 'manual';
   }
   else
   {
      // We cannot go on without a write method set up.
      trigger_error('MODS_SETUP_INCOMPLETE', E_USER_ERROR);
   }

   return $write_method;
}

function handle_ftp_details($method, $test_ftp_connection, $test_connection)
{
   global $config, $template, $user;

   $s_hidden_fields = build_hidden_fields(array('method' => $method));

   if (!class_exists($method))
   {
      trigger_error('Method does not exist.', E_USER_ERROR);
   }

   $requested_data = call_user_func(array($method, 'data'));
   foreach ($requested_data as $data => $default)
   {
      $default = (!empty($config['ftp_' . $data])) ? $config['ftp_' . $data] : $default;

      $template->assign_block_vars('data', array(
         'DATA'      => $data,
         'NAME'      => $user->lang[strtoupper($method . '_' . $data)],
         'EXPLAIN'   => $user->lang[strtoupper($method . '_' . $data) . '_EXPLAIN'],
         'DEFAULT'   => (!empty($_REQUEST[$data])) ? request_var($data, '') : $default
      ));
   }

   $template->assign_vars(array(
      'S_CONNECTION_SUCCESS'      => ($test_ftp_connection && $test_connection === true) ? true : false,
      'S_CONNECTION_FAILED'      => ($test_ftp_connection && $test_connection !== true) ? true : false,
      'ERROR_MSG'               => ($test_ftp_connection && $test_connection !== true) ? $user->lang[$test_connection] : '',

      'S_FTP_UPLOAD'         => true,
      'UPLOAD_METHOD'         => $method,
      'S_HIDDEN_FIELDS_FTP'   => $s_hidden_fields,
   ));
}

/**
* Gets FTP information if we need it
*
* @param   $preview   bool   true if in pre_(install|uninstall), false otherwise
* @return            array   and array of connection info (currently only ftp)
*/
function get_connection_info($preview = false)
{
   global $config, $ftp_method, $test_ftp_connection, $test_connection;

   $conn_info_ary = array();

   // using $config instead of $editor because write_method is forced to direct
   // when in preview mode
   if ($config['write_method'] == WRITE_FTP)
   {
      if (!$preview && isset($_POST['password']))
      {
         $conn_info_ary['method'] = $config['ftp_method'];

         if (empty($config['ftp_method']))
         {
            trigger_error('FTP_METHOD_ERROR');
         }

         $requested_data = call_user_func(array($config['ftp_method'], 'data'));

         foreach ($requested_data as $data => $default)
         {
            if ($data == 'password')
            {
               $config['ftp_password'] = request_var('password', '');
            }
            $default = (!empty($config['ftp_' . $data])) ? $config['ftp_' . $data] : $default;

            $conn_info_ary[$data] = $default;
         }
      }

      handle_ftp_details($ftp_method, $test_ftp_connection, $test_connection);
   }

   return $conn_info_ary;
}

/**
 * Recursively delete a directory
 *
 * @param   string   $path (required)   Directory path to recursively delete
 * @author   jasmineaura
 */
function recursive_unlink($path)
{
   global $phpbb_root_path, $phpEx, $user;

   // Insurance - this should never really happen
   if ($path == $phpbb_root_path || is_file("$path/common.$phpEx"))
   {
      return false;
   }

   // Get all of the files in the source directory
   $files = find_files($path, '.*');
   // Get all of the sub-directories in the source directory
   $subdirs = find_files($path, '.*', 20, true);

   // Delete all the files
   foreach ($files as $file)
   {
      if (!unlink($file))
      {
         return sprintf($user->lang['MODS_RMFILE_FAILURE'], $file);
      }
   }

   // Delete all the sub-directories, in _reverse_ order (array_pop)
   for ($i=0, $cnt = count($subdirs); $i < $cnt; $i++)
   {
      $subdir = array_pop($subdirs);
      if (!rmdir($subdir))
      {
         return sprintf($user->lang['MODS_RMDIR_FAILURE'], $subdir);
      }
   }

   // Finally, delete the directory itself
   if (!rmdir($path))
   {
      return sprintf($user->lang['MODS_RMDIR_FAILURE'], $path);
   }

   return true;
}

/**
* PHP 5 Wrapper - simulate scandir, but only those features that we actually need
* NB: The third parameter of PHP5 native scandir is _not_ present in this wrapper
*/
if (!function_exists('scandir'))
{
   function scandir($directory, $sorting_order = false)
   {
      $files = array();

      $dp = opendir($directory);
      while (($filename = readdir($dp)) !== false)
      {
         $files[] = $filename;
      }

      if ($sorting_order)
      {
         rsort($files);
      }
      else
      {
         sort($files);
      }

      return $files;
   }
}

/**
* Return the number of files (optionally including sub-directories) in a directory, optionally recursively.
*
* @param   $dir      string (required)   - The directory you want to count files in
* @param   $subdirs   boolean (optional)   - Count subdirectories instead of files
* @param   $recurse   boolean (optional)   - Recursive count into sub-directories
* @param   $count      int (optional)      - Initial value of file (or subdirs) count
* @return            int               - Count of files (or count of subdirectories)
* @author   jasmineaura
*/
function directory_num_files($dir, $subdirs = false, $recurse = false, $count = 0)
{
   if (is_dir($dir))
   {
      if($handle = opendir($dir))
      {
         while (($file = readdir($handle)) !== false)
         {
            if ($file == '.' || $file == '..')
            {
               continue;
            }
            else if (is_dir($dir."/".$file))
            {
               if ($subdirs)
               {
                  $count++;
               }
               else if ($recurse)
               {
                  $count = directory_num_files($dir."/".$file, $subdirs, $recurse, $count);
               }
            }
            else if (!$subdirs)
            {
               $count++;
            }
         }

         closedir($handle);
      }
   }

   return $count;
}

/**
* Check if a directory is empty.
*
* @param $dir, string - directory to check
* @return bool, true if directory is empty.
*/
function check_empty_dir($dir)
{
   if (!is_dir($dir) || !is_readable($dir))
   {
      return(false);
   }

   if(!$handle = opendir($dir))
   {
      return(false);
   }

   while (($file = readdir($handle)) !== false)
   {
      if ($file == '.' || $file == '..')
      {
         continue;
      }

      // If we get here the directory is not empty
      closedir($handle);
      return(false);
   }

   // The directory is empty
   closedir($handle);
   return(true);
}

?>
Mesajul de eroare spune ca ar fi o greseala la linia 96: Invalid argument supplied for foreach()
Multumesc anticipat!
Avatar utilizator
bogdan
AdministratorAdministrator
Mesaje: 10888
Membru din: 18-Oct-2002, 13:14:27
Versiune: 3.0.11
Ext: Da
Server: UNIX/Linux
Nivel phpBB: Experimentat
Nivel php: Mediu
Localitate: Bucuresti
Contact:

Re: AutoMod Instalare?

Mesaj de bogdan »

Eu vad ca ti-au raspuns:
A_Jelly_Doughnut scrie:This is a fault of one of the MODs you have uploaded ... AutoMOD is unable to parse it (apparenlty the author has not provided a <title> tag). This could be handled more elegantly, however.
Avatar utilizator
Old Larry
Utilizator înregistrat
Mesaje: 120
Membru din: 27-Noi-2011, 12:51:54
Versiune: 3.1.5
Ext: Nu
Server: UNIX/Linux
Nivel phpBB: Mediu
Nivel php: Puţin experimentat
Localitate: Bucuresti
Contact:

Re: AutoMod Instalare?

Mesaj de Old Larry »

Da, dar preferam sa-mi raspunda cu un cod refacut.
Raspunsul "the author has not provided a <title> tag" nu ma ajuta prea mult...
Închis

Înapoi la “3.0.x Suport pentru MODificări”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Bing [Bot] și 1 vizitator