Finish 2.6.0

# Conflicts:
#	core/dbobject.class.php
#	install.txt
This commit is contained in:
Pierre Goiffon
2019-01-09 17:26:36 +01:00
28 changed files with 714 additions and 471 deletions

View File

@@ -12,13 +12,13 @@ You are welcome to create pull requests on any of those subjects:
* 🐛 `:bug:` bug fix
* 🔒 `:lock:` security
* 🌐 `:globe_with_meridians:` translation
* 🌐 `:globe_with_meridians:` translation / i18n / l10n
If you want to implement a **new feature**, please [create a corresponding ticket](https://sourceforge.net/p/itop/tickets/new/) for review.
If you ever want to begin implementation, do so in a fork, and add a link to the corresponding commits in the ticket.
If you ever want to begin implementation, do so in a fork, and add a link to the corresponding commits in the ticket.
### License
iTop is distributed under the AGPL-3.0 license (see the [license.txt] file),
iTop is distributed under the AGPL-3.0 license (see the [license.txt] file),
your code must comply with this license.
If you want to use another license, you may [create an extension][wiki new ext].
@@ -33,28 +33,29 @@ TL;DR:
> **create a fork from iTop main repository,
> create a branch based on either release branch if present, or develop otherwise**
We are using the [GitFlow](https://nvie.com/posts/a-successful-git-branching-model/) branch model. That means we have in our repo those
We are using the [GitFlow](https://nvie.com/posts/a-successful-git-branching-model/) branch model. That means we have in our repo those
main branches:
- develop: ongoing development version
- release/*: if present, that means we are working on a beta version
- release/\*: if present, that means we are working on a beta version
- master: previous stable version
For example, if no beta version is currently ongoing we could have:
- develop containing 2.8 version
- master containing 2.7 version
- develop containing future 2.8.0 version
- master containing 2.7.x maintenance version
In this example, when 2.8 beta is shipped that will become:
In this example, when 2.8.0-beta is shipped that will become:
- develop: 2.9 version
- release/2.8: 2.8 beta
- master: 2.7 version
- develop: future 2.9.0 version
- release/2.8: 2.8.0-beta
- master: 2.7.x maintenance version
And when 2.8 final will be out:
And when 2.8.0 final will be out:
- develop: 2.9 version
- master: 2.8 version
- develop: future 2.9.0 version
- master: 2.8.x maintenance version
- support/2.7 : 2.7.x maintenance version
## Coding
@@ -63,6 +64,10 @@ And when 2.8 final will be out:
Please follow [our guidelines](https://www.itophub.io/wiki/page?id=latest%3Acustomization%3Acoding_standards).
### 🌐 Translations
A [dedicated page](https://www.itophub.io/wiki/page?id=latest%3Acustomization%3Atranslation) is available in the official wiki.
### Tests
Please create tests that covers as much as possible the code you're submitting.
@@ -75,7 +80,7 @@ Our tests are located in the `test/` directory, containing a PHPUnit config file
* Use the present tense ("Add feature" not "Added feature")
* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
* Limit the first line to 72 characters or less
* Please start the commit message with an applicable emoji (following the [Gitmoji guide](https://gitmoji.carloscuesta.me/).). For example :
* Please start the commit message with an applicable emoji code (following the [Gitmoji guide](https://gitmoji.carloscuesta.me/)). For example :
* 🌐 `:globe_with_meridians:` for translations
* 🎨 `:art:` when improving the format/structure of the code
* ⚡️ `:zap:` when improving performance

View File

@@ -35,7 +35,7 @@ iTop also offers mass import tools and web services to integrate with your IT
- [Changes since the previous version][58]
- [New features][59]
- [Migration notes][60]
- [Download iTop 2.6.0-beta][61]
- [Download iTop 2.6.0][61]
### Version 2.5
@@ -88,7 +88,6 @@ We would like to give a special thank you to the people from the community who c
#### Aliases
- chifu1234
- cprobst
- jbostoen
- Karkoff1212
- larhip
- Laura
@@ -128,14 +127,14 @@ We would like to give a special thank you to the people from the community who c
[50]: https://www.itophub.io/wiki/page?id=2_4_0:release:change_log
[51]: https://www.itophub.io/wiki/page?id=2_4_0:release:2_4_whats_new
[52]: https://www.itophub.io/wiki/page?id=2_4_0:install:230_to_240_migration_notes
[53]: https://sourceforge.net/projects/itop/files/itop/2.4.1/iTop-2.4.1-3714.zip/download
[53]: https://sourceforge.net/projects/itop/files/itop/2.4.1
[54]: https://www.itophub.io/wiki/page?id=2_5_0:release:change_log
[55]: https://www.itophub.io/wiki/page?id=2_5_0:release:2_5_whats_new
[56]: https://www.itophub.io/wiki/page?id=2_5_0:install:240_to_250_migration_notes
[57]: https://sourceforge.net/projects/itop/files/itop/2.5.0/iTop-2.5.0-3935.zip/download
[57]: https://sourceforge.net/projects/itop/files/itop/2.5.0
[58]: https://www.itophub.io/wiki/page?id=2_6_0:release:change_log
[59]: https://www.itophub.io/wiki/page?id=2_6_0:release:2_6_whats_new
[60]: https://www.itophub.io/wiki/page?id=2_6_0:install:250_to_260_migration_notes
[61]: https://sourceforge.net/projects/itop/files/itop/2.6.0-beta/iTop-2.6-beta-4146.zip/download
[61]: https://sourceforge.net/projects/itop/files/itop/2.6.0

View File

@@ -3690,6 +3690,9 @@ EOF
return $aErrors;
}
/**
* @inheritdoc
*/
public function DBInsertNoReload()
{
$res = parent::DBInsertNoReload();
@@ -3707,6 +3710,7 @@ EOF
}
/**
* @inheritdoc
* Attaches InlineImages to the current object
*/
protected function OnObjectKeyReady()
@@ -3831,6 +3835,12 @@ EOF
$this->bAllowWrite = $bAllow;
}
/**
* @inheritdoc
* @throws \ArchivedObjectException
* @throws \CoreException
* @throws \OQLException
*/
public function DoCheckToWrite()
{
parent::DoCheckToWrite();

View File

@@ -1272,6 +1272,10 @@ abstract class DashletGroupBy extends Dashlet
$sBlockId = 'block_'.$this->sId.($bEditMode ? '_edit' : ''); // make a unique id (edition occuring in the same DOM)
$oBlock = new DisplayBlock($oFilter, $sType);
$oBlock->Display($oPage, $sBlockId, array_merge($aExtraParams, $aParams));
if($bEditMode)
{
$oPage->add('<div class="dashlet-blocker"></div>');
}
$oPage->add('</div>');
}
}

View File

@@ -1171,7 +1171,7 @@ class utils
}
}
/**
* Get target configuration file name (including full path)
* @return string target configuration file name (including full path)
*/
public static function GetConfigFilePath($sEnvironment = null)
{
@@ -1181,6 +1181,17 @@ class utils
}
return APPCONF.$sEnvironment.'/'.ITOP_CONFIG_FILE;
}
/**
* @return string target configuration file name (including relative path)
*/
public static function GetConfigFilePathRelative($sEnvironment = null)
{
if (is_null($sEnvironment))
{
$sEnvironment = self::GetCurrentEnvironment();
}
return "conf/".$sEnvironment.'/'.ITOP_CONFIG_FILE;
}
/**
* @return string the absolute URL to the modules root path

View File

@@ -332,6 +332,18 @@ class BulkChange
return true;
}
/**
* @param \DBObject $oTargetObj
* @param array $aRowData
* @param array $aErrors
*
* @return array
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \MissingQueryArgument
* @throws \MySQLException
* @throws \MySQLHasGoneAwayException
*/
protected function PrepareObject(&$oTargetObj, $aRowData, &$aErrors)
{
$aResults = array();
@@ -477,7 +489,9 @@ class BulkChange
if (!$oAttDef->IsWritable() && in_array($sAttCode, $this->m_aReconcilKeys)){ continue; }
$aReasons = array();
$iFlags = $oTargetObj->GetAttributeFlags($sAttCode, $aReasons);
$iFlags = ($oTargetObj->IsNew())
? $oTargetObj->GetInitialStateAttributeFlags($sAttCode, $aReasons)
: $oTargetObj->GetAttributeFlags($sAttCode, $aReasons);
if ( (($iFlags & OPT_ATT_READONLY) == OPT_ATT_READONLY) && ( $oTargetObj->Get($sAttCode) != $aRowData[$iCol]) )
{
$aErrors[$sAttCode] = Dict::Format('UI:CSVReport-Value-Issue-Readonly', $sAttCode, $oTargetObj->Get($sAttCode), $aRowData[$iCol]);

View File

@@ -188,6 +188,16 @@ abstract class CMDBObject extends DBObject
self::$m_oCurrChange->DBInsert();
}
/**
* @inheritdoc
* @throws \ArchivedObjectException
* @throws \CoreCannotSaveObjectException
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \CoreWarning
* @throws \MySQLException
* @throws \OQLException
*/
protected function RecordObjCreation()
{
// Delete any existing change tracking about the current object (IDs can be reused due to InnoDb bug; see TRAC #886)
@@ -206,6 +216,7 @@ abstract class CMDBObject extends DBObject
MetaModel::PurgeData($oFilter);
parent::RecordObjCreation();
$oMyChangeOp = MetaModel::NewObject("CMDBChangeOpCreate");
$oMyChangeOp->Set("objclass", get_class($this));
$oMyChangeOp->Set("objkey", $this->GetKey());
@@ -232,9 +243,17 @@ abstract class CMDBObject extends DBObject
}
/**
* @param $sAttCode
* @param string $sAttCode
* @param $original Original value
* @param $value Current value
*
* @throws \ArchivedObjectException
* @throws \CoreCannotSaveObjectException
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \CoreWarning
* @throws \MySQLException
* @throws \OQLException
*/
protected function RecordAttChange($sAttCode, $original, $value)
{
@@ -438,6 +457,14 @@ abstract class CMDBObject extends DBObject
/**
* @param array $aValues
* @param array $aOrigValues
*
* @throws \ArchivedObjectException
* @throws \CoreCannotSaveObjectException
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \CoreWarning
* @throws \MySQLException
* @throws \OQLException
*/
protected function RecordAttChanges(array $aValues, array $aOrigValues)
{

View File

@@ -72,6 +72,9 @@ define('DEFAULT_ENCRYPTION_LIB', 'Mcrypt'); // We'll define the best encryption
* configuration data (this class cannot not be localized, because it is responsible for loading the dictionaries)
*
* @package iTopORM
*
* @see \MetaModel::GetConfig() to get the config, if the metamodel was already loaded
* @see utils::GetConfig() to load config from the current env, if metamodel is not loaded
*/
class Config
{

View File

@@ -70,11 +70,14 @@ abstract class DBObject implements iDisplay
{
private static $m_aMemoryObjectsByClass = array();
private static $m_aBulkInsertItems = array(); // class => array of ('table' => array of (array of <sql_value>))
private static $m_aBulkInsertCols = array(); // class => array of ('table' => array of <sql_column>)
/** @var array class => array of ('table' => array of (array of <sql_value>)) */
private static $m_aBulkInsertItems = array();
/** @var array class => array of ('table' => array of <sql_column>) */
private static $m_aBulkInsertCols = array();
private static $m_bBulkInsert = false;
protected $m_bIsInDB = false; // true IIF the object is mapped to a DB record
/** @var bool true IIF the object is mapped to a DB record */
protected $m_bIsInDB = false;
protected $m_iKey = null;
private $m_aCurrValues = array();
protected $m_aOrigValues = array();
@@ -232,7 +235,9 @@ abstract class DBObject implements iDisplay
/**
* @param bool $bAllowAllData DEPRECATED: the reload must never fail!
*
* @throws CoreException
* @internal
*/
public function Reload($bAllowAllData = false)
{
@@ -748,12 +753,24 @@ abstract class DBObject implements iDisplay
}
}
}
/**
* Overridable callback, called by \DBObject::DoComputeValues
*
* @api
*/
public function ComputeValues()
{
}
// Compute scalar attributes that depend on any other type of attribute
/**
* Compute scalar attributes that depend on any other type of attribute
*
* @throws \CoreException
* @throws \CoreUnexpectedValue
*
* @internal
*/
final public function DoComputeValues()
{
// TODO - use a flag rather than checking the call stack -> this will certainly accelerate things
@@ -1075,7 +1092,9 @@ abstract class DBObject implements iDisplay
/**
* Gets the name of an object in a safe manner for displaying inside a web page
*
* @return string
* @throws \CoreException
*/
public function GetName()
{
@@ -1087,13 +1106,20 @@ abstract class DBObject implements iDisplay
* since the " < > characters are not escaped and the name may contain some XSS script
* instructions.
* Use this function only for internal computations or for an output to a non-HTML destination
*
* @return string
* @throws \CoreException
*/
public function GetRawName()
{
return $this->Get('friendlyname');
}
/**
* @return mixed|string '' if no state attribute, object representing its value otherwise
* @throws \CoreException
* @internal
*/
public function GetState()
{
$sStateAttCode = MetaModel::GetStateAttributeCode(get_class($this));
@@ -1158,15 +1184,18 @@ abstract class DBObject implements iDisplay
}
/**
*
* @param string $sAttCode $sAttCode The code of the attribute
* @param array $aReasons To store the reasons why the attribute is read-only (info about the synchro replicas)
* @param string $sTargetState The target state in which to evalutate the flags, if empty the current state will be
* used
*
* @return integer the binary combination of flags (OPT_ATT_HIDDEN, OPT_ATT_READONLY, OPT_ATT_MANDATORY...) for the
* given attribute in the given state of the object
* @return integer the binary combination of flags for the given attribute in the given state of the object<br>
* Values can be one of the OPT_ATT_HIDDEN, OPT_ATT_READONLY, OPT_ATT_MANDATORY, ... (see define in metamodel.class.php)
* @throws \CoreException
*
* @api
*
* @see GetInitialStateAttributeFlags for creation
*/
public function GetAttributeFlags($sAttCode, &$aReasons = array(), $sTargetState = '')
{
@@ -1274,11 +1303,18 @@ abstract class DBObject implements iDisplay
}
/**
* Returns the set of flags (OPT_ATT_HIDDEN, OPT_ATT_READONLY, OPT_ATT_MANDATORY...)
* for the given attribute for the current state of the object considered as an INITIAL state
* @param string $sAttCode The code of the attribute
* @return integer Flags: the binary combination of the flags applicable to this attribute
*/
* @param array $aReasons
*
* @return integer The binary combination of the flags for the given attribute for the current state of the object
* considered as an INITIAL state.<br>
* Values can be one of the OPT_ATT_HIDDEN, OPT_ATT_READONLY, OPT_ATT_MANDATORY, ... (see define in metamodel.class.php)
* @throws \CoreException
*
* @api
*
* @see GetAttributeFlags when modifying the object
*/
public function GetInitialStateAttributeFlags($sAttCode, &$aReasons = array())
{
$iFlags = 0;
@@ -1290,17 +1326,18 @@ abstract class DBObject implements iDisplay
return $iFlags; // No need to care about the synchro flags since we'll be creating a new object anyway
}
// check if the given (or current) value is suitable for the attribute
// return true if successfull
// return the error desciption otherwise
/**
* Check if the given (or current) value is suitable for the attribute
*
* @param $sAttCode
* @param null $value
* @param boolean|string $value true if successfull, the error desciption otherwise
*
* @return bool|string
* @throws \ArchivedObjectException
* @throws \CoreException
* @throws \OQLException
*
* @internal
*/
public function CheckValue($sAttCode, $value = null)
{
@@ -1431,8 +1468,13 @@ abstract class DBObject implements iDisplay
}
return true;
}
// check attributes together
/**
* check attributes together
*
* @return bool
* @api
*/
public function CheckConsistency()
{
return true;
@@ -1560,12 +1602,14 @@ abstract class DBObject implements iDisplay
}
/**
* check integrity rules (before inserting or updating the object)
* a displayable error is returned
* Check integrity rules (before inserting or updating the object)
*
* Errors should be inserted in {@link $m_aCheckIssues} and {@link $m_aCheckWarnings} arrays
*
* @throws \ArchivedObjectException
* @throws \CoreException
* @throws \OQLException
*
* @api
*/
public function DoCheckToWrite()
@@ -1631,6 +1675,7 @@ abstract class DBObject implements iDisplay
* @throws \ArchivedObjectException
* @throws \CoreException
* @throws \OQLException
*
* @internal do not overwrite ! Use {@link DoCheckToWrite} instead
*/
final public function CheckToWrite()
@@ -1661,6 +1706,10 @@ abstract class DBObject implements iDisplay
// check if it is allowed to delete the existing object from the database
// a displayable error is returned
/**
* check if it is allowed to delete the existing object from the database
*
* a displayable error is added in {@link $m_aDeleteIssues}
*
* @param \DeletionPlan $oDeletionPlan
*
* @throws \CoreException
@@ -1782,10 +1831,14 @@ abstract class DBObject implements iDisplay
}
}
return $aDelta;
}
}
// List the attributes that have been changed
// Returns an array of attname => currentvalue
/**
* List the attributes that have been changed
*
* @return array attname => currentvalue
* @internal
*/
public function ListChanges()
{
if ($this->m_bIsInDB)
@@ -1845,13 +1898,21 @@ abstract class DBObject implements iDisplay
return true;
}
// used only by insert
/**
* Used only by insert, Meant to be overloaded
*
* @api
*/
protected function OnObjectKeyReady()
{
// Meant to be overloaded
}
// used both by insert/update
/**
* used both by insert/update
*
* @throws \CoreException
* @internal
*/
private function DBWriteLinks()
{
foreach(MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode => $oAttDef)
@@ -1860,12 +1921,18 @@ abstract class DBObject implements iDisplay
if (!array_key_exists($sAttCode, $this->m_aTouchedAtt)) continue;
if (array_key_exists($sAttCode, $this->m_aModifiedAtt) && ($this->m_aModifiedAtt[$sAttCode] == false)) continue;
/** @var \ormLinkSet $oLinkSet */
$oLinkSet = $this->m_aCurrValues[$sAttCode];
$oLinkSet->DBWrite($this);
}
}
// used both by insert/update
/**
* Used both by insert/update
*
* @throws \CoreException
* @internal
*/
private function WriteExternalAttributes()
{
foreach (MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode => $oAttDef)
@@ -1906,8 +1973,18 @@ abstract class DBObject implements iDisplay
self::$m_aBulkInsertItems = array();
self::$m_aBulkInsertCols = array();
self::$m_bBulkInsert = false;
}
}
/**
* Persists new object in the DB
*
* @param $sTableClass
*
* @return bool|int false if nothing to persist (no change), new key value otherwise
* @throws \CoreException
* @throws \MySQLException
* @internal
*/
private function DBInsertSingleTable($sTableClass)
{
$sTable = MetaModel::DBGetTable($sTableClass);
@@ -1990,7 +2067,7 @@ abstract class DBObject implements iDisplay
}
/**
* Insert of record for the new object into the database
* Persists object to new records in the DB
*
* @return int key of the newly created object
* @throws \ArchivedObjectException
@@ -2000,6 +2077,8 @@ abstract class DBObject implements iDisplay
* @throws \CoreWarning
* @throws \MySQLException
* @throws \OQLException
*
* @internal
*/
public function DBInsertNoReload()
{
@@ -2048,6 +2127,7 @@ abstract class DBObject implements iDisplay
if (in_array($sState, $oAttDef->GetStates()))
{
// Start the stop watch and compute the deadlines
/** @var \ormStopWatch $oSW */
$oSW = $this->Get($sAttCode);
$oSW->Start($this, $oAttDef);
$oSW->ComputeDeadlines($this, $oAttDef);
@@ -2203,6 +2283,17 @@ abstract class DBObject implements iDisplay
}
}
/**
* @return int|null inserted object key
* @throws \ArchivedObjectException
* @throws \CoreCannotSaveObjectException
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \CoreWarning
* @throws \MySQLException
* @throws \OQLException
* @internal
*/
public function DBInsert()
{
$this->DBInsertNoReload();
@@ -3021,32 +3112,56 @@ abstract class DBObject implements iDisplay
self::$aPortalToURLMaker[$sPortalId] = $sUrlMakerClass;
}
// To be optionaly overloaded
/**
* Can be overloaded
*
* @api
*/
protected function OnInsert()
{
}
// To be optionaly overloaded
/**
* Can be overloaded
*
* @api
*/
protected function AfterInsert()
{
}
// To be optionaly overloaded
/**
* Can be overloaded
*
* @api
*/
protected function OnUpdate()
{
}
// To be optionaly overloaded
/**
* Can be overloaded
*
* @api
*/
protected function AfterUpdate()
{
}
// To be optionaly overloaded
/**
* Can be overloaded
*
* @api
*/
protected function OnDelete()
{
}
// To be optionaly overloaded
/**
* Can be overloaded
*
* @api
*/
protected function AfterDelete()
{
}
@@ -3128,8 +3243,10 @@ abstract class DBObject implements iDisplay
}
/**
* This object has been created/deleted, record that as a change in link sets pointing to this (if any)
*/
* This object has been created/deleted, record that as a change in link sets pointing to this (if any)
*
* @internal
*/
private function RecordLinkSetListChange($bAdd = true)
{
foreach(MetaModel::GetTrackForwardExternalKeys(get_class($this)) as $sExtKeyAttCode => $oLinkSet)
@@ -3154,6 +3271,9 @@ abstract class DBObject implements iDisplay
}
}
/**
* @internal
*/
protected function RecordObjCreation()
{
$this->RecordLinkSetListChange(true);
@@ -3527,6 +3647,15 @@ abstract class DBObject implements iDisplay
return $iFlags;
}
/**
* @return bool true if this object is used in a data synchro
* @throws \CoreException
* @throws \CoreUnexpectedValue
* @throws \MySQLException
* @throws \OQLException
* @internal
* @see \SynchroDataSource
*/
public function InSyncScope()
{
//

View File

@@ -1273,6 +1273,7 @@ class DisplayableGraph extends SimpleGraph
$oPdf->SetAutoPageBreak(true, $fBreakMargin);
$oPdf->SetAlpha(1);
$oPdf->SetTextColor(0, 0, 0);
}
/**

View File

@@ -178,18 +178,19 @@ class InlineImage extends DBObject
$oInlineImage->DBUpdate();
}
}
else
{
IssueLog::Error('InlineImage: Error during FinalizeInlineImages(), no transaction ID for object '.get_class($oObject).'#'.$oObject->GetKey().'.');
IssueLog::Error('|- Call stack:');
$oException = new Exception();
$sStackTrace = $oException->getTraceAsString();
IssueLog::Error($sStackTrace);
IssueLog::Error('|- POST vars:');
IssueLog::Error(print_r($_POST, true));
}
// For tracing issues with Inline Images... but beware not all updates are interactive, so this trace happens when creating objects non-interactively (REST, Synchro...)
// else
// {
// IssueLog::Error('InlineImage: Error during FinalizeInlineImages(), no transaction ID for object '.get_class($oObject).'#'.$oObject->GetKey().'.');
//
// IssueLog::Error('|- Call stack:');
// $oException = new Exception();
// $sStackTrace = $oException->getTraceAsString();
// IssueLog::Error($sStackTrace);
//
// IssueLog::Error('|- POST vars:');
// IssueLog::Error(print_r($_POST, true));
// }
}
/**

View File

@@ -2130,6 +2130,17 @@ select#org_id {
padding: 5px;
margin: 0;
}
/* Prevent cursor clicking on the calendar (eg. While editing dashlet) */
.dashlet-blocker {
position: absolute;
z-index: 9;
/* To be above calendar links & all, but below .close-box (9) */
top: 0;
left: 0;
width: 100%;
height: 100%;
cursor: not-allowed;
}
td.layout_cell {
height: 50px;
/* min-height does not work */

View File

@@ -2478,6 +2478,16 @@ select#org_id {
padding: 5px;
margin:0;
}
/* Prevent cursor clicking on the calendar (eg. While editing dashlet) */
.dashlet-blocker {
position: absolute;
z-index: 9; /* To be above calendar links & all, but below .close-box (9) */
top: 0;
left: 0;
width: 100%;
height: 100%;
cursor: not-allowed;
}
td.layout_cell {
height: 50px; /* min-height does not work */
vertical-align: top;

View File

@@ -184,7 +184,15 @@ EOF
$sFile = utils::ReadParam('file', '', false, 'raw_data');
$oBackup = new DBBackupScheduled();
$sBackupDir = APPROOT.'data/backups/';
$oBackup->DownloadBackup($sBackupDir.$sFile);
$sPathNoDotDotPattern = '/^((?!\/\.\.\/).)*$/';
if(preg_match($sPathNoDotDotPattern, $sBackupDir.$sFile) == 1)
{
$oBackup->DownloadBackup($sBackupDir.$sFile);
}
else
{
throw new InvalidParameterException('Invalid file path');
}
break;
}
}

View File

@@ -104,10 +104,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Organization/Attribute:deliverymodel_name+' => '',
'Class:Organization/Attribute:parent_id_friendlyname' => '上级组织',
'Class:Organization/Attribute:parent_id_friendlyname+' => '上级组织',
'Class:Organization/Attribute:overview' => 'Overview~~',
'Organization:Overview:FunctionalCIs' => 'Configuration items of this organization~~',
'Organization:Overview:FunctionalCIs:subtitle' => 'by type~~',
'Organization:Overview:Users' => 'iTop Users within this organization~~',
'Class:Organization/Attribute:overview' => '概览',
'Organization:Overview:FunctionalCIs' => '该组织的所有配置项',
'Organization:Overview:FunctionalCIs:subtitle' => '按类型',
'Organization:Overview:Users' => '该组织里所有的iTop 用户',
));
//
@@ -175,8 +175,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Contact/Attribute:function' => '职责',
'Class:Contact/Attribute:function+' => '',
'Class:Contact/Attribute:cis_list' => '配置项',
'Class:Contact/Attribute:cis_list+' => 'All the configuration items linked to this contact',
'Class:Contact/Attribute:finalclass' => 'Contact sub-class',
'Class:Contact/Attribute:cis_list+' => '该联系人关联的所有配置项',
'Class:Contact/Attribute:finalclass' => '联系人子类别',
'Class:Contact/Attribute:finalclass+' => 'Name of the final class',
));
@@ -207,7 +207,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Person/Attribute:team_list+' => '这个人归属的所有团队',
'Class:Person/Attribute:tickets_list' => '工单',
'Class:Person/Attribute:tickets_list+' => '这个人发起的所有工单',
'Class:Person/Attribute:manager_id_friendlyname' => 'Manager friendly name',
'Class:Person/Attribute:manager_id_friendlyname' => '经理姓名',
'Class:Person/Attribute:manager_id_friendlyname+' => '',
'Class:Person/Attribute:picture' => '头像',
'Class:Person/Attribute:picture+' => '',
@@ -245,7 +245,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Document/Attribute:org_name+' => '',
'Class:Document/Attribute:documenttype_id' => '文档类型',
'Class:Document/Attribute:documenttype_id+' => '',
'Class:Document/Attribute:documenttype_name' => 'Document type name',
'Class:Document/Attribute:documenttype_name' => '文档类型名称',
'Class:Document/Attribute:documenttype_name+' => '',
'Class:Document/Attribute:version' => '版本',
'Class:Document/Attribute:version+' => '',
@@ -259,13 +259,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Document/Attribute:status/Value:obsolete+' => '',
'Class:Document/Attribute:status/Value:published' => '已发布',
'Class:Document/Attribute:status/Value:published+' => '',
'Class:Document/Attribute:cis_list' => 'CIs~~',
'Class:Document/Attribute:cis_list+' => 'All the configuration items linked to this document~~',
'Class:Document/Attribute:contracts_list' => 'Contracts~~',
'Class:Document/Attribute:contracts_list+' => 'All the contracts linked to this document~~',
'Class:Document/Attribute:services_list' => 'Services~~',
'Class:Document/Attribute:services_list+' => 'All the services linked to this document~~',
'Class:Document/Attribute:finalclass' => 'Document sub-class',
'Class:Document/Attribute:cis_list' => '配置项',
'Class:Document/Attribute:cis_list+' => '该文档关联的所有配置项',
'Class:Document/Attribute:contracts_list' => '合同',
'Class:Document/Attribute:contracts_list+' => '该文档关联的所有合同',
'Class:Document/Attribute:services_list' => '服务',
'Class:Document/Attribute:services_list+' => '该文档关联的所有服务',
'Class:Document/Attribute:finalclass' => '文档子类别',
'Class:Document/Attribute:finalclass+' => 'Name of the final class',
));
@@ -530,17 +530,17 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Server' => '服务器',
'Class:Server+' => '',
'Class:Server/Attribute:osfamily_id' => 'OS家族',
'Class:Server/Attribute:osfamily_id' => '操作系统家族',
'Class:Server/Attribute:osfamily_id+' => '',
'Class:Server/Attribute:osfamily_name' => 'OS家族名称',
'Class:Server/Attribute:osfamily_name' => '操作系统家族名称',
'Class:Server/Attribute:osfamily_name+' => '',
'Class:Server/Attribute:osversion_id' => 'OS版本',
'Class:Server/Attribute:osversion_id' => '操作系统版本',
'Class:Server/Attribute:osversion_id+' => '',
'Class:Server/Attribute:osversion_name' => 'OS版本名称',
'Class:Server/Attribute:osversion_name' => '操作系统版本名称',
'Class:Server/Attribute:osversion_name+' => '',
'Class:Server/Attribute:oslicence_id' => 'OS许可证',
'Class:Server/Attribute:oslicence_id' => '操作系统许可证',
'Class:Server/Attribute:oslicence_id+' => '',
'Class:Server/Attribute:oslicence_name' => 'OS许可证名称',
'Class:Server/Attribute:oslicence_name' => '操作系统许可证名称',
'Class:Server/Attribute:oslicence_name+' => '',
'Class:Server/Attribute:cpu' => 'CPU',
'Class:Server/Attribute:cpu+' => '',
@@ -601,13 +601,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:PC' => 'PC',
'Class:PC+' => '',
'Class:PC/Attribute:osfamily_id' => 'OS家族',
'Class:PC/Attribute:osfamily_id' => '操作系统家族',
'Class:PC/Attribute:osfamily_id+' => '',
'Class:PC/Attribute:osfamily_name' => 'OS 家族名称',
'Class:PC/Attribute:osfamily_name' => '操作系统家族名称',
'Class:PC/Attribute:osfamily_name+' => '',
'Class:PC/Attribute:osversion_id' => 'OS版本',
'Class:PC/Attribute:osversion_id' => '操作系统版本',
'Class:PC/Attribute:osversion_id+' => '',
'Class:PC/Attribute:osversion_name' => 'OS 版本名称',
'Class:PC/Attribute:osversion_name' => '操作系统版本名称',
'Class:PC/Attribute:osversion_name+' => '',
'Class:PC/Attribute:cpu' => 'CPU',
'Class:PC/Attribute:cpu+' => '',
@@ -701,9 +701,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:ApplicationSolution' => '应用方案',
'Class:ApplicationSolution+' => '',
'Class:ApplicationSolution/Attribute:functionalcis_list' => '配置项',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => 'All the configuration items that compose this application solution',
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '该应用方案包含的所有配置项',
'Class:ApplicationSolution/Attribute:businessprocess_list' => '业务流程',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => 'All the business processes depending on this application solution',
'Class:ApplicationSolution/Attribute:businessprocess_list+' => '所有依赖该应用方案的业务流程',
'Class:ApplicationSolution/Attribute:status' => '状态',
'Class:ApplicationSolution/Attribute:status+' => '',
'Class:ApplicationSolution/Attribute:status/Value:active' => '启用',
@@ -724,7 +724,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:BusinessProcess' => '业务流程',
'Class:BusinessProcess+' => '',
'Class:BusinessProcess/Attribute:applicationsolutions_list' => '应用方案',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => 'All the application solutions that impact this business process',
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '所有影响该业务流程的应用方案',
'Class:BusinessProcess/Attribute:status' => '状态',
'Class:BusinessProcess/Attribute:status+' => '',
'Class:BusinessProcess/Attribute:status/Value:active' => '启用',
@@ -912,11 +912,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Farm' => '集群',
'Class:Farm+' => '',
'Class:Farm/Attribute:hypervisor_list' => 'Hypervisor',
'Class:Farm/Attribute:hypervisor_list+' => '集群由哪些 Hypervisor 组成',
'Class:Farm/Attribute:hypervisor_list+' => '集群由哪些Hypervisor 组成',
'Class:Farm/Attribute:redundancy' => '高可用性',
'Class:Farm/Attribute:redundancy/disabled' => '所有 Hypervisor 正常,集群才正常',
'Class:Farm/Attribute:redundancy/count' => '至少 %1$s 个 Hypervisor 是正常的,集群才是正常的',
'Class:Farm/Attribute:redundancy/percent' => '至少 %1$s %% 的 Hypervisor 是正常的,集群才正常',
'Class:Farm/Attribute:redundancy/disabled' => '所有Hypervisor 正常,集群才正常',
'Class:Farm/Attribute:redundancy/count' => '至少 %1$s 个Hypervisor 是正常的,集群才是正常的',
'Class:Farm/Attribute:redundancy/percent' => '至少 %1$s %% 的Hypervisor 是正常的,集群才正常',
));
//
@@ -930,15 +930,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:VirtualMachine/Attribute:virtualhost_id+' => '',
'Class:VirtualMachine/Attribute:virtualhost_name' => '名称',
'Class:VirtualMachine/Attribute:virtualhost_name+' => '',
'Class:VirtualMachine/Attribute:osfamily_id' => 'OS家族',
'Class:VirtualMachine/Attribute:osfamily_id' => '操作系统家族',
'Class:VirtualMachine/Attribute:osfamily_id+' => '',
'Class:VirtualMachine/Attribute:osfamily_name' => '名称',
'Class:VirtualMachine/Attribute:osfamily_name+' => '',
'Class:VirtualMachine/Attribute:osversion_id' => 'OS版本',
'Class:VirtualMachine/Attribute:osversion_id' => '操作系统版本',
'Class:VirtualMachine/Attribute:osversion_id+' => '',
'Class:VirtualMachine/Attribute:osversion_name' => '名称',
'Class:VirtualMachine/Attribute:osversion_name+' => '',
'Class:VirtualMachine/Attribute:oslicence_id' => 'OS许可证',
'Class:VirtualMachine/Attribute:oslicence_id' => '操作系统许可证',
'Class:VirtualMachine/Attribute:oslicence_id+' => '',
'Class:VirtualMachine/Attribute:oslicence_name' => '名称',
'Class:VirtualMachine/Attribute:oslicence_name+' => '',
@@ -1098,7 +1098,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Software/Attribute:type/Value:DBServer' => '数据库服务器',
'Class:Software/Attribute:type/Value:DBServer+' => 'DB Server',
'Class:Software/Attribute:type/Value:Middleware' => '中间件',
'Class:Software/Attribute:type/Value:Middleware+' => 'Middleware',
'Class:Software/Attribute:type/Value:Middleware+' => '中间件',
'Class:Software/Attribute:type/Value:OtherSoftware' => '其它软件',
'Class:Software/Attribute:type/Value:OtherSoftware+' => '其它软件',
'Class:Software/Attribute:type/Value:PCSoftware' => 'PC 软件',
@@ -1126,7 +1126,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Patch/Attribute:documents_list+' => '该补丁关联的所有文档',
'Class:Patch/Attribute:description' => '描述',
'Class:Patch/Attribute:description+' => '',
'Class:Patch/Attribute:finalclass' => 'Patch sub-class',
'Class:Patch/Attribute:finalclass' => '补丁子类别',
'Class:Patch/Attribute:finalclass+' => 'Name of the final class',
));
@@ -1135,11 +1135,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:OSPatch' => 'OS 补丁',
'Class:OSPatch' => '操作系统补丁',
'Class:OSPatch+' => '',
'Class:OSPatch/Attribute:functionalcis_list' => '设备',
'Class:OSPatch/Attribute:functionalcis_list+' => '已安装该补丁的所有系统',
'Class:OSPatch/Attribute:osversion_id' => 'OS 版本',
'Class:OSPatch/Attribute:osversion_id' => '操作系统版本',
'Class:OSPatch/Attribute:osversion_id+' => '',
'Class:OSPatch/Attribute:osversion_name' => '名称',
'Class:OSPatch/Attribute:osversion_name+' => '',
@@ -1188,10 +1188,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Licence/Attribute:perpetual' => '永久有效',
'Class:Licence/Attribute:perpetual+' => '',
'Class:Licence/Attribute:perpetual/Value:no' => '否',
'Class:Licence/Attribute:perpetual/Value:no+' => 'no',
'Class:Licence/Attribute:perpetual/Value:no+' => '',
'Class:Licence/Attribute:perpetual/Value:yes' => '是',
'Class:Licence/Attribute:perpetual/Value:yes+' => 'yes',
'Class:Licence/Attribute:finalclass' => 'Licence sub-class',
'Class:Licence/Attribute:perpetual/Value:yes+' => '',
'Class:Licence/Attribute:finalclass' => '许可证子类别',
'Class:Licence/Attribute:finalclass+' => 'Name of the final class',
));
@@ -1200,9 +1200,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:OSLicence' => 'OS 许可证',
'Class:OSLicence' => '操作系统许可证',
'Class:OSLicence+' => '',
'Class:OSLicence/Attribute:osversion_id' => 'OS 版本',
'Class:OSLicence/Attribute:osversion_id' => '操作系统版本',
'Class:OSLicence/Attribute:osversion_id+' => '',
'Class:OSLicence/Attribute:osversion_name' => '名称',
'Class:OSLicence/Attribute:osversion_name+' => '',
@@ -1217,7 +1217,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:SoftwareLicence' => 'Software Licence',
'Class:SoftwareLicence' => '软件许可证',
'Class:SoftwareLicence+' => '',
'Class:SoftwareLicence/Attribute:software_id' => '软件',
'Class:SoftwareLicence/Attribute:software_id+' => '',
@@ -1253,7 +1253,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Typology+' => '',
'Class:Typology/Attribute:name' => '名称',
'Class:Typology/Attribute:name+' => '',
'Class:Typology/Attribute:finalclass' => 'Typology sub-class',
'Class:Typology/Attribute:finalclass' => '拓扑子类别',
'Class:Typology/Attribute:finalclass+' => 'Name of the final class',
));
@@ -1262,9 +1262,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:OSVersion' => 'OS 版本',
'Class:OSVersion' => '操作系统版本',
'Class:OSVersion+' => '',
'Class:OSVersion/Attribute:osfamily_id' => 'OS家族',
'Class:OSVersion/Attribute:osfamily_id' => '操作系统家族',
'Class:OSVersion/Attribute:osfamily_id+' => '',
'Class:OSVersion/Attribute:osfamily_name' => '名称',
'Class:OSVersion/Attribute:osfamily_name+' => '',
@@ -1275,7 +1275,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:OSFamily' => 'OS家族',
'Class:OSFamily' => '操作系统家族',
'Class:OSFamily+' => '',
));
@@ -1293,7 +1293,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:ContactType' => '合同类型',
'Class:ContactType' => '联系人类型',
'Class:ContactType+' => '',
));
@@ -1306,8 +1306,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Brand+' => '',
'Class:Brand/Attribute:physicaldevices_list' => '物理设备',
'Class:Brand/Attribute:physicaldevices_list+' => '该品牌的所有物理设备',
'Class:Brand/UniquenessRule:name+' => 'The name must be unique~~',
'Class:Brand/UniquenessRule:name' => 'This brand already exists~~',
'Class:Brand/UniquenessRule:name+' => '名称必须唯一',
'Class:Brand/UniquenessRule:name' => '该品牌已存在',
));
//
@@ -1361,8 +1361,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Model/Attribute:type/Value:Phone+' => '电话',
'Class:Model/Attribute:physicaldevices_list' => '物理设备',
'Class:Model/Attribute:physicaldevices_list+' => '该型号的所有物理设备',
'Class:Model/UniquenessRule:name_brand+' => 'Name must be unique in the brand~~',
'Class:Model/UniquenessRule:name_brand' => 'this model already exists for this brand~~',
'Class:Model/UniquenessRule:name_brand+' => '名称必须唯一',
'Class:Model/UniquenessRule:name_brand' => '该型号已存在',
));
//
@@ -1428,11 +1428,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:lnkFunctionalCIToOSPatch' => '链接 功能项 / OS 补丁',
'Class:lnkFunctionalCIToOSPatch' => '链接 功能项 / 操作系统补丁',
'Class:lnkFunctionalCIToOSPatch+' => '',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => 'OS 补丁',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => '操作系统补丁',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id+' => '',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_name' => 'OS 补丁名称',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_name' => '操作系统补丁名称',
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_name+' => '',
'Class:lnkFunctionalCIToOSPatch/Attribute:functionalci_id' => '功能项',
'Class:lnkFunctionalCIToOSPatch/Attribute:functionalci_id+' => '',
@@ -1505,10 +1505,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Subnet/Attribute:org_id' => '所属组织',
'Class:Subnet/Attribute:org_id+' => '',
'Class:Subnet/Attribute:org_name' => '名称',
'Class:Subnet/Attribute:org_name+' => 'Common name',
'Class:Subnet/Attribute:org_name+' => '名称',
'Class:Subnet/Attribute:ip' => 'IP',
'Class:Subnet/Attribute:ip+' => '',
'Class:Subnet/Attribute:ip_mask' => 'IP 掩码',
'Class:Subnet/Attribute:ip_mask' => '掩码',
'Class:Subnet/Attribute:ip_mask+' => '',
'Class:Subnet/Attribute:vlans_list' => 'VLAN',
'Class:Subnet/Attribute:vlans_list+' => '',
@@ -1563,7 +1563,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:NetworkInterface+' => '',
'Class:NetworkInterface/Attribute:name' => '名称',
'Class:NetworkInterface/Attribute:name+' => '',
'Class:NetworkInterface/Attribute:finalclass' => 'NetworkInterface sub-class',
'Class:NetworkInterface/Attribute:finalclass' => '网卡子类别',
'Class:NetworkInterface/Attribute:finalclass+' => 'Name of the final class',
));
@@ -1681,9 +1681,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type' => '连接类型',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type+' => '',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink' => '下联',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink+' => 'down link',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink+' => '下联',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:uplink' => '上联',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:uplink+' => 'up link',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:uplink+' => '上联',
));
//
@@ -1802,88 +1802,88 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Menu:DataAdministration' => '数据管理',
'Menu:DataAdministration+' => '数据管理',
'Menu:Catalogs' => '类别',
'Menu:Catalogs+' => '数据类型',
'Menu:Audit' => '审计',
'Menu:Audit+' => '审计',
'Menu:CSVImport' => 'CSV 导入',
'Menu:CSVImport+' => '批量创建或更新',
'Menu:Organization' => '组织',
'Menu:Organization+' => '所有组织',
'Menu:Application' => '应用',
'Menu:Application+' => '所有应用',
'Menu:DBServer' => '数据库服务器',
'Menu:DBServer+' => '数据库服务器',
'Menu:ConfigManagement' => '配置管理',
'Menu:ConfigManagement+' => '配置管理',
'Menu:ConfigManagementOverview' => '概览',
'Menu:ConfigManagementOverview+' => '概览',
'Menu:Contact' => '联系人',
'Menu:Contact+' => '联系人',
'Menu:Contact:Count' => '%1$d 个联系人',
'Menu:Person' => '个体',
'Menu:Person+' => '所有个体',
'Menu:Team' => '团队',
'Menu:Team+' => '所有团队',
'Menu:Document' => '文档',
'Menu:Document+' => '所有文档',
'Menu:Location' => '地理位置',
'Menu:DataAdministration' => '数据管理',
'Menu:DataAdministration+' => '数据管理',
'Menu:Catalogs' => '类别',
'Menu:Catalogs+' => '数据类型',
'Menu:Audit' => '审计',
'Menu:Audit+' => '审计',
'Menu:CSVImport' => 'CSV 导入',
'Menu:CSVImport+' => '批量创建或更新',
'Menu:Organization' => '组织',
'Menu:Organization+' => '所有组织',
'Menu:Application' => '应用',
'Menu:Application+' => '所有应用',
'Menu:DBServer' => '数据库服务器',
'Menu:DBServer+' => '数据库服务器',
'Menu:ConfigManagement' => '配置管理',
'Menu:ConfigManagement+' => '配置管理',
'Menu:ConfigManagementOverview' => '概览',
'Menu:ConfigManagementOverview+' => '概览',
'Menu:Contact' => '联系人',
'Menu:Contact+' => '联系人',
'Menu:Contact:Count' => '%1$d 个联系人',
'Menu:Person' => '个体',
'Menu:Person+' => '所有个体',
'Menu:Team' => '团队',
'Menu:Team+' => '所有团队',
'Menu:Document' => '文档',
'Menu:Document+' => '所有文档',
'Menu:Location' => '地理位置',
'Menu:Location+' => '所有位置',
'Menu:ConfigManagementCI' => '配置项',
'Menu:ConfigManagementCI+' => '配置项',
'Menu:BusinessProcess' => '业务流程',
'Menu:BusinessProcess+' => '所有业务流程',
'Menu:ApplicationSolution' => '应用方案',
'Menu:ApplicationSolution+' => '所有应用方案',
'Menu:ConfigManagementSoftware' => '应用管理',
'Menu:Licence' => '许可证',
'Menu:Licence+' => '所有许可证',
'Menu:Patch' => '补丁',
'Menu:Patch+' => '所有补丁',
'Menu:ApplicationInstance' => '已安装的软件',
'Menu:ApplicationInstance+' => '应用和数据库服务器',
'Menu:ConfigManagementHardware' => '基础设施管理',
'Menu:Subnet' => '子网',
'Menu:Subnet+' => '所有子网',
'Menu:NetworkDevice' => '网络设备',
'Menu:NetworkDevice+' => '所有网络设备',
'Menu:Server' => '服务器',
'Menu:Server+' => '所有服务器',
'Menu:Printer' => '打印机',
'Menu:Printer+' => '所有打印机',
'Menu:MobilePhone' => '移动电话',
'Menu:MobilePhone+' => '所有移动电话',
'Menu:PC' => '个人电脑',
'Menu:PC+' => '所有个人电脑',
'Menu:NewContact' => '新建联系人',
'Menu:NewContact+' => '新建联系人',
'Menu:SearchContacts' => '搜索联系人',
'Menu:SearchContacts+' => '搜索联系人',
'Menu:NewCI' => '新建配置项',
'Menu:NewCI+' => 'New CI',
'Menu:SearchCIs' => '搜索配置项',
'Menu:SearchCIs+' => '搜索配置项',
'Menu:ConfigManagement:Devices' => '设备',
'Menu:ConfigManagement:AllDevices' => '基础设施',
'Menu:ConfigManagement:virtualization' => '虚拟化',
'Menu:ConfigManagement:EndUsers' => '终端设备',
'Menu:ConfigManagement:SWAndApps' => '软件和应用',
'Menu:ConfigManagement:Misc' => '杂项',
'Menu:Group' => '配置组',
'Menu:Group+' => '配置组',
'Menu:ConfigManagement:Shortcuts' => '快捷方式',
'Menu:ConfigManagement:AllContacts' => '所有联系人: %1$d',
'Menu:Typology' => '配置管理',
'Menu:Typology+' => '配置管理',
'Menu:OSVersion' => 'OS 版本',
'Menu:OSVersion+' => '',
'Menu:Software' => '软件清单',
'Menu:Software+' => '软件清单',
'UI_WelcomeMenu_AllConfigItems' => '摘要',
'Menu:ConfigManagement:Typology' => '配置管理',
'Menu:Location+' => '所有位置',
'Menu:ConfigManagementCI' => '配置项',
'Menu:ConfigManagementCI+' => '配置项',
'Menu:BusinessProcess' => '业务流程',
'Menu:BusinessProcess+' => '所有业务流程',
'Menu:ApplicationSolution' => '应用方案',
'Menu:ApplicationSolution+' => '所有应用方案',
'Menu:ConfigManagementSoftware' => '应用管理',
'Menu:Licence' => '许可证',
'Menu:Licence+' => '所有许可证',
'Menu:Patch' => '补丁',
'Menu:Patch+' => '所有补丁',
'Menu:ApplicationInstance' => '已安装的软件',
'Menu:ApplicationInstance+' => '应用和数据库服务器',
'Menu:ConfigManagementHardware' => '基础设施管理',
'Menu:Subnet' => '子网',
'Menu:Subnet+' => '所有子网',
'Menu:NetworkDevice' => '网络设备',
'Menu:NetworkDevice+' => '所有网络设备',
'Menu:Server' => '服务器',
'Menu:Server+' => '所有服务器',
'Menu:Printer' => '打印机',
'Menu:Printer+' => '所有打印机',
'Menu:MobilePhone' => '移动电话',
'Menu:MobilePhone+' => '所有移动电话',
'Menu:PC' => '个人电脑',
'Menu:PC+' => '所有个人电脑',
'Menu:NewContact' => '新建联系人',
'Menu:NewContact+' => '新建联系人',
'Menu:SearchContacts' => '搜索联系人',
'Menu:SearchContacts+' => '搜索联系人',
'Menu:NewCI' => '新建配置项',
'Menu:NewCI+' => '新建配置项',
'Menu:SearchCIs' => '搜索配置项',
'Menu:SearchCIs+' => '搜索配置项',
'Menu:ConfigManagement:Devices' => '设备',
'Menu:ConfigManagement:AllDevices' => '基础设施',
'Menu:ConfigManagement:virtualization' => '虚拟化',
'Menu:ConfigManagement:EndUsers' => '终端设备',
'Menu:ConfigManagement:SWAndApps' => '软件和应用',
'Menu:ConfigManagement:Misc' => '杂项',
'Menu:Group' => '配置组',
'Menu:Group+' => '配置组',
'Menu:ConfigManagement:Shortcuts' => '快捷方式',
'Menu:ConfigManagement:AllContacts' => '所有联系人: %1$d',
'Menu:Typology' => '配置管理',
'Menu:Typology+' => '配置管理',
'Menu:OSVersion' => 'OS 版本',
'Menu:OSVersion+' => '',
'Menu:Software' => '软件清单',
'Menu:Software+' => '软件清单',
'UI_WelcomeMenu_AllConfigItems' => '摘要',
'Menu:ConfigManagement:Typology' => '配置管理',
));
@@ -1891,18 +1891,18 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
// Add translation for Fieldsets
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Server:baseinfo' => '基本信息',
'Server:Date' => '日期',
'Server:moreinfo' => '更多信息',
'Server:otherinfo' => '其它信息',
'Server:power' => '电力供应',
'Person:info' => '基本信息',
'Person:personal_info' => '个人信息',
'Person:notifiy' => '通知',
'Class:Subnet/Tab:IPUsage' => 'IP 使用率',
'Class:Subnet/Tab:IPUsage-explain' => '网卡IP范围: <em>%1$s</em> 到 <em>%2$s</em>',
'Class:Subnet/Tab:FreeIPs' => '空闲 IP',
'Class:Subnet/Tab:FreeIPs-count' => '空闲 IP: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => '以下是抽取的10个空闲IP',
'Class:Document:PreviewTab' => '预览',
'Server:baseinfo' => '基本信息',
'Server:Date' => '日期',
'Server:moreinfo' => '更多信息',
'Server:otherinfo' => '其它信息',
'Server:power' => '电力供应',
'Person:info' => '基本信息',
'Person:personal_info' => '个人信息',
'Person:notifiy' => '通知',
'Class:Subnet/Tab:IPUsage' => 'IP 使用率',
'Class:Subnet/Tab:IPUsage-explain' => '网卡IP范围: <em>%1$s</em> 到 <em>%2$s</em>',
'Class:Subnet/Tab:FreeIPs' => '空闲 IP',
'Class:Subnet/Tab:FreeIPs-count' => '空闲 IP: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => '以下是抽取的10个空闲IP',
'Class:Document:PreviewTab' => '预览',
));

View File

@@ -23,9 +23,9 @@
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Menu:ConfigEditor' => '配置文件编辑',
'Menu:ConfigEditor' => '编辑配置文件',
'config-edit-title' => '配置文件编辑器',
'config-edit-intro' => '编辑配置文件时请格外小心.',
'config-edit-intro' => '编辑配置文件时请务必格外小心.',
'config-apply' => '应用',
'config-apply-title' => '应用 (Ctrl+S)',
'config-cancel' => '重置',

View File

@@ -24,21 +24,21 @@
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
// Dictionary entries go here
'Menu:iTopHub' => 'iTop Hub',
'Menu:iTopHub:Register' => '进入 iTop Hub ',
'Menu:iTopHub:Register+' => '进入 iTop Hub 更新您的组件',
'Menu:iTopHub:Register:Description' => '<p>进入 iTop Hub 社区平台!</br>寻找您想要的内容和信息, 管理本机扩展或安装新的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到 iTop Hub 上.</p>',
'Menu:iTopHub:Register' => '进入iTop Hub ',
'Menu:iTopHub:Register+' => '进入iTop Hub 更新您的组件',
'Menu:iTopHub:Register:Description' => '<p>进入iTop Hub 社区平台!</br>寻找您想要的内容和信息, 管理本机扩展或安装新的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到 iTop Hub 上.</p>',
'Menu:iTopHub:MyExtensions' => '已安装的扩展',
'Menu:iTopHub:MyExtensions+' => '查看本机已安装的扩展',
'Menu:iTopHub:BrowseExtensions' => '从 iTop Hub 获取扩展',
'Menu:iTopHub:BrowseExtensions+' => '去 iTop Hub 浏览更多的扩展',
'Menu:iTopHub:BrowseExtensions:Description' => '<p>进入 iTop Hub 商店, 一站式查找各式各样 iTop 扩展的地方 !</br>寻找符合您要求的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到 iTop Hub 上.</p>',
'iTopHub:GoBtn' => '进入 iTop Hub',
'Menu:iTopHub:BrowseExtensions' => '从iTop Hub 获取扩展',
'Menu:iTopHub:BrowseExtensions+' => '去iTop Hub 浏览更多的扩展',
'Menu:iTopHub:BrowseExtensions:Description' => '<p>进入iTop Hub 商店, 一站式查找各iTop 扩展的地方 !</br>寻找符合您要求的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到 iTop Hub 上.</p>',
'iTopHub:GoBtn' => '进入iTop Hub',
'iTopHub:CloseBtn' => '关闭',
'iTopHub:GoBtn:Tooltip' => '跳到 www.itophub.io',
'iTopHub:OpenInNewWindow' => '从新窗口打开 iTop Hub',
'iTopHub:AutoSubmit' => '不再询问. 下次自动进入 iTop Hub .',
'iTopHub:OpenInNewWindow' => '从新窗口打开iTop Hub',
'iTopHub:AutoSubmit' => '不再询问. 下次自动进入iTop Hub .',
'UI:About:RemoteExtensionSource' => 'iTop Hub',
'iTopHub:Explanation' => '点击这个按钮您将被引导至 iTop Hub.',
'iTopHub:Explanation' => '点击这个按钮您将被引导至iTop Hub.',
'iTopHub:BackupFreeDiskSpaceIn' => '%1$s free disk space in %2$s.',
'iTopHub:FailedToCheckFreeDiskSpace' => '检查空闲的磁盘空间失败.',
@@ -46,24 +46,24 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'iTopHub:BackupFailed' => '备份失败!',
'iTopHub:Landing:Status' => '安装状态',
'iTopHub:Landing:Install' => '扩展安装进行中...',
'iTopHub:CompiledOK' => 'Compilation successful.',
'iTopHub:CompiledOK' => '编译成功.',
'iTopHub:ConfigurationSafelyReverted' => '安装时发生错误!<br/>iTop 配置将不会改变.',
'iTopHub:InstalledExtensions' => '本机已安装的扩展',
'iTopHub:ExtensionCategory:Manual' => '手动安装的扩展',
'iTopHub:ExtensionCategory:Manual+' => '下列已安装的扩展是手动将文件放置到 %1$s 目录的:',
'iTopHub:ExtensionCategory:Remote' => '从 iTop Hub 安装的扩展',
'iTopHub:ExtensionCategory:Remote+' => '下列已安装的扩展是来自 iTop Hub:',
'iTopHub:NoExtensionInThisCategory' => '尚未安装扩展.<br/><br/>浏览 iTop Hub ,去寻找符合您要求的扩展.',
'iTopHub:ExtensionCategory:Remote' => '从iTop Hub 安装的扩展',
'iTopHub:ExtensionCategory:Remote+' => '下列已安装的扩展是来自iTop Hub:',
'iTopHub:NoExtensionInThisCategory' => '尚未安装扩展.<br/><br/>浏览iTop Hub ,去寻找符合您要求的扩展.',
'iTopHub:ExtensionNotInstalled' => '未安装',
'iTopHub:GetMoreExtensions' => '从 iTop Hub 获取扩展...',
'iTopHub:GetMoreExtensions' => '从iTop Hub 获取扩展...',
'iTopHub:LandingWelcome' => '恭喜! 下列来自 iTop Hub 的扩展已被下载并安装到本机.',
'iTopHub:GoBackToITopBtn' => '返回 iTop',
'iTopHub:LandingWelcome' => '恭喜! 下列来自iTop Hub 的扩展已被下载并安装到本机.',
'iTopHub:GoBackToITopBtn' => '返回iTop',
'iTopHub:Uncompressing' => '扩展解压中...',
'iTopHub:InstallationWelcome' => '安装来自 iTop Hub 的扩展',
'iTopHub:InstallationWelcome' => '安装来自iTop Hub 的扩展',
'iTopHub:DBBackupLabel' => '本机备份',
'iTopHub:DBBackupSentence' => '在升级之前,备份数据库和 iTop 配置文件',
'iTopHub:DBBackupSentence' => '在升级之前,备份数据库和iTop 配置文件',
'iTopHub:DeployBtn' => '安装 !',
'iTopHub:DatabaseBackupProgress' => '本机备份...',

View File

@@ -1725,7 +1725,7 @@
</class>
<class id="Organization">
<fields>
<field id="overview" xsi:type="AttributeDashboard">
<field id="overview" xsi:type="AttributeDashboard" _delta="if_exists">
<definition>
<cells>
<cell id="9000" _delta="delete">

View File

@@ -1747,7 +1747,7 @@
</class>
<class id="Organization">
<fields>
<field id="overview" xsi:type="AttributeDashboard">
<field id="overview" xsi:type="AttributeDashboard" _delta="if_exists">
<definition>
<cells>
<cell id="9000" _delta="delete">

View File

@@ -33,46 +33,46 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Core:AttributeLinkedSet' => '对象数组',
'Core:AttributeLinkedSet+' => 'Any kind of objects of the same class or subclass',
'Core:AttributeDashboard' => 'Dashboard~~',
'Core:AttributeDashboard' => '面板',
'Core:AttributeDashboard+' => '~~',
'Core:AttributePhoneNumber' => 'Phone number~~',
'Core:AttributePhoneNumber' => '电话号码',
'Core:AttributePhoneNumber+' => '~~',
'Core:AttributeObsolescenceDate' => 'Obsolescence date~~',
'Core:AttributeObsolescenceDate' => '报废日期',
'Core:AttributeObsolescenceDate+' => '~~',
'Core:AttributeTagSet' => 'List of tags~~',
'Core:AttributeTagSet+' => '~~',
'Core:AttributeSet:placeholder' => 'click to add~~',
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
'Core:AttributeTagSet' => '清单',
'Core:AttributeTagSet+' => '',
'Core:AttributeSet:placeholder' => '请点击这里添加',
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
'Core:AttributeCaseLog' => 'Log~~',
'Core:AttributeCaseLog+' => '~~',
'Core:AttributeCaseLog' => '日志',
'Core:AttributeCaseLog+' => '',
'Core:AttributeMetaEnum' => 'Computed enum~~',
'Core:AttributeMetaEnum+' => '~~',
'Core:AttributeMetaEnum' => 'Computed enum~~',
'Core:AttributeMetaEnum+' => '~~',
'Core:AttributeLinkedSetIndirect' => 'Array of objects (N-N)',
'Core:AttributeLinkedSetIndirect' => '对象数组(N-N)',
'Core:AttributeLinkedSetIndirect+' => 'Any kind of objects [subclass] of the same class',
'Core:AttributeInteger' => '整数',
'Core:AttributeInteger+' => 'Numeric value (could be negative)',
'Core:AttributeInteger+' => '整数值(可以为负)',
'Core:AttributeDecimal' => 'Decimal',
'Core:AttributeDecimal+' => 'Decimal value (could be negative)',
'Core:AttributeDecimal' => '小数',
'Core:AttributeDecimal+' => '小数(可以为负)',
'Core:AttributeBoolean' => '布尔',
'Core:AttributeBoolean+' => 'Boolean',
'Core:AttributeBoolean+' => '布尔',
'Core:AttributeBoolean/Value:null' => '',
'Core:AttributeBoolean/Value:yes' => '是',
'Core:AttributeBoolean/Value:no' => '否',
'Core:AttributeArchiveFlag' => '是否归档',
'Core:AttributeArchiveFlag/Value:yes' => '是',
'Core:AttributeArchiveFlag/Value:yes+' => 'This object is visible only in archive mode',
'Core:AttributeArchiveFlag/Value:yes+' => '该对象仅在归档模式可见',
'Core:AttributeArchiveFlag/Value:no' => '否',
'Core:AttributeArchiveFlag/Label' => '已归档',
'Core:AttributeArchiveFlag/Label+' => '',
@@ -89,13 +89,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Core:AttributeObsolescenceDate/Label+' => 'Approximative date at which the object has been considered obsolete',
'Core:AttributeString' => '字符串',
'Core:AttributeString+' => 'Alphanumeric string',
'Core:AttributeString+' => '字符串',
'Core:AttributeClass' => '类',
'Core:AttributeClass+' => 'Class',
'Core:AttributeClass+' => '类别',
'Core:AttributeApplicationLanguage' => '用户语言',
'Core:AttributeApplicationLanguage+' => 'Language and country (EN US)',
'Core:AttributeApplicationLanguage+' => '语言和国家地区(EN US)',
'Core:AttributeFinalClass' => '类 (auto)',
'Core:AttributeFinalClass+' => 'Real class of the object (automatically created by the core)',
@@ -126,11 +126,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Core:AttributeEnum' => 'Enum',
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
'Core:AttributeTemplateString' => 'Template string',
'Core:AttributeTemplateString+' => 'String containing placeholders',
'Core:AttributeTemplateString' => '字符模板',
'Core:AttributeTemplateString+' => '包含占位符的字符串',
'Core:AttributeTemplateText' => '文字模板',
'Core:AttributeTemplateText+' => 'Text containing placeholders',
'Core:AttributeTemplateText+' => '包含占位符的文本',
'Core:AttributeTemplateHTML' => 'HTML 模板',
'Core:AttributeTemplateHTML+' => 'HTML containing placeholders',
@@ -169,7 +169,7 @@ Operators:<br/>
</p>',
'Core:AttributeDeadline' => '截止日期',
'Core:AttributeDeadline+' => 'Date, displayed relatively to the current time',
'Core:AttributeDeadline+' => '日期, 显示与当前的相对时间',
'Core:AttributeExternalKey' => '外键',
'Core:AttributeExternalKey+' => 'External (or foreign) key',
@@ -184,10 +184,10 @@ Operators:<br/>
'Core:AttributeURL+' => 'Absolute or relative URL as a text string',
'Core:AttributeBlob' => 'Blob',
'Core:AttributeBlob+' => 'Any binary content (document)',
'Core:AttributeBlob+' => '任何二进制内容(文档)',
'Core:AttributeOneWayPassword' => 'One way password',
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
'Core:AttributeOneWayPassword' => '单向密码',
'Core:AttributeOneWayPassword+' => '单向加密(或哈希) 的密码',
'Core:AttributeTable' => 'Table',
'Core:AttributeTable+' => 'Indexed array having two dimensions',
@@ -199,10 +199,10 @@ Operators:<br/>
'Core:AttributeFriendlyName+' => 'Attribute created automatically ; the friendly name is computed after several attributes',
'Core:FriendlyName-Label' => '全称',
'Core:FriendlyName-Description' => 'Full name',
'Core:FriendlyName-Description' => '全称',
'Core:AttributeTag' => 'Tags~~',
'Core:AttributeTag+' => 'Tags~~',
'Core:AttributeTag' => '标签',
'Core:AttributeTag+' => '标签',
));
@@ -279,12 +279,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpSetAttributeScalar' => '属性更',
'Class:CMDBChangeOpSetAttributeScalar+' => 'Object scalar properties change tracking',
'Class:CMDBChangeOpSetAttributeScalar' => '属性更改跟踪',
'Class:CMDBChangeOpSetAttributeScalar+' => '对象属性更改跟踪',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => '旧值',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => 'previous value of the attribute',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => '以前该属性的值',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => '新值',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => 'new value of the attribute',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => '属性的新值',
));
// Used by CMDBChangeOp... & derived classes
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
@@ -307,10 +307,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpSetAttributeBlob' => '数据修改',
'Class:CMDBChangeOpSetAttributeBlob+' => 'data change tracking',
'Class:CMDBChangeOpSetAttributeBlob' => '数据变更跟踪',
'Class:CMDBChangeOpSetAttributeBlob+' => '数据变更跟踪',
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => '之前的值',
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => 'previous contents of the attribute',
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => '该数据之前的内容',
));
//
@@ -318,10 +318,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpSetAttributeText' => '文本修改',
'Class:CMDBChangeOpSetAttributeText+' => '跟踪文本修改',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Previous data',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => 'previous contents of the attribute',
'Class:CMDBChangeOpSetAttributeText' => '文本变更跟踪',
'Class:CMDBChangeOpSetAttributeText+' => '文本变更跟踪',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => '旧值',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => '该文本之前的内容',
));
//
@@ -330,14 +330,14 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Event' => '日志事件',
'Class:Event+' => 'An application internal event',
'Class:Event+' => '应用程序的内部事件',
'Class:Event/Attribute:message' => '消息',
'Class:Event/Attribute:message+' => 'short description of the event',
'Class:Event/Attribute:date' => '日期',
'Class:Event/Attribute:date+' => 'date and time at which the changes have been recorded',
'Class:Event/Attribute:date+' => '记录的日期和时间',
'Class:Event/Attribute:userinfo' => '用户信息',
'Class:Event/Attribute:userinfo+' => 'identification of the user that was doing the action that triggered this event',
'Class:Event/Attribute:finalclass' => 'Event sub-class',
'Class:Event/Attribute:finalclass' => '事件子类别',
'Class:Event/Attribute:finalclass+' => 'Name of the final class',
));
@@ -496,7 +496,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:ActionEmail' => '邮件通知',
'Class:ActionEmail+' => '',
'Class:ActionEmail/Attribute:test_recipient' => 'Test recipient',
'Class:ActionEmail/Attribute:test_recipient' => '测试收件人',
'Class:ActionEmail/Attribute:test_recipient+' => 'Detination in case status is set to "Test"',
'Class:ActionEmail/Attribute:from' => '发件人',
'Class:ActionEmail/Attribute:from+' => 'Will be sent into the email header',
@@ -505,15 +505,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:ActionEmail/Attribute:to' => '收件人',
'Class:ActionEmail/Attribute:to+' => 'Destination of the email',
'Class:ActionEmail/Attribute:cc' => '抄送',
'Class:ActionEmail/Attribute:cc+' => 'Carbon Copy',
'Class:ActionEmail/Attribute:cc+' => '明文抄送',
'Class:ActionEmail/Attribute:bcc' => '密抄',
'Class:ActionEmail/Attribute:bcc+' => 'Blind Carbon Copy',
'Class:ActionEmail/Attribute:bcc+' => '加密抄送',
'Class:ActionEmail/Attribute:subject' => '主题',
'Class:ActionEmail/Attribute:subject+' => 'Title of the email',
'Class:ActionEmail/Attribute:subject+' => '邮件主题',
'Class:ActionEmail/Attribute:body' => '正文',
'Class:ActionEmail/Attribute:body+' => 'Contents of the email',
'Class:ActionEmail/Attribute:body+' => '邮件内容',
'Class:ActionEmail/Attribute:importance' => '重要性',
'Class:ActionEmail/Attribute:importance+' => 'Importance flag',
'Class:ActionEmail/Attribute:importance+' => '重要性标记',
'Class:ActionEmail/Attribute:importance/Value:low' => '低',
'Class:ActionEmail/Attribute:importance/Value:low+' => '低',
'Class:ActionEmail/Attribute:importance/Value:normal' => '普通',
@@ -530,10 +530,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Trigger' => '触发器',
'Class:Trigger+' => 'Custom event handler',
'Class:Trigger/Attribute:description' => '描述',
'Class:Trigger/Attribute:description+' => 'one line description',
'Class:Trigger/Attribute:description+' => '一行描述',
'Class:Trigger/Attribute:action_list' => '触发的行为',
'Class:Trigger/Attribute:action_list+' => 'Actions performed when the trigger is activated',
'Class:Trigger/Attribute:finalclass' => 'Trigger sub-class',
'Class:Trigger/Attribute:finalclass' => '触发器子类别',
'Class:Trigger/Attribute:finalclass+' => 'Name of the final class',
));
@@ -604,7 +604,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TriggerOnObjectDelete' => 'Trigger (on object deletion)~~',
'Class:TriggerOnObjectDelete' => '触发器 (对象删除时)',
'Class:TriggerOnObjectDelete+' => 'Trigger on object deletion of [a child class of] the given class~~',
));
@@ -613,7 +613,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TriggerOnObjectUpdate' => 'Trigger (on object update)~~',
'Class:TriggerOnObjectUpdate' => '触发器 (对象更新时)',
'Class:TriggerOnObjectUpdate+' => 'Trigger on object update of [a child class of] the given class~~',
'Class:TriggerOnObjectUpdate/Attribute:target_attcodes' => 'Target fields~~',
'Class:TriggerOnObjectUpdate/Attribute:target_attcodes+' => '~~',
@@ -626,7 +626,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TriggerOnThresholdReached' => '触发器 (基于阀值)',
'Class:TriggerOnThresholdReached+' => '当达到某个阀值时触发',
'Class:TriggerOnThresholdReached/Attribute:stop_watch_code' => 'Stop watch',
'Class:TriggerOnThresholdReached/Attribute:stop_watch_code' => '秒表',
'Class:TriggerOnThresholdReached/Attribute:stop_watch_code+' => '',
'Class:TriggerOnThresholdReached/Attribute:threshold_index' => '阀值',
'Class:TriggerOnThresholdReached/Attribute:threshold_index+' => '',
@@ -660,7 +660,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:SynchroDataSource/Attribute:description' => '描述',
'Class:SynchroDataSource/Attribute:status' => '状态',
'Class:SynchroDataSource/Attribute:scope_class' => '目标类',
'Class:SynchroDataSource/Attribute:user_id' => 'User',
'Class:SynchroDataSource/Attribute:user_id' => '用户',
'Class:SynchroDataSource/Attribute:notify_contact_id' => '要通知的人',
'Class:SynchroDataSource/Attribute:notify_contact_id+' => 'Contact to notify in case of error',
'Class:SynchroDataSource/Attribute:url_icon' => '图标的超链接',
@@ -777,7 +777,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpSetAttributeCaseLog' => 'Case Log',
'Class:CMDBChangeOpSetAttributeCaseLog/Attribute:lastentry' => 'Last Entry',
'Class:SynchroDataSource' => '同步数据源',
'Class:SynchroDataSource/Attribute:status/Value:implementation' => 'Implementation',
'Class:SynchroDataSource/Attribute:status/Value:implementation' => '上线',
'Class:SynchroDataSource/Attribute:status/Value:obsolete' => '废弃',
'Class:SynchroDataSource/Attribute:status/Value:production' => '生产',
'Class:SynchroDataSource/Attribute:scope_restriction' => '范围限制',
@@ -801,13 +801,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:nobody' => 'Nobody',
'Class:SynchroAttribute' => '同步属性',
'Class:SynchroAttribute/Attribute:sync_source_id' => '同步数据源',
'Class:SynchroAttribute/Attribute:attcode' => 'Attribute Code',
'Class:SynchroAttribute/Attribute:attcode' => '属性代码',
'Class:SynchroAttribute/Attribute:update' => '更新',
'Class:SynchroAttribute/Attribute:reconcile' => 'Reconcile',
'Class:SynchroAttribute/Attribute:update_policy' => '更新策略',
'Class:SynchroAttribute/Attribute:update_policy/Value:master_locked' => '加锁',
'Class:SynchroAttribute/Attribute:update_policy/Value:master_unlocked' => '解锁',
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => 'Initialize if empty',
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => '如果为空则初始化',
'Class:SynchroAttribute/Attribute:finalclass' => 'Class',
'Class:SynchroAttExtKey' => 'Synchro Attribute (ExtKey)',
'Class:SynchroAttExtKey/Attribute:reconciliation_attcode' => 'Reconciliation Attribute',
@@ -952,15 +952,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TagSetFieldData/Attribute:code' => 'Code~~',
'Class:TagSetFieldData/Attribute:code+' => 'Internal code. Must contain at least 3 alphanumeric characters~~',
'Class:TagSetFieldData/Attribute:label' => 'Label~~',
'Class:TagSetFieldData/Attribute:label+' => 'Displayed label~~',
'Class:TagSetFieldData/Attribute:description' => 'Description~~',
'Class:TagSetFieldData/Attribute:description+' => 'Description~~',
'Class:TagSetFieldData/Attribute:label' => '标签',
'Class:TagSetFieldData/Attribute:label+' => '显示的标签',
'Class:TagSetFieldData/Attribute:description' => '描述',
'Class:TagSetFieldData/Attribute:description+' => '描述',
'Class:TagSetFieldData/Attribute:finalclass' => 'Tag class~~~~',
'Class:TagSetFieldData/Attribute:obj_class' => 'Object class~~~~',
'Class:TagSetFieldData/Attribute:obj_attcode' => 'Field code~~~~',
'Core:TagSetFieldData:ErrorDeleteUsedTag' => 'Used tags cannot be deleted~~',
'Core:TagSetFieldData:ErrorDeleteUsedTag' => '已使用的标签无法删除',
'Core:TagSetFieldData:ErrorDuplicateTagCodeOrLabel' => 'Tags codes or labels must be unique~~',
'Core:TagSetFieldData:ErrorTagCodeSyntax' => 'Tags code must contain between 3 and %1$d alphanumeric characters, starting with a letter.~~',
'Core:TagSetFieldData:ErrorTagCodeReservedWord' => 'The chosen tag code is a reserved word~~',
@@ -976,63 +976,63 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
// Class: DBProperty
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:DBProperty' => 'DB property~~',
'Class:DBProperty' => 'DB 属性',
'Class:DBProperty+' => '~~',
'Class:DBProperty/Attribute:name' => 'Name~~',
'Class:DBProperty/Attribute:name+' => '~~',
'Class:DBProperty/Attribute:description' => 'Description~~',
'Class:DBProperty/Attribute:description+' => '~~',
'Class:DBProperty/Attribute:value' => 'Value~~',
'Class:DBProperty/Attribute:value+' => '~~',
'Class:DBProperty/Attribute:change_date' => 'Change date~~',
'Class:DBProperty/Attribute:change_date+' => '~~',
'Class:DBProperty/Attribute:change_comment' => 'Change comment~~',
'Class:DBProperty/Attribute:change_comment+' => '~~',
'Class:DBProperty/Attribute:name' => '名称',
'Class:DBProperty/Attribute:name+' => '',
'Class:DBProperty/Attribute:description' => '描述',
'Class:DBProperty/Attribute:description+' => '',
'Class:DBProperty/Attribute:value' => '',
'Class:DBProperty/Attribute:value+' => '',
'Class:DBProperty/Attribute:change_date' => '修改日期',
'Class:DBProperty/Attribute:change_date+' => '',
'Class:DBProperty/Attribute:change_comment' => '备注',
'Class:DBProperty/Attribute:change_comment+' => '',
));
//
// Class: BackgroundTask
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:BackgroundTask' => 'Background task~~',
'Class:BackgroundTask' => '后台任务',
'Class:BackgroundTask+' => '~~',
'Class:BackgroundTask/Attribute:class_name' => 'Class name~~',
'Class:BackgroundTask/Attribute:class_name+' => '~~',
'Class:BackgroundTask/Attribute:first_run_date' => 'First run date~~',
'Class:BackgroundTask/Attribute:first_run_date' => '首次运行时间',
'Class:BackgroundTask/Attribute:first_run_date+' => '~~',
'Class:BackgroundTask/Attribute:latest_run_date' => 'Latest run date~~',
'Class:BackgroundTask/Attribute:latest_run_date' => '最近运行时间',
'Class:BackgroundTask/Attribute:latest_run_date+' => '~~',
'Class:BackgroundTask/Attribute:next_run_date' => 'Next run date~~',
'Class:BackgroundTask/Attribute:next_run_date' => '下次运行时间',
'Class:BackgroundTask/Attribute:next_run_date+' => '~~',
'Class:BackgroundTask/Attribute:total_exec_count' => 'Total exec. count~~',
'Class:BackgroundTask/Attribute:total_exec_count' => '一共执行的次数',
'Class:BackgroundTask/Attribute:total_exec_count+' => '~~',
'Class:BackgroundTask/Attribute:latest_run_duration' => 'Latest run duration~~',
'Class:BackgroundTask/Attribute:latest_run_duration' => '最近运行时长',
'Class:BackgroundTask/Attribute:latest_run_duration+' => '~~',
'Class:BackgroundTask/Attribute:min_run_duration' => 'Min. run duration~~',
'Class:BackgroundTask/Attribute:min_run_duration' => '最少运行时长',
'Class:BackgroundTask/Attribute:min_run_duration+' => '~~',
'Class:BackgroundTask/Attribute:max_run_duration' => 'Max. run duration~~',
'Class:BackgroundTask/Attribute:max_run_duration' => '最多运行时长',
'Class:BackgroundTask/Attribute:max_run_duration+' => '~~',
'Class:BackgroundTask/Attribute:average_run_duration' => 'Average run duration~~',
'Class:BackgroundTask/Attribute:average_run_duration' => '平均运行时长',
'Class:BackgroundTask/Attribute:average_run_duration+' => '~~',
'Class:BackgroundTask/Attribute:running' => 'Running~~',
'Class:BackgroundTask/Attribute:running+' => '~~',
'Class:BackgroundTask/Attribute:status' => 'Status~~',
'Class:BackgroundTask/Attribute:status+' => '~~',
'Class:BackgroundTask/Attribute:running' => '运行中',
'Class:BackgroundTask/Attribute:running+' => '',
'Class:BackgroundTask/Attribute:status' => '状态',
'Class:BackgroundTask/Attribute:status+' => '',
));
//
// Class: AsyncTask
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:AsyncTask' => 'Async. task~~',
'Class:AsyncTask+' => '~~',
'Class:AsyncTask/Attribute:created' => 'Created~~',
'Class:AsyncTask/Attribute:created+' => '~~',
'Class:AsyncTask/Attribute:started' => 'Started~~',
'Class:AsyncTask/Attribute:started+' => '~~',
'Class:AsyncTask/Attribute:planned' => 'Planned~~',
'Class:AsyncTask/Attribute:planned+' => '~~',
'Class:AsyncTask/Attribute:event_id' => 'Event~~',
'Class:AsyncTask' => '异步任务',
'Class:AsyncTask+' => '',
'Class:AsyncTask/Attribute:created' => '已创建',
'Class:AsyncTask/Attribute:created+' => '',
'Class:AsyncTask/Attribute:started' => '已开始',
'Class:AsyncTask/Attribute:started+' => '',
'Class:AsyncTask/Attribute:planned' => '已计划',
'Class:AsyncTask/Attribute:planned+' => '',
'Class:AsyncTask/Attribute:event_id' => '事件',
'Class:AsyncTask/Attribute:event_id+' => '~~',
'Class:AsyncTask/Attribute:finalclass' => 'Final class~~',
'Class:AsyncTask/Attribute:finalclass+' => '~~',

View File

@@ -64,7 +64,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TagSetFieldData/Attribute:obj_class' => 'Object class~~',
'Class:TagSetFieldData/Attribute:obj_attcode' => 'Field code~~',
'Class:AuditRule/Attribute:query' => '要运行的查询',
'Class:AuditRule/Attribute:query+' => '要运行的OQL表达式',
'Class:AuditRule/Attribute:query+' => '要运行的OQL 表达式',
'Class:AuditRule/Attribute:valid_flag' => '是否有效?',
'Class:AuditRule/Attribute:valid_flag+' => '若规则返回有效对象则True,否则False',
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'true',
@@ -83,13 +83,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Query' => '查询',
'Class:Query+' => 'A query is a data set defined in a dynamic way',
'Class:Query+' => '查询是一种动态的数据集',
'Class:Query/Attribute:name' => '名称',
'Class:Query/Attribute:name+' => 'Identifies the query',
'Class:Query/Attribute:name+' => '查询的名称',
'Class:Query/Attribute:description' => '描述',
'Class:Query/Attribute:description+' => 'Long description for the query (purpose, usage, etc.)',
'Class:QueryOQL/Attribute:fields' => 'Fields~~',
'Class:QueryOQL/Attribute:fields+' => 'Coma separated list of attributes (or alias.attribute) to export~~',
'Class:Query/Attribute:description+' => '请描述本查询 (目的、用法等等.)',
'Class:QueryOQL/Attribute:fields' => '区域',
'Class:QueryOQL/Attribute:fields+' => '属性之间使用逗号分隔 (or alias.attribute) to export~~',
'Class:QueryOQL' => 'OQL 查询',
'Class:QueryOQL+' => 'A query based on the Object Query Language',
'Class:QueryOQL/Attribute:oql' => '表达式',
@@ -137,12 +137,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:User/Error:LoginMustBeUnique' => '登录名必须唯一 - "%1s" 已经被使用.',
'Class:User/Error:AtLeastOneProfileIsNeeded' => '必须指定至少一个角色给该用户.',
'Class:User/Error:AtLeastOneOrganizationIsNeeded' => 'At least one organization must be assigned to this user.',
'Class:User/Error:OrganizationNotAllowed' => 'Organization not allowed.',
'Class:User/Error:UserOrganizationNotAllowed' => 'The user account does not belong to your allowed organizations.',
'Class:User/Error:PersonIsMandatory' => 'The Contact is mandatory.~~',
'Class:User/Error:AtLeastOneOrganizationIsNeeded' => '必须为该用户指定一个组织.',
'Class:User/Error:OrganizationNotAllowed' => '该组织不被允许.',
'Class:User/Error:UserOrganizationNotAllowed' => '该用户账户不属于那个组织.',
'Class:User/Error:PersonIsMandatory' => '联系人必填.',
'Class:UserInternal' => '内部用户',
'Class:UserInternal+' => 'User defined within iTop',
'Class:UserInternal+' => 'iTop 内部定义的用户',
));
//
@@ -317,14 +317,14 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
// Class: UserDashboard
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:UserDashboard' => 'User dashboard~~',
'Class:UserDashboard+' => '~~',
'Class:UserDashboard/Attribute:user_id' => 'User~~',
'Class:UserDashboard/Attribute:user_id+' => '~~',
'Class:UserDashboard/Attribute:menu_code' => 'Menu code~~',
'Class:UserDashboard/Attribute:menu_code+' => '~~',
'Class:UserDashboard/Attribute:contents' => 'Contents~~',
'Class:UserDashboard/Attribute:contents+' => '~~',
'Class:UserDashboard' => '用户面板',
'Class:UserDashboard+' => '',
'Class:UserDashboard/Attribute:user_id' => '用户',
'Class:UserDashboard/Attribute:user_id+' => '',
'Class:UserDashboard/Attribute:menu_code' => '菜单代码',
'Class:UserDashboard/Attribute:menu_code+' => '',
'Class:UserDashboard/Attribute:contents' => '内容',
'Class:UserDashboard/Attribute:contents+' => '',
));
//
@@ -352,30 +352,30 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Menu:WelcomeMenuPage+' => '欢迎使用iTop', // Duplicated into itop-welcome-itil (will be removed from here...)
'UI:WelcomeMenu:Title' => '欢迎使用iTop',
'UI:WelcomeMenu:LeftBlock' => '<p>iTop是完全开源的IT操作门户.</p>
'UI:WelcomeMenu:LeftBlock' => '<p>iTop 是完全开源的IT 操作门户.</p>
<ul>它包括:
<li>完整的CMDB(Configuration management database)用于登记和管理您的IT资产.</li>
<li>事件管理模块用于跟踪和传递所有发生在IT系统中的事件.</li>
<li>变更管理模块用于规划和跟踪IT环境中发生的变化.</li>
<li>完整的CMDB(Configuration management database)用于登记和管理您的IT 资产.</li>
<li>事件管理模块用于跟踪和传递所有发生在IT 系统中的事件.</li>
<li>变更管理模块用于规划和跟踪IT 环境中发生的变化.</li>
<li>已知错误数据库可加速事件的处理.</li>
<li>停机模块记录所有计划内的停机并通知对应的联系人.</li>
<li>通过仪表盘迅速获得IT状态的概况.</li>
<li>通过仪表盘迅速获得IT 状态的概况.</li>
</ul>
<p>所有模块可以各自独立地、一步步地部署.</p>',
'UI:WelcomeMenu:RightBlock' => '<p>iTop是面向服务供应商的, 它使得IT工程师能够更方便地管理多客户和多组织.
'UI:WelcomeMenu:RightBlock' => '<p>iTop 是面向服务供应商的, 它使得IT 工程师能够更方便地管理多客户和多组织.
<ul>iTop 提供功能丰富的业务处理流程:
<li>提高IT管理效率</li>
<li>提升IT可操作能力</li>
<li>提高IT 管理效率</li>
<li>提升IT 可操作能力</li>
<li>提高用户满意度,提升业务能力.</li>
</ul>
</p>
<p>iTop是完全开放的,可被集成到现有的IT管理架构之中.</p>
<p>iTop 是完全开放的,可被集成到现有的IT 管理架构之中.</p>
<p>
<ul>利用这个新一代的IT操作门户, 可以帮助您:
<li>更好地管理越来越复杂的IT环境.</li>
<li>逐步实现ITIL流程.</li>
<li>管理IT中最重要的资产: 文档.</li>
<ul>利用这个新一代的IT 操作门户, 可以帮助您:
<li>更好地管理越来越复杂的IT 环境.</li>
<li>逐步实现ITIL 流程.</li>
<li>管理IT 中最重要的资产: 文档.</li>
</ul>
</p>',
'UI:WelcomeMenu:AllOpenRequests' => '所有打开的需求: %1$d',
@@ -516,7 +516,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:SelectOne' => '-- 请选择 --',
'UI:Login:Welcome' => '欢迎使用iTop!',
'UI:Login:IncorrectLoginPassword' => '用户名或密码错误, 请重试.',
'UI:Login:IdentifyYourself' => '在登录之前,请完成身份认证',
'UI:Login:IdentifyYourself' => '请完成身份认证',
'UI:Login:UserNamePrompt' => '用户名',
'UI:Login:PasswordPrompt' => '密码',
'UI:Login:ForgotPwd' => '忘记密码?',
@@ -609,13 +609,14 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:CSVImport:CommentsAndHeader' => '注释和头',
'UI:CSVImport:SelectClass' => '选择要导入的类别:',
'UI:CSVImport:AdvancedMode' => '高级模式',
'UI:CSVImport:AdvancedMode+' => '在高级模式中,对象的"id" (主键) 可以被用来修改和重命名对象.不管怎样,列 "id" (如果存在) 只能被用做一个搜索条件,不能与其它搜索条件混用.',
'UI:CSVImport:SelectAClassFirst' => '首先选择一个类以配置映射.',
'UI:CSVImport:AdvancedMode+' => 'In advanced mode the "id" (primary key) of the objects can be used to update and rename objects.' .
'However the column "id" (if present) can only be used as a search criteria and can not be combined with any other search criteria.',
'UI:CSVImport:SelectAClassFirst' => '要配置映射,请先选择一个类.',
'UI:CSVImport:HeaderFields' => '栏目',
'UI:CSVImport:HeaderMappings' => '映射',
'UI:CSVImport:HeaderSearch' => '搜索?',
'UI:CSVImport:AlertIncompleteMapping' => '请为每个栏选择一个映射.',
'UI:CSVImport:AlertMultipleMapping' => 'Please make sure that a target field is mapped only once.',
'UI:CSVImport:AlertMultipleMapping' => '请确保目标区域仅被映射一次.',
'UI:CSVImport:AlertNoSearchCriteria' => '请选择至少一个搜索条件',
'UI:CSVImport:Encoding' => '字符编码',
'UI:UniversalSearchTitle' => 'iTop - 全局搜索',
@@ -904,28 +905,28 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI-ConfigurationManagementMenu-InfraByType' => '按类别划分基础架构对象',
'UI-ConfigurationManagementMenu-InfraByStatus' => '按状态划分基础架构对象',
'UI:ConfigMgmtMenuOverview:Title' => '配置管理仪表盘',
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => '按状态配置项目',
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => '按类别配置项目',
'UI:ConfigMgmtMenuOverview:Title' => '配置管理仪表盘',
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => '按状态配置项目',
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => '按类别配置项目',
'UI:RequestMgmtMenuOverview:Title' => '需求管理仪表盘',
'UI-RequestManagementOverview-RequestByService' => '按服务划分用户需求',
'UI-RequestManagementOverview-RequestByPriority' => '按优先级划分用户需求',
'UI-RequestManagementOverview-RequestUnassigned' => '尚未分配给办理人的用户需求',
'UI:RequestMgmtMenuOverview:Title' => '需求管理仪表盘',
'UI-RequestManagementOverview-RequestByService' => '按服务划分用户需求',
'UI-RequestManagementOverview-RequestByPriority' => '按优先级划分用户需求',
'UI-RequestManagementOverview-RequestUnassigned' => '尚未分配给办理人的用户需求',
'UI:IncidentMgmtMenuOverview:Title' => '事件管理仪表盘',
'UI-IncidentManagementOverview-IncidentByService' => '按服务级划分事件',
'UI-IncidentManagementOverview-IncidentByPriority' => '按优先级划分事件',
'UI-IncidentManagementOverview-IncidentUnassigned' => '尚未分配给办理人的事件',
'UI:IncidentMgmtMenuOverview:Title' => '事件管理仪表盘',
'UI-IncidentManagementOverview-IncidentByService' => '按服务级划分事件',
'UI-IncidentManagementOverview-IncidentByPriority' => '按优先级划分事件',
'UI-IncidentManagementOverview-IncidentUnassigned' => '尚未分配给办理人的事件',
'UI:ChangeMgmtMenuOverview:Title' => '变更管理仪表盘',
'UI-ChangeManagementOverview-ChangeByType' => '按类别划分变更',
'UI-ChangeManagementOverview-ChangeUnassigned' => '尚未分配给办理人的变更',
'UI-ChangeManagementOverview-ChangeWithOutage' => '变更引起的停机',
'UI:ChangeMgmtMenuOverview:Title' => '变更管理仪表盘',
'UI-ChangeManagementOverview-ChangeByType' => '按类别划分变更',
'UI-ChangeManagementOverview-ChangeUnassigned' => '尚未分配给办理人的变更',
'UI-ChangeManagementOverview-ChangeWithOutage' => '变更引起的停机',
'UI:ServiceMgmtMenuOverview:Title' => '服务管理仪表盘',
'UI-ServiceManagementOverview-CustomerContractToRenew' => '客户合同需在30日内更新',
'UI-ServiceManagementOverview-ProviderContractToRenew' => '供应商合同需在30日内更新',
'UI:ServiceMgmtMenuOverview:Title' => '服务管理仪表盘',
'UI-ServiceManagementOverview-CustomerContractToRenew' => '客户合同需在30日内更新',
'UI-ServiceManagementOverview-ProviderContractToRenew' => '供应商合同需在30日内更新',
'UI:ContactsMenu' => '联系人',
'UI:ContactsMenu+' => '联系人',
@@ -948,13 +949,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:NotificationsMenu:Title' => '配置 <span class="hilite">通知</span>',
'UI:NotificationsMenu:Help' => '帮助',
'UI:NotificationsMenu:HelpContent' => '<p>在iTop 中, 通知可以被自定义. 它们是基于两个对象集: <i>触发器和操作</i>.</p>
<p><i><b>触发器</b></i> 定义了什么时候通知将被发送. 有3种触发器, 覆盖了对象生命周期的3个阶段:
<p><i><b>触发器</b></i> 定义了什么时候发送通知. iTop core 自带一些触发器, 另一些触发器可由扩展提供:
<ol>
<li> "当对象创建时" ,即对象创建时会触发的操作.</li>
<li> "进入指定状态时" ,即对象变为指定状态之前触发的操作(状态从一个变为另一个)</li>
<li> "离开指定状态时" ,即对象的指定状态转变成其它状态时触发的操作</li>
<li> "基于阀值" 即对象的TTR 或 TTO 达到某个阀值时</li>
<li> "当对象更新时" ,即工单发生变化时触发的操作</li>
<li>Some triggers are executed when an object of the specified class is <b>created</b>, <b>updated</b> or <b>deleted</b>.</li>
<li>Some triggers are executed when an object of a given class <b>enter</b> or <b>leave</b> a specified </b>state</b>.</li>
<li>Some triggers are executed when a <b>threshold on TTO or TTR</b> has been <b>reached</b>.</li>
</ol>
</p>
<p>
@@ -972,11 +971,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:NotificationsMenu:Actions' => '操作',
'UI:NotificationsMenu:AvailableActions' => '有效的操作',
'Menu:TagAdminMenu' => 'Tags configuration~~',
'Menu:TagAdminMenu+' => 'Tags values management~~',
'UI:TagAdminMenu:Title' => 'Tags configuration~~',
'UI:TagAdminMenu:NoTags' => 'No Tag field configured~~',
'UI:TagSetFieldData:Error' => 'Error: %1$s~~',
'Menu:TagAdminMenu' => '标签配置',
'Menu:TagAdminMenu+' => '标签值管理',
'UI:TagAdminMenu:Title' => '标签配置',
'UI:TagAdminMenu:NoTags' => '未配置标签',
'UI:TagSetFieldData:Error' => '错误: %1$s',
'Menu:AuditCategories' => '审计类别', // Duplicated into itop-welcome-itil (will be removed from here...)
'Menu:AuditCategories+' => '审计类别', // Duplicated into itop-welcome-itil (will be removed from here...)
@@ -1005,8 +1004,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Menu:UserAccountsMenu+' => '用户帐户', // Duplicated into itop-welcome-itil (will be removed from here...)
'Menu:UserAccountsMenu:Title' => '用户帐户', // Duplicated into itop-welcome-itil (will be removed from here...)
'UI:iTopVersion:Short' => 'iTop-CN version %1$s',
'UI:iTopVersion:Long' => 'iTop-CN version %1$s-%2$s built on %3$s by Purple_Grape',
'UI:iTopVersion:Short' => '%1$s version %2$s',
'UI:iTopVersion:Long' => '%1$s version %2$s-%3$s built on %4$s',
'UI:PropertiesTab' => '属性',
'UI:OpenDocumentInNewWindow_' => '在新窗口打开文档: %1$s',
@@ -1015,7 +1014,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:Download-CSV' => '下载 %1$s',
'UI:DeadlineMissedBy_duration' => '超过 %1$s',
'UI:Deadline_LessThan1Min' => '< 1 min',
'UI:Deadline_LessThan1Min' => '< 1 分钟',
'UI:Deadline_Minutes' => '%1$d min',
'UI:Deadline_Hours_Minutes' => '%1$dh %2$dmin',
'UI:Deadline_Days_Hours_Minutes' => '%1$dd %2$dh %3$dmin',
@@ -1131,7 +1130,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:ArchiveMode:Banner' => '归档模式',
'UI:ArchiveMode:Banner+' => '已归档的对象可见但不允许修改',
'UI:FavoriteOrganizations' => '快速访问',
'UI:FavoriteOrganizations+' => '为了能够通过首页左侧菜单快速访问,请检查下面的组织列表. 请注意,这并不是一个安全设置, 其他组织的对象依然可以通过选择 "所有组织" 下拉列表看到.',
'UI:FavoriteOrganizations+' => '进入组织下的列表,可实现通过下拉菜单快速访问.'.
'请注意,这并不是一个安全设置, 其他组织的对象依然可以通过选择 "所有组织" 下拉列表看到.',
'UI:FavoriteLanguage' => '用户界面',
'UI:Favorites:SelectYourLanguage' => '选择语言',
'UI:FavoriteOtherSettings' => '其他设置',
@@ -1147,13 +1147,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:Button:Refresh' => '刷新',
'UI:Button:GoPrint' => '打印...',
'UI:ExplainPrintable' => '点击 %1$s 图标可隐藏打印内容.<br/>在打印之前可使用浏览器的 "打印预览" 功能.<br/>注: 这个页首和其他控制面板不会被打印.',
'UI:PrintResolution:FullSize' => 'Full size~~',
'UI:PrintResolution:A4Portrait' => 'A4 Portrait~~',
'UI:PrintResolution:A4Landscape' => 'A4 Landscape~~',
'UI:PrintResolution:FullSize' => '全尺寸',
'UI:PrintResolution:A4Portrait' => 'A4 纵向',
'UI:PrintResolution:A4Landscape' => 'A4 横向',
'UI:PrintResolution:LetterPortrait' => 'Letter Portrait~~',
'UI:PrintResolution:LetterLandscape' => 'Letter Landscape~~',
'UI:Toggle:StandardDashboard' => 'Standard~~',
'UI:Toggle:CustomDashboard' => 'Custom~~',
'UI:Toggle:StandardDashboard' => '标准',
'UI:Toggle:CustomDashboard' => '自定义',
'UI:ConfigureThisList' => '配置这个列表...',
'UI:ListConfigurationTitle' => '列表配置',
@@ -1201,16 +1201,16 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:Form:Property' => '属性',
'UI:Form:Value' => '值',
'UI:DashletUnknown:Label' => 'Unknown',
'UI:DashletUnknown:Label' => '未知',
'UI:DashletUnknown:Description' => 'Unknown dashlet (might have been uninstalled)',
'UI:DashletUnknown:RenderText:View' => 'Unable to render this dashlet.',
'UI:DashletUnknown:RenderText:Edit' => 'Unable to render this dashlet (class "%1$s"). Check with your administrator if it is still available.',
'UI:DashletUnknown:RenderNoDataText:Edit' => 'No preview available for this dashlet (class "%1$s").',
'UI:DashletUnknown:Prop-XMLConfiguration' => '配置 (显示为纯 XML)',
'UI:DashletProxy:Label' => 'Proxy',
'UI:DashletProxy:Label' => '代理',
'UI:DashletProxy:Description' => 'Proxy dashlet',
'UI:DashletProxy:RenderNoDataText:Edit' => 'No preview available for this third-party dashlet (class "%1$s").',
'UI:DashletProxy:RenderNoDataText:Edit' => '第三方组件无法预览(class "%1$s").',
'UI:DashletProxy:Prop-XMLConfiguration' => '配置 (显示为纯 XML)',
'UI:DashletPlainText:Label' => '文本',
@@ -1243,12 +1243,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:DashletGroupByBars:Label' => '柱状图',
'UI:DashletGroupByBars:Description' => '柱状图',
'UI:DashletGroupByTable:Label' => '分组 (表)',
'UI:DashletGroupByTable:Description' => 'List (Grouped by a field)',
'UI:DashletGroupByTable:Description' => '列表 (Grouped by a field)',
// New in 2.5
'UI:DashletGroupBy:Prop-Function' => 'Aggregation function',
'UI:DashletGroupBy:Prop-FunctionAttribute' => 'Function attribute',
'UI:DashletGroupBy:Prop-OrderDirection' => 'Direction',
'UI:DashletGroupBy:Prop-Function' => '聚合函数',
'UI:DashletGroupBy:Prop-FunctionAttribute' => '函数属性',
'UI:DashletGroupBy:Prop-OrderDirection' => '方向',
'UI:DashletGroupBy:Prop-OrderField' => '排序',
'UI:DashletGroupBy:Prop-Limit' => 'Limit',
@@ -1256,7 +1256,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:DashletGroupBy:Order:desc' => '降序',
'UI:GroupBy:count' => '个数',
'UI:GroupBy:count+' => 'Number of elements',
'UI:GroupBy:count+' => '元件的个数',
'UI:GroupBy:sum' => '总数',
'UI:GroupBy:sum+' => 'Sum of %1$s',
'UI:GroupBy:avg' => '平均',
@@ -1268,7 +1268,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
// ---
'UI:DashletHeaderStatic:Label' => 'Header',
'UI:DashletHeaderStatic:Description' => 'Displays an horizontal separator',
'UI:DashletHeaderStatic:Description' => '显示水平分隔符',
'UI:DashletHeaderStatic:Prop-Title' => '标题',
'UI:DashletHeaderStatic:Prop-Title:Default' => '联系人',
'UI:DashletHeaderStatic:Prop-Icon' => '图标',
@@ -1278,7 +1278,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:DashletHeaderDynamic:Prop-Title' => '标题',
'UI:DashletHeaderDynamic:Prop-Title:Default' => '联系人',
'UI:DashletHeaderDynamic:Prop-Icon' => '图标',
'UI:DashletHeaderDynamic:Prop-Subtitle' => 'Subtitle',
'UI:DashletHeaderDynamic:Prop-Subtitle' => '副标题',
'UI:DashletHeaderDynamic:Prop-Subtitle:Default' => '联系人',
'UI:DashletHeaderDynamic:Prop-Query' => '查询',
'UI:DashletHeaderDynamic:Prop-GroupBy' => 'Group by',
@@ -1419,7 +1419,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:ConcurrentLockKilled' => '阻止并发修改当前对象的锁已被删除.',
'UI:Menu:KillConcurrentLock' => '消除并发修改锁定!',
'UI:Menu:ExportPDF' => '导出 PDF...',
'UI:Menu:ExportPDF' => '导出PDF...',
'UI:Menu:PrintableVersion' => '打印',
'UI:BrowseInlineImages' => '浏览图片...',
@@ -1440,7 +1440,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:Search:Criterion:MoreMenu:AddCriteria' => '添加条件',
// - Add new criteria button
'UI:Search:AddCriteria:List:RecentlyUsed:Title' => '最近使用',
'UI:Search:AddCriteria:List:MostPopular:Title' => '最热门',
'UI:Search:AddCriteria:List:MostPopular:Title' => '最常用',
'UI:Search:AddCriteria:List:Others:Title' => '其它',
'UI:Search:AddCriteria:List:RecentlyUsed:Placeholder' => '还没有.',
@@ -1477,20 +1477,20 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:Search:Criteria:Title:Enum:In:All' => '%1$s: 任何',
// - TagSet widget
'UI:Search:Criteria:Title:TagSet:Matches' => '%1$s: %2$s~~',
// - External key widget
'UI:Search:Criteria:Title:ExternalKey:Empty' => '%1$s 已定义',
'UI:Search:Criteria:Title:ExternalKey:NotEmpty' => '%1$s 未被定义',
'UI:Search:Criteria:Title:ExternalKey:Equals' => '%1$s %2$s',
'UI:Search:Criteria:Title:ExternalKey:In' => '%1$s: %2$s',
'UI:Search:Criteria:Title:ExternalKey:In:Many' => '%1$s: %2$s 和 %3$s others',
'UI:Search:Criteria:Title:ExternalKey:In:All' => '%1$s: 任何',
// - Hierarchical key widget
'UI:Search:Criteria:Title:HierarchicalKey:Empty' => '%1$s 已定义',
'UI:Search:Criteria:Title:HierarchicalKey:NotEmpty' => '%1$s 未被定义',
'UI:Search:Criteria:Title:HierarchicalKey:Equals' => '%1$s %2$s',
'UI:Search:Criteria:Title:HierarchicalKey:In' => '%1$s: %2$s',
'UI:Search:Criteria:Title:HierarchicalKey:In:Many' => '%1$s: %2$s 和 %3$s others',
'UI:Search:Criteria:Title:HierarchicalKey:In:All' => '%1$s: 任何',
// - External key widget
'UI:Search:Criteria:Title:ExternalKey:Empty' => '%1$s 已定义',
'UI:Search:Criteria:Title:ExternalKey:NotEmpty' => '%1$s 未被定义',
'UI:Search:Criteria:Title:ExternalKey:Equals' => '%1$s %2$s',
'UI:Search:Criteria:Title:ExternalKey:In' => '%1$s: %2$s',
'UI:Search:Criteria:Title:ExternalKey:In:Many' => '%1$s: %2$s 和 %3$s others',
'UI:Search:Criteria:Title:ExternalKey:In:All' => '%1$s: 任何',
// - Hierarchical key widget
'UI:Search:Criteria:Title:HierarchicalKey:Empty' => '%1$s 已定义',
'UI:Search:Criteria:Title:HierarchicalKey:NotEmpty' => '%1$s 未被定义',
'UI:Search:Criteria:Title:HierarchicalKey:Equals' => '%1$s %2$s',
'UI:Search:Criteria:Title:HierarchicalKey:In' => '%1$s: %2$s',
'UI:Search:Criteria:Title:HierarchicalKey:In:Many' => '%1$s: %2$s 和 %3$s others',
'UI:Search:Criteria:Title:HierarchicalKey:In:All' => '%1$s: 任何',
// - Criteria operators
// - Default widget
@@ -1559,19 +1559,19 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Expression:Unit:Long:MINUTE' => '分钟',
'Expression:Verb:NOW' => '现在',
'Expression:Verb:ISNULL' => ': undefined~~',
'Expression:Verb:ISNULL' => ': 未定义',
));
//
// iTop Newsroom menu
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:Newsroom:NoNewMessage' => 'No new message~~',
'UI:Newsroom:MarkAllAsRead' => 'Mark all messages as read~~',
'UI:Newsroom:ViewAllMessages' => 'View all messages~~',
'UI:Newsroom:Preferences' => 'Newsroom preferences~~',
'UI:Newsroom:ConfigurationLink' => 'Configuration~~',
'UI:Newsroom:ResetCache' => 'Reset cache~~',
'UI:Newsroom:DisplayMessagesFor_Provider' => 'Display messages from %1$s~~',
'UI:Newsroom:DisplayAtMost_X_Messages' => 'Display up to %1$s messages in the %2$s menu.~~',
'UI:Newsroom:NoNewMessage' => '没有新消息',
'UI:Newsroom:MarkAllAsRead' => '标记所有消息为已读',
'UI:Newsroom:ViewAllMessages' => '查看全部消息',
'UI:Newsroom:Preferences' => '消息选项',
'UI:Newsroom:ConfigurationLink' => '配置',
'UI:Newsroom:ResetCache' => '重置缓存',
'UI:Newsroom:DisplayMessagesFor_Provider' => '显示来自 %1$s 的消息',
'UI:Newsroom:DisplayAtMost_X_Messages' => ' %2$s 菜单中最多显示 %1$s 条消息.',
));

View File

@@ -176,8 +176,9 @@ try
$sConfigFile = utils::GetConfigFilePath();
if (file_exists($sConfigFile) && !is_writable($sConfigFile) && $oStep->RequiresWritableConfig())
{
$oPage->error("<b>Error:</b> the configuration file '".$sConfigFile."' already exists and cannot be overwritten.");
$oPage->p("The wizard cannot modify the configuration file for you. If you want to upgrade ".ITOP_APPLICATION.", make sure that the file '<b>".realpath($sConfigFile)."</b>' can be modified by the web server.");
$sRelativePath = utils::GetConfigFilePathRelative();
$oPage->error("<b>Error:</b> the configuration file '".$sRelativePath."' already exists and cannot be overwritten.");
$oPage->p("The wizard cannot modify the configuration file for you. If you want to upgrade ".ITOP_APPLICATION.", make sure that the file '<b>".$sRelativePath."</b>' can be modified by the web server.");
$oPage->output();
}
else

View File

@@ -124,7 +124,7 @@ function CheckEmailSetting($oP)
$oP->info("SMTP configuration (from config-itop.php): host: $sHost, port: $sPort, user: $sDisplayUserName, password: $sDisplayPassword, encryption: $sDisplayEncryption.");
if (($sHost == 'localhost') && ($sPort == '25') && ($sUserName == '') && ($sPassword == '') )
{
$oP->warning("The default settings may not be suitable for your environment. You may want to ajust these values by editing iTop's configuration file (".APPROOT."conf/production/config-itop.php).");
$oP->warning("The default settings may not be suitable for your environment. You may want to adjust these values by editing iTop's configuration file (".utils::GetConfigFilePathRelative().").");
}
break;
@@ -134,7 +134,7 @@ function CheckEmailSetting($oP)
break;
case 'LogFile':
$oP->warning("iTop is configured to use the <b>LogFile</b> transport: emails will <em>not</em> be sent but logged to the file: '".APPROOT."/log/mail.log'.");
$oP->warning("iTop is configured to use the <b>LogFile</b> transport: emails will <em>not</em> be sent but logged to the file: 'log/mail.log'.");
$bRet = true;
break;

View File

@@ -308,12 +308,12 @@ class iTopExtensionsMap
$sModuleVersion = '0.0.1';
}
if ($sParentExtensionId !== null)
if (($sParentExtensionId !== null) && (array_key_exists($sParentExtensionId, $this->aExtensions)) && ($this->aExtensions[$sParentExtensionId] instanceof iTopExtension))
{
// Already inside an extension, let's add this module the list of modules belonging to this extension
$this->aExtensions[$sParentExtensionId]->aModules[] = $sModuleName;
$this->aExtensions[$sParentExtensionId]->aModuleVersion[$sModuleName] = $sModuleVersion;
}
}
else
{
// Not already inside an folder containing an 'extension.xml' file

2
setup/phpcheck.php Normal file
View File

@@ -0,0 +1,2 @@
<?php
echo '<h1>PHP works!</h1>';

View File

@@ -1,3 +1,9 @@
<?php
require_once('../approot.inc.php');
require_once(APPROOT.'/application/startup.inc.php');
require_once(APPROOT.'/application/loginwebpage.class.inc.php');
LoginWebPage::DoLogin(true); // Check user rights and prompt if needed
phpinfo();
?>

View File

@@ -173,10 +173,11 @@ class WizardController
// The configuration file already exists
if (!is_writable($sConfigFile))
{
$sRelativePath = utils::GetConfigFilePathRelative();
$oP = new SetupPage('Installation Cannot Continue');
$oP->add("<h2>Fatal error</h2>\n");
$oP->error("<b>Error:</b> the configuration file '".$sConfigFile."' already exists and cannot be overwritten.");
$oP->p("The wizard cannot modify the configuration file for you. If you want to upgrade ".ITOP_APPLICATION.", make sure that the file '<b>".realpath($sConfigFile)."</b>' can be modified by the web server.");
$oP->error("<b>Error:</b> the configuration file '".$sRelativePath."' already exists and cannot be overwritten.");
$oP->p("The wizard cannot modify the configuration file for you. If you want to upgrade ".ITOP_APPLICATION.", make sure that the file '<b>".$sRelativePath."</b>' can be modified by the web server.");
$oP->p('<button type="button" onclick="window.location.reload()">Reload</button>');
$oP->output();
return;

View File

@@ -77,7 +77,7 @@ class WizStepWelcome extends WizardStep
EOF
);
$oPage->add('<h1>'.ITOP_APPLICATION.' Installation Wizard</h1>');
$aResults = SetupUtils::CheckPhpAndExtensions($oPage);
$aResults = SetupUtils::CheckPhpAndExtensions();
$this->bCanMoveForward = true;
$aInfo = array();
$aWarnings = array();