209 lines
6.6 KiB
PHP
209 lines
6.6 KiB
PHP
<?php
|
|
/*
|
|
* Gallery - a web based photo album viewer and editor
|
|
* Copyright (C) 2000-2007 Bharat Mediratta
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or (at
|
|
* your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
/**
|
|
* Generates the Windows registry file for web publishing.
|
|
* This is an immediate view which generates the registry file for Windows. The information in
|
|
* the registry file informs Windows that there is a web service which supports uploading media.
|
|
*
|
|
* @package PublishXp
|
|
* @author Timothy Webb <tiwebb@cisco.com>
|
|
* @version $Revision: 16117 $
|
|
*/
|
|
class DownloadRegistryFileView extends GalleryView {
|
|
|
|
/**
|
|
* @see GalleryView::isImmediate
|
|
*/
|
|
function isImmediate() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Renders the Windows registry file.
|
|
* Generates the registry file to be downloaded and installed on Windows systems.
|
|
* The gallery name and hostname are used as part of the web service for publishing.
|
|
*
|
|
* @see GalleryView::renderImmediate
|
|
*/
|
|
function renderImmediate($status, $error) {
|
|
global $gallery;
|
|
|
|
/* Get the domain name */
|
|
$urlGenerator =& $gallery->getUrlGenerator();
|
|
$domain = $urlGenerator->getHostName();
|
|
|
|
/* Get the name of the gallery */
|
|
list ($ret, $rootId) = GalleryCoreApi::getPluginParameter('module', 'core', 'id.rootAlbum');
|
|
if ($ret) {
|
|
return $ret;
|
|
}
|
|
list ($ret, $root) = GalleryCoreApi::loadEntitiesById($rootId);
|
|
if ($ret) {
|
|
return $ret;
|
|
}
|
|
$title = $root->getTitle();
|
|
|
|
/* Setup the headers for the Registry file */
|
|
header("Cache-control: private");
|
|
header("Content-Type: application/octet-stream");
|
|
header("Content-Disposition: filename=install_registry.reg");
|
|
|
|
GalleryCoreApi::requireOnce('modules/core/classes/GalleryTemplate.class');
|
|
$template = new GalleryTemplate(dirname(__FILE__) . '/../..');
|
|
$template->setVariable('l10Domain', 'modules_publishxp');
|
|
|
|
$vistaVersion = GalleryUtilities::getRequestVariables('vistaVersion');
|
|
$DownloadRegistryFile['vistaVersion'] = !empty($vistaVersion);
|
|
$DownloadRegistryFile['title'] = $title;
|
|
$DownloadRegistryFile['domain'] = $domain;
|
|
$template->setVariable('DownloadRegistryFile', $DownloadRegistryFile);
|
|
list ($ret, $registryFileContents) =
|
|
$template->fetch('gallery:modules/publishxp/templates/DownloadRegistryFile.tpl');
|
|
if ($ret) {
|
|
return $ret;
|
|
}
|
|
|
|
/* Make sure we use Windows line endings */
|
|
$registryFileContents = preg_replace("/(?<!\r)\n/", "\r\n", $registryFileContents);
|
|
|
|
/* Convert the text to the Windows character set corresponding to the requested locale */
|
|
$clientWindowsLocale = $this->_getCharsetFromRequest();
|
|
print GalleryCoreApi::convertFromUtf8($registryFileContents, $clientWindowsLocale);
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Maps the locale of the HTTP request to a corresponding Windows character set.
|
|
* To detect the locale, the following precedence is applied:
|
|
* 1) Preferred locale of the user (check session locale) unless it is equal to the default
|
|
* 2) HTTP_ACCEPT_LANGUAGE header (what does the system of the client accept)
|
|
* 3) Gallery site-wide default locale (might not be supported by system of the client)
|
|
*
|
|
* @return string A Microsoft Windows character set
|
|
*/
|
|
function _getCharsetFromRequest() {
|
|
global $gallery;
|
|
|
|
list ($ret, $languageCode) = $gallery->getActiveLanguageCode();
|
|
if ($ret) {
|
|
if ($gallery->getDebug()) {
|
|
$gallery->debug('publishxp.DownloadRegistryFile, failed to get the session ' .
|
|
'language. Error: ' . $ret->getAsText());
|
|
}
|
|
$languageCode = '';
|
|
}
|
|
|
|
list ($ret, $defaultLanguageCode) =
|
|
GalleryCoreApi::getPluginParameter('module', 'core', 'default.language');
|
|
if ($ret) {
|
|
if ($gallery->getDebug()) {
|
|
$gallery->debug('publishxp.DownloadRegistryFile, failed to get the default ' .
|
|
'language. Error: ' . $ret->getAsText());
|
|
}
|
|
$defaultLanguageCode = 'en_US';
|
|
}
|
|
$languageCode = empty($languageCode) ? $defaultLanguageCode : $languageCode;
|
|
|
|
if ($languageCode == $defaultLanguageCode) {
|
|
$httpAcceptLanguage = GalleryUtilities::getServerVar('HTTP_ACCEPT_LANGUAGE');
|
|
if (!empty($httpAcceptLanguage)) {
|
|
$codes = explode(',', $httpAcceptLanguage);
|
|
$languageCode = $codes[0];
|
|
}
|
|
}
|
|
|
|
list ($language, $country) = preg_split('/[-_]/', $languageCode . '_');
|
|
|
|
/*
|
|
* Lookup table: language code to Windows Code Page. Source:
|
|
* http://www.microsoft.com/globaldev/reference/oslocversion.mspx
|
|
*/
|
|
switch (trim(GalleryUtilities::strToLower((string)$language))) {
|
|
case 'th': /* Thai */
|
|
$codePage = 874;
|
|
break;
|
|
case 'ja': /* Japanese */
|
|
$codePage = 932;
|
|
break;
|
|
case 'zh': /* Chinese */
|
|
$country = trim(GalleryUtilities::strToLower((string)$country));
|
|
if (in_array($country, array('hans', 'cn'))) {
|
|
$codePage = 936; /* Chinese (Simplified) */
|
|
} else {
|
|
$codePage = 950; /* Chinese (Traditional) */
|
|
}
|
|
break;
|
|
case 'ko': /* Korean */
|
|
$codePage = 949;
|
|
break;
|
|
case 'hr': /* Croatian */
|
|
case 'cs': /* Czech */
|
|
case 'hu': /* Hungarian */
|
|
case 'po': /* Polish */
|
|
case 'ro': /* Romanian */
|
|
case 'sk': /* Slovak */
|
|
case 'sl': /* Slovenian */
|
|
$codePage = 1250;
|
|
break;
|
|
case 'bg': /* Bulgarian */
|
|
case 'ru': /* Russian */
|
|
$codePage = 1251;
|
|
break;
|
|
case 'ca': /* Catalan */
|
|
case 'da': /* Danish */
|
|
case 'nl': /* Dutch */
|
|
case 'en': /* English */
|
|
case 'fi': /* Finnish */
|
|
case 'fr': /* French */
|
|
case 'de': /* German */
|
|
case 'it': /* Italian */
|
|
case 'no': /* Norwegian */
|
|
case 'pt': /* Portuguese */
|
|
case 'es': /* Spanish */
|
|
case 'sv': /* Swedish */
|
|
$codePage = 1252;
|
|
break;
|
|
case 'el': /* Greek */
|
|
$codePage = 1253;
|
|
break;
|
|
case 'tr': /* Turkish */
|
|
$codePage = 1254;
|
|
break;
|
|
case 'he': /* Hebrew */
|
|
case 'iw': /* Hebrew (legacy) */
|
|
$codePage = 1255;
|
|
break;
|
|
case 'ar': /* Arabic */
|
|
$codePage = 1256;
|
|
break;
|
|
case 'et': /* Estonian */
|
|
case 'lv': /* Latvian */
|
|
case 'lt': /* Lithuanian */
|
|
$codePage = 1257;
|
|
break;
|
|
default: $codePage = 1252;
|
|
}
|
|
return 'Windows-' . $codePage;
|
|
}
|
|
}
|
|
?>
|