public function chmod($path, $permissions, Log $logger) { $logger->add(str_repeat('-', 10)); $logger->add(sprintf('Changing permissions of "%s" to %o', $path, $permissions)); $logger->add('Using chmod()... ', true, true, false); $result = @chmod($path, $permissions); $logger->add($result ? 'OK' : 'FAILED', true, false, true); if (!$result) { $logger->add('Using FTP...'); $ftp_connection = Registry::get('ftp_connection'); if (is_resource($ftp_connection)) { $logger->add('Connection is already established'); $ftp_ready = true; } elseif (fn_ftp_connect($this->settings, true)) { $logger->add('Connection established'); $ftp_ready = true; } else { $logger->add('Failed to establish connection'); $ftp_ready = false; } if ($ftp_ready) { $result = fn_ftp_chmod_file($path, $permissions, false); $logger->add(sprintf('FTP chmod result: %s', $result ? 'OK' : 'FAILED')); } } $logger->add(str_repeat('-', 10)); return $result; }
/** * @param array $package_content_schema Package content schema * @param Log $logger Logger instance * @param string $package_content_path Package content path * * @return array First element is a list of languages to be installed, second element is a list languages failed to install */ public function installLanguages($package_content_schema, Log $logger, $package_content_path) { $failed_to_install = array(); $installed_languages = array_keys(Languages::getAvailable('A', true)); if (empty($package_content_schema['languages'])) { $logger->add('Installing languages using upgraded *.po files'); $po_pack_basepath = $this->config['dir']['lang_packs']; $lang_codes_to_install = $this->getLangCodesToReinstallFromContentSchema($package_content_schema); } else { $logger->add('Installing languages provided by package'); $po_pack_basepath = $package_content_path . 'languages/'; $lang_codes_to_install = (array) $package_content_schema['languages']; } $logger->add(sprintf('Already installed languages: %s', implode(', ', $installed_languages))); $logger->add(sprintf('Languages to be installed: %s', implode(', ', $lang_codes_to_install))); if (in_array(CART_LANGUAGE, $lang_codes_to_install)) { $fallback_lang_code = CART_LANGUAGE; } elseif (in_array('en', $lang_codes_to_install)) { $fallback_lang_code = 'en'; } else { $fallback_lang_code = null; } foreach ($installed_languages as $lang_code) { $logger->lineStart(sprintf('Installing "%s" language... ', $lang_code)); if (in_array($lang_code, $lang_codes_to_install)) { Output::display(__('install') . ': ' . $lang_code, '', false); if (false === Languages::installCrowdinPack($po_pack_basepath . $lang_code, array('install_newly_added' => true, 'validate_lang_code' => $lang_code, 'reinstall' => true))) { $logger->lineEnd('FAILED'); $failed_to_install[] = $lang_code; } else { $logger->lineEnd('OK'); } } elseif ($fallback_lang_code !== null) { if (false === Languages::installCrowdinPack($po_pack_basepath . $fallback_lang_code, array('reinstall' => true, 'force_lang_code' => $lang_code, 'install_newly_added' => true))) { $logger->lineEnd('FAILED'); $failed_to_install[] = $lang_code; } else { $logger->lineEnd('OK'); } } else { $logger->lineEnd('SKIPPED'); } } return array($lang_codes_to_install, $failed_to_install); }