예제 #1
0
 /**
  * @see	\wcf\form\IForm::save()
  */
 public function save()
 {
     AbstractForm::save();
     $editor = new LanguageEditor($this->language);
     $editor->update(array('countryCode' => mb_strtolower($this->countryCode), 'languageName' => $this->languageName, 'languageCode' => mb_strtolower($this->languageCode)));
     LanguageFactory::getInstance()->clearCache();
     $this->saved();
     // show success message
     WCF::getTPL()->assign('success', true);
 }
예제 #2
0
 /**
  * @see	\wcf\form\IForm::save()
  */
 public function save()
 {
     parent::save();
     // send headers
     header('Content-Type: text/xml; charset=UTF-8');
     header('Content-Disposition: attachment; filename="' . $this->language->languageCode . '.xml"');
     $this->language->export($this->selectedPackages, $this->exportCustomValues);
     exit;
 }
예제 #3
0
 /**
  * Loads category files.
  * 
  * @param	string		$category
  * @return	boolean
  */
 protected function loadCategory($category)
 {
     if (!LanguageFactory::getInstance()->isValidCategory($category)) {
         return false;
     }
     // search language file
     $filename = WCF_DIR . 'language/' . $this->languageID . '_' . $category . '.php';
     if (!@file_exists($filename)) {
         if ($this->editor === null) {
             $this->editor = new LanguageEditor($this);
         }
         // rebuild language file
         $languageCategory = LanguageFactory::getInstance()->getCategory($category);
         if ($languageCategory === null) {
             return false;
         }
         $this->editor->updateCategory($languageCategory);
     }
     // include language file
     @(include_once $filename);
     return true;
 }
 /**
  * @see	\wcf\form\IForm::save()
  */
 public function save()
 {
     parent::save();
     // save
     LanguageEditor::enableMultilingualism($this->enable == 1 ? $this->languageIDs : array());
     // clear cache
     LanguageCacheBuilder::getInstance()->reset();
     $this->saved();
     // show success message
     WCF::getTPL()->assign('success', true);
 }
예제 #5
0
 /**
  * Removes language cache and compiled templates.
  */
 public function deleteLanguageCache()
 {
     LanguageEditor::deleteLanguageFiles();
     foreach ($this->cache['languages'] as $language) {
         $languageEditor = new LanguageEditor($language);
         $languageEditor->deleteCompiledTemplates();
     }
 }
 /**
  * @see	wcf\system\package\plugin\IPackageInstallationPlugin::install()
  */
 public function install()
 {
     AbstractPackageInstallationPlugin::install();
     // get language files
     $languageFiles = array();
     $multipleFiles = false;
     $filename = $this->instruction['value'];
     if (strpos($filename, '*') !== false) {
         // wildcard syntax; import multiple files
         $multipleFiles = true;
         $files = $this->installation->getArchive()->getTar()->getContentList();
         $pattern = str_replace("\\*", ".*", preg_quote($filename));
         foreach ($files as $file) {
             if (preg_match('!' . $pattern . '!i', $file['filename'])) {
                 if (preg_match('~([a-z-]+)\\.xml$~i', $file['filename'], $match)) {
                     $languageFiles[$match[1]] = $file['filename'];
                 } else {
                     throw new SystemException("Can not determine language code of language file '" . $file['filename'] . "'");
                 }
             }
         }
     } else {
         if (!empty($this->instruction['attributes']['languagecode'])) {
             $languageCode = $this->instruction['attributes']['languagecode'];
         } else {
             if (!empty($this->instruction['attributes']['language'])) {
                 $languageCode = $this->instruction['attributes']['language'];
             } else {
                 if (preg_match('~([a-z-]+)\\.xml$~i', $filename, $match)) {
                     $languageCode = $match[1];
                 } else {
                     throw new SystemException("Can not determine language code of language file '" . $filename . "'");
                 }
             }
         }
         $languageFiles[$languageCode] = $filename;
     }
     // get installed languages
     $installedLanguages = array();
     $sql = "SELECT\t\t*\n\t\t\tFROM\t\twcf" . WCF_N . "_language\n\t\t\tORDER BY\tisDefault DESC";
     $statement = WCF::getDB()->prepareStatement($sql);
     $statement->execute();
     while ($row = $statement->fetchArray()) {
         $installedLanguages[] = $row;
     }
     // install language
     $addedLanguageIDArray = array();
     foreach ($installedLanguages as $installedLanguage) {
         $languageFile = null;
         if (isset($languageFiles[$installedLanguage['languageCode']])) {
             $languageFile = $languageFiles[$installedLanguage['languageCode']];
         } else {
             if ($multipleFiles) {
                 // use default language
                 if (isset($languageFiles[$installedLanguages[0]['languageCode']])) {
                     $languageFile = $languageFiles[$installedLanguages[0]['languageCode']];
                 } else {
                     if (isset($languageFiles['en'])) {
                         foreach ($installedLanguages as $installedLanguage2) {
                             if ($installedLanguage2['languageCode'] == 'en') {
                                 $languageFile = $languageFiles['en'];
                                 break;
                             }
                         }
                     }
                 }
                 // use any installed language
                 if ($languageFile === null) {
                     foreach ($installedLanguages as $installedLanguage2) {
                         if (isset($languageFiles[$installedLanguage2['languageCode']])) {
                             $languageFile = $languageFiles[$installedLanguage2['languageCode']];
                             break;
                         }
                     }
                 }
                 // use first delivered language
                 if ($languageFile === null) {
                     foreach ($languageFiles as $languageFile) {
                         break;
                     }
                 }
             }
         }
         // save language
         if ($languageFile !== null) {
             if ($xml = $this->readLanguage($languageFile)) {
                 // get language object
                 $language = LanguageFactory::getInstance()->getLanguageByCode($installedLanguage['languageCode']);
                 $languageEditor = new LanguageEditor($language);
                 // import xml
                 // don't update language files if package is an application
                 $languageEditor->updateFromXML($xml, $this->installation->getPackageID(), !$this->installation->getPackage()->isApplication);
                 // add language to this package
                 $addedLanguageIDArray[] = $language->languageID;
             }
         }
     }
     // save package to language
     if (count($addedLanguageIDArray)) {
         $condition = '';
         $statementParameters = array($this->installation->getPackageID());
         foreach ($addedLanguageIDArray as $languageID) {
             if (!empty($condition)) {
                 $condition .= ',';
             }
             $condition .= '?';
             $statementParameters[] = $languageID;
         }
         $statementParameters[] = $this->installation->getPackageID();
         $sql = "INSERT INTO\twcf" . WCF_N . "_language_to_package\n\t\t\t\t\t\t(languageID, packageID)\n\t\t\t\tSELECT\t\tlanguageID, ?\n\t\t\t\tFROM\t\twcf" . WCF_N . "_language\n\t\t\t\tWHERE\t\tlanguageID IN (" . $condition . ")\n\t\t\t\t\t\tAND languageID NOT IN (\n\t\t\t\t\t\t\tSELECT\tlanguageID\n\t\t\t\t\t\t\tFROM\twcf" . WCF_N . "_language_to_package\n\t\t\t\t\t\t\tWHERE\tpackageID = ?\n\t\t\t\t\t\t)";
         $statement = WCF::getDB()->prepareStatement($sql);
         $statement->execute($statementParameters);
     }
 }
예제 #7
0
 /**
  * @see	\wcf\form\IForm::save()
  */
 public function save()
 {
     parent::save();
     $this->language = LanguageEditor::create(array('countryCode' => mb_strtolower($this->countryCode), 'languageName' => $this->languageName, 'languageCode' => mb_strtolower($this->languageCode)));
     $languageEditor = new LanguageEditor($this->sourceLanguage);
     $languageEditor->copy($this->language);
     LanguageFactory::getInstance()->clearCache();
     LanguageFactory::getInstance()->deleteLanguageCache();
     $this->saved();
     // show success message
     WCF::getTPL()->assign('success', true);
 }
예제 #8
0
 /**
  * Searches in language items.
  * 
  * @param	string		$search		search query
  * @param	string		$replace
  * @param	integer		$languageID
  * @param	boolean		$useRegex
  * @param	boolean		$caseSensitive
  * @param	boolean		$searchVariableName
  * @return	array
  */
 public static function search($search, $replace = null, $languageID = null, $useRegex = 0, $searchVariableName = 0)
 {
     $results = array();
     // build condition
     $conditionBuilder = new PreparedStatementConditionBuilder();
     // search field
     $statementParameters = array();
     if ($searchVariableName) {
         $searchCondition = 'languageItem ';
     } else {
         $searchCondition = 'languageItemValue ';
     }
     // regex
     if ($useRegex) {
         $searchCondition .= "REGEXP ?";
         $statementParameters[] = $search;
     } else {
         $searchCondition .= "LIKE ?";
         $statementParameters[] = '%' . $search . '%';
     }
     if (!$searchVariableName) {
         $searchCondition .= ' OR languageCustomItemValue ';
         // regex
         if ($useRegex) {
             $searchCondition .= "REGEXP ?";
             $statementParameters[] = $search;
         } else {
             $searchCondition .= "LIKE ?";
             $statementParameters[] = '%' . $search . '%';
         }
     }
     $conditionBuilder->add($searchCondition, $statementParameters);
     if ($languageID !== null) {
         $conditionBuilder->add("languageID = ?", array($languageID));
     }
     // search
     $updatedItems = array();
     $sql = "SELECT\t\t*\n\t\t\tFROM\t\twcf" . WCF_N . "_language_item\n\t\t\t" . $conditionBuilder;
     $statement = WCF::getDB()->prepareStatement($sql);
     $statement->execute($conditionBuilder->getParameters());
     while ($row = $statement->fetchArray()) {
         if ($replace !== null) {
             // search and replace
             $matches = 0;
             if ($useRegex) {
                 $newValue = preg_replace('~' . $search . '~s', $replace, $row['languageCustomItemValue'] ?: $row['languageItemValue'], -1, $matches);
             } else {
                 $newValue = StringUtil::replaceIgnoreCase($search, $replace, $row['languageCustomItemValue'] ?: $row['languageItemValue'], $matches);
             }
             if ($matches > 0) {
                 // update value
                 if (!isset($updatedItems[$row['languageID']])) {
                     $updatedItems[$row['languageID']] = array();
                 }
                 if (!isset($updatedItems[$row['languageID']][$row['languageCategoryID']])) {
                     $updatedItems[$row['languageID']][$row['languageCategoryID']] = array();
                 }
                 $updatedItems[$row['languageID']][$row['languageCategoryID']][$row['languageItem']] = $newValue;
                 // save matches
                 $row['matches'] = $matches;
             }
         }
         $results[] = $row;
     }
     // save updates
     if (!empty($updatedItems)) {
         foreach ($updatedItems as $languageID => $categories) {
             $language = new LanguageEditor($languageID);
             foreach ($categories as $categoryID => $items) {
                 $useCustom = array();
                 foreach (array_keys($items) as $item) {
                     $useCustom[$item] = 1;
                 }
                 $category = new LanguageCategory($categoryID);
                 $language->updateItems($items, $category, PACKAGE_ID, $useCustom);
             }
         }
     }
     return $results;
 }
예제 #9
0
파일: install.php 프로젝트: 0xLeon/WCF
$sql = "UPDATE	wcf".WCF_N."_package_installation_file_log
	SET	packageID = ?";
$statement = WCF::getDB()->prepareStatement($sql);
$statement->execute(array(1));

$sql = "UPDATE	wcf".WCF_N."_package_installation_sql_log
	SET	packageID = ?";
$statement = WCF::getDB()->prepareStatement($sql);
$statement->execute(array(1));

// update pips
$sql = "UPDATE	wcf".WCF_N."_package_installation_plugin
	SET	packageID = ?";
$statement = WCF::getDB()->prepareStatement($sql);
$statement->execute(array(1));

// group options
$sql = "UPDATE	wcf".WCF_N."_user_group_option
	SET	packageID = ?";
$statement = WCF::getDB()->prepareStatement($sql);
$statement->execute(array(1));

// reset all caches
CacheHandler::getInstance()->flushAll();

// delete language files
LanguageEditor::deleteLanguageFiles();

// delete all compiled templates
ACPTemplateEngine::deleteCompiledTemplates(WCF_DIR.'acp/templates/compiled/');
예제 #10
0
 /**
  * Installs the selected languages.
  */
 protected function installLanguage()
 {
     $this->initDB();
     foreach (self::$selectedLanguages as $language) {
         // get language.xml file name
         $filename = TMP_DIR . 'install/lang/' . $language . '.xml';
         // check the file
         if (!file_exists($filename)) {
             throw new SystemException("unable to find language file '" . $filename . "'");
         }
         // open the file
         $xml = new XML();
         $xml->load($filename);
         // import xml
         LanguageEditor::importFromXML($xml, 0);
     }
     // set default language
     $language = LanguageFactory::getInstance()->getLanguageByCode(in_array(self::$selectedLanguageCode, self::$selectedLanguages) ? self::$selectedLanguageCode : self::$selectedLanguages[0]);
     LanguageFactory::getInstance()->makeDefault($language->languageID);
     // rebuild language cache
     LanguageCacheBuilder::getInstance()->reset();
     // go to next step
     $this->gotoNextStep('createUser');
 }
예제 #11
0
 /**
  * Installs the selected languages.
  */
 protected function installLanguage()
 {
     $this->initDB();
     foreach (self::$selectedLanguages as $language) {
         // get language.xml file name
         $filename = TMP_DIR . 'install/lang/' . $language . '.xml';
         // check the file
         if (!file_exists($filename)) {
             throw new SystemException("unable to find language file '" . $filename . "'");
         }
         // open the file
         $xml = new XML();
         $xml->load($filename);
         // import xml
         LanguageEditor::importFromXML($xml, 0);
     }
     // set default language
     $language = LanguageFactory::getInstance()->getLanguageByCode(in_array(self::$selectedLanguageCode, self::$selectedLanguages) ? self::$selectedLanguageCode : self::$selectedLanguages[0]);
     LanguageFactory::getInstance()->makeDefault($language->languageID);
     // assign all languages to package id 0
     $sql = "SELECT\tlanguageID\n\t\t\tFROM\twcf" . WCF_N . "_language";
     $statement = self::getDB()->prepareStatement($sql);
     $statement->execute();
     $languages = array();
     while ($row = $statement->fetchArray()) {
         $languages[] = $row['languageID'];
     }
     if (count($languages) > 0) {
         $sql = "INSERT INTO\twcf" . WCF_N . "_language_to_package\n\t\t\t\t\t\t(languageID)\n\t\t\t\tVALUES\t\t(?)";
         $statement = self::getDB()->prepareStatement($sql);
         foreach ($languages as $languageID) {
             $statement->execute(array($languageID));
         }
     }
     // rebuild language cache
     CacheHandler::getInstance()->clearResource('languages');
     // go to next step
     $this->gotoNextStep('createUser');
 }
예제 #12
0
 /**
  * @see	\wcf\form\IForm::validate()
  */
 public function validate()
 {
     parent::validate();
     // check file
     if (!file_exists($this->filename)) {
         throw new UserInputException('languageFile');
     }
     // try to import
     try {
         // open xml document
         $xml = new XML();
         $xml->load($this->filename);
         // import xml document
         $this->language = LanguageEditor::importFromXML($xml, -1);
     } catch (SystemException $e) {
         throw new UserInputException($this->importField, $e->getMessage());
     }
 }
예제 #13
0
 /**
  * Sets language as default
  */
 public function setAsDefault()
 {
     $this->languageEditor->setAsDefault();
 }
 /**
  * Executes post-setup actions.
  */
 public function completeSetup()
 {
     // remove archives
     $sql = "SELECT\tarchive\n\t\t\tFROM\twcf" . WCF_N . "_package_installation_queue\n\t\t\tWHERE\tprocessNo = ?";
     $statement = WCF::getDB()->prepareStatement($sql);
     $statement->execute(array($this->queue->processNo));
     while ($row = $statement->fetchArray()) {
         @unlink($row['archive']);
     }
     // delete queues
     $sql = "DELETE FROM\twcf" . WCF_N . "_package_installation_queue\n\t\t\tWHERE\t\tprocessNo = ?";
     $statement = WCF::getDB()->prepareStatement($sql);
     $statement->execute(array($this->queue->processNo));
     // clear language files once whole installation is completed
     LanguageEditor::deleteLanguageFiles();
     // reset all caches
     CacheHandler::getInstance()->flushAll();
 }
	/**
	 * @see	wcf\system\package\plugin\IPackageInstallationPlugin::install()
	 */
	public function install() {
		AbstractPackageInstallationPlugin::install();
		
		// get language files
		$languageFiles = array();
		$multipleFiles = false;
		$filename = $this->instruction['value'];
		if (strpos($filename, '*') !== false) {
			// wildcard syntax; import multiple files
			$multipleFiles = true;
			$files = $this->installation->getArchive()->getTar()->getContentList();
			$pattern = str_replace("\*", ".*", preg_quote($filename));
			
			foreach ($files as $file) {
				if (preg_match('!'.$pattern.'!i', $file['filename'])) {
					if (preg_match('~([a-z-]+)\.xml$~i', $file['filename'], $match)) {
						$languageFiles[$match[1]] = $file['filename'];
					}
					else {
						throw new SystemException("Can not determine language code of language file '".$file['filename']."'");
					}
				}
			}
		}
		else {
			if (!empty($this->instruction['attributes']['languagecode'])) {
				$languageCode = $this->instruction['attributes']['languagecode'];
			}
			else if (!empty($this->instruction['attributes']['language'])) {
				$languageCode = $this->instruction['attributes']['language'];
			}
			else if (preg_match('~([a-z-]+)\.xml$~i', $filename, $match)) {
				$languageCode = $match[1];
			}
			else {
				throw new SystemException("Can not determine language code of language file '".$filename."'");
			}
			
			$languageFiles[$languageCode] = $filename;
		}
		
		// get installed languages
		$installedLanguages = array();
		$sql = "SELECT		*
			FROM		wcf".WCF_N."_language
			ORDER BY	isDefault DESC";
		$statement = WCF::getDB()->prepareStatement($sql);
		$statement->execute();
		while ($row = $statement->fetchArray()) {
			$installedLanguages[] = $row;
		}
		
		// install language
		foreach ($installedLanguages as $installedLanguage) {
			$languageFile = null;
			if (isset($languageFiles[$installedLanguage['languageCode']])) {
				$languageFile = $languageFiles[$installedLanguage['languageCode']];
			}
			else if ($multipleFiles) {
				// use default language
				if (isset($languageFiles[$installedLanguages[0]['languageCode']])) {
					$languageFile = $languageFiles[$installedLanguages[0]['languageCode']];
				}
				
				// use english (if installed)
				else if (isset($languageFiles['en'])) {
					foreach ($installedLanguages as $installedLanguage2) {
						if ($installedLanguage2['languageCode'] == 'en') {
							$languageFile = $languageFiles['en'];
							break;
						}
					}
				}
				
				// use any installed language
				if ($languageFile === null) {
					foreach ($installedLanguages as $installedLanguage2) {
						if (isset($languageFiles[$installedLanguage2['languageCode']])) {
							$languageFile = $languageFiles[$installedLanguage2['languageCode']];
							break;
						}
					}
				}
				
				// use first delivered language
				if ($languageFile === null) {
					foreach ($languageFiles as $languageFile) break;
				}
			}
			
			// save language
			if ($languageFile !== null) {
				if ($xml = $this->readLanguage($languageFile)) {
					// get language object
					$language = LanguageFactory::getInstance()->getLanguageByCode($installedLanguage['languageCode']);
					$languageEditor = new LanguageEditor($language);
					
					// import xml
					// don't update language files if package is an application
					$languageEditor->updateFromXML($xml, $this->installation->getPackageID(), !$this->installation->getPackage()->isApplication);
				}
			}
		}
	}
	/**
	 * Executes post-setup actions.
	 */
	public function completeSetup() {
		// mark queue as done
		$queueEditor = new PackageInstallationQueueEditor($this->queue);
		$queueEditor->update(array(
			'done' => 1
		));
		
		// remove node data
		$this->nodeBuilder->purgeNodes();
		
		// update package version
		if ($this->action == 'update') {
			$packageEditor = new PackageEditor($this->getPackage());
			$packageEditor->update(array(
				'updateDate' => TIME_NOW,
				'packageVersion' => $this->getArchive()->getPackageInfo('version')
			));
		}
		
		// clear language files once whole installation is completed
		LanguageEditor::deleteLanguageFiles();
		
		// reset all caches
		CacheHandler::getInstance()->flushAll();
	}
예제 #17
0
	/**
	 * @see	wcf\form\Form::save()
	 */
	public function save() {
		parent::save();
		
		if ($this->mode == 'copy') {
			$this->language = LanguageEditor::create(array(
				'languageCode' => StringUtil::toLowerCase($this->languageCode)
			));
			$languageEditor = new LanguageEditor($this->sourceLanguage);
			$languageEditor->copy($this->language);
		}
		
		LanguageFactory::getInstance()->clearCache();
		LanguageFactory::getInstance()->deleteLanguageCache();
		
		$this->saved();
		
		// show success message
		WCF::getTPL()->assign('success', true);
	}