Compare commits

..

1 Commits

Author SHA1 Message Date
Romain Quetiez
ccbd818d13 iTop 1.0.1 pushed in source forge, marked as build 57
SVN:1.0.1[941]
2010-11-03 16:13:41 +00:00
382 changed files with 2845 additions and 21557 deletions

View File

@@ -149,7 +149,6 @@ class UserRightsMatrix extends UserRightsAddOnAPI
return ($oUser->GetKey() == 1);
}
// Deprecated - create a new module !
public function Setup()
{
// Users must be added manually

View File

@@ -42,6 +42,11 @@ class UserRightsNull extends UserRightsAddOnAPI
return true;
}
public function Setup()
{
return true;
}
public function Init()
{
return true;

View File

@@ -431,44 +431,28 @@ class UserRightsProfile extends UserRightsAddOnAPI
$oChange->Set("userinfo", "Initialization");
$iChangeId = $oChange->DBInsert();
// Support drastic data model changes: no organization class !
if (MetaModel::IsValidClass('Organization'))
{
$oOrg = new Organization();
$oOrg->Set('name', 'My Company/Department');
$oOrg->Set('code', 'SOMECODE');
$iOrgId = $oOrg->DBInsertTrackedNoReload($oChange, true /* skip security */);
}
else
{
$iOrgId = 0;
}
$oOrg = new Organization();
$oOrg->Set('name', 'My Company/Department');
$oOrg->Set('code', 'SOMECODE');
// $oOrg->Set('status', 'implementation');
//$oOrg->Set('parent_id', xxx);
$iOrgId = $oOrg->DBInsertTrackedNoReload($oChange, true /* skip security */);
// Support drastic data model changes: no Person class !
if (MetaModel::IsValidClass('Person'))
{
$oContact = new Person();
$oContact->Set('name', 'My last name');
$oContact->Set('first_name', 'My first name');
if (MetaModel::IsValidAttCode('Person', 'org_id'))
{
$oContact->Set('org_id', $iOrgId);
}
$oContact->Set('email', 'my.email@foo.org');
$iContactId = $oContact->DBInsertTrackedNoReload($oChange, true /* skip security */);
}
else
{
$iContactId = 0;
}
$oContact = new Person();
$oContact->Set('name', 'My last name');
$oContact->Set('first_name', 'My first name');
//$oContact->Set('status', 'available');
$oContact->Set('org_id', $iOrgId);
$oContact->Set('email', 'my.email@foo.org');
//$oContact->Set('phone', '');
//$oContact->Set('location_id', $iLocationId);
//$oContact->Set('employee_number', '');
$iContactId = $oContact->DBInsertTrackedNoReload($oChange, true /* skip security */);
$oUser = new UserLocal();
$oUser->Set('login', $sAdminUser);
$oUser->Set('password', $sAdminPwd);
if (MetaModel::IsValidAttCode('UserLocal', 'contactid'))
{
$oUser->Set('contactid', $iContactId);
}
$oUser->Set('contactid', $iContactId);
$oUser->Set('language', $sLanguage); // Language was chosen during the installation
// Add this user to the very specific 'admin' profile
@@ -487,6 +471,14 @@ class UserRightsProfile extends UserRightsAddOnAPI
return true;
}
public function Setup()
{
SetupProfiles::ComputeITILProfiles();
//SetupProfiles::ComputeBasicProfiles();
SetupProfiles::DoCreateProfiles();
return true;
}
public function Init()
{
MetaModel::RegisterPlugin('userrights', 'ACbyProfile');
@@ -833,6 +825,265 @@ exit;
}
}
//
// Create simple profiles into our user management model:
// - administrator
// - readers
// - contributors
//
class SetupProfiles
{
protected static $m_aActions = array(
UR_ACTION_READ => 'Read',
UR_ACTION_MODIFY => 'Modify',
UR_ACTION_DELETE => 'Delete',
UR_ACTION_BULK_READ => 'Bulk Read',
UR_ACTION_BULK_MODIFY => 'Bulk Modify',
UR_ACTION_BULK_DELETE => 'Bulk Delete',
);
// Note: It is possible to specify the same class in several modules
//
protected static $m_aModules = array();
protected static $m_aProfiles = array();
protected static function DoCreateActionGrant($iProfile, $iAction, $sClass, $bPermission = true)
{
$oNewObj = MetaModel::NewObject("URP_ActionGrant");
$oNewObj->Set('profileid', $iProfile);
$oNewObj->Set('permission', $bPermission ? 'yes' : 'no');
$oNewObj->Set('class', $sClass);
$oNewObj->Set('action', self::$m_aActions[$iAction]);
$iId = $oNewObj->DBInsertNoReload();
return $iId;
}
protected static function DoCreateStimulusGrant($iProfile, $sStimulusCode, $sClass)
{
$oNewObj = MetaModel::NewObject("URP_StimulusGrant");
$oNewObj->Set('profileid', $iProfile);
$oNewObj->Set('permission', 'yes');
$oNewObj->Set('class', $sClass);
$oNewObj->Set('stimulus', $sStimulusCode);
$iId = $oNewObj->DBInsertNoReload();
return $iId;
}
protected static function DoCreateOneProfile($sName, $aProfileData)
{
$sDescription = $aProfileData['description'];
if (strlen(trim($aProfileData['write_modules'])) == 0)
{
$aWriteModules = array();
}
else
{
$aWriteModules = explode(',', trim($aProfileData['write_modules']));
}
$aStimuli = $aProfileData['stimuli'];
$oNewObj = MetaModel::NewObject("URP_Profiles");
$oNewObj->Set('name', $sName);
$oNewObj->Set('description', $sDescription);
$iProfile = $oNewObj->DBInsertNoReload();
// Grant read rights for everything
//
foreach (MetaModel::GetClasses('bizmodel') as $sClass)
{
self::DoCreateActionGrant($iProfile, UR_ACTION_READ, $sClass);
self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_READ, $sClass);
}
// Grant write for given modules
// Start by compiling the information, because some modules may overlap
$aWriteableClasses = array();
foreach ($aWriteModules as $sModule)
{
//$oPage->p('Granting write access for the module"'.$sModule.'" - '.count(self::$m_aModules[$sModule]).' classes');
foreach (self::$m_aModules[$sModule] as $sClass)
{
$aWriteableClasses[$sClass] = true;
}
}
foreach ($aWriteableClasses as $sClass => $foo)
{
if (!MetaModel::IsValidClass($sClass))
{
throw new CoreException("Invalid class name '$sClass'");
}
self::DoCreateActionGrant($iProfile, UR_ACTION_MODIFY, $sClass);
self::DoCreateActionGrant($iProfile, UR_ACTION_DELETE, $sClass);
self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_MODIFY, $sClass);
// By default, do not allow bulk deletion operations for standard users
// self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_DELETE, $sClass);
}
// Grant stimuli for given classes
foreach ($aStimuli as $sClass => $sAllowedStimuli)
{
if (!MetaModel::IsValidClass($sClass))
{
// Could be a class defined in a module that wasn't installed
continue;
//throw new CoreException("Invalid class name '$sClass'");
}
if ($sAllowedStimuli == 'any')
{
$aAllowedStimuli = array_keys(MetaModel::EnumStimuli($sClass));
}
elseif ($sAllowedStimuli == 'none')
{
$aAllowedStimuli = array();
}
else
{
$aAllowedStimuli = explode(',', $sAllowedStimuli);
}
foreach ($aAllowedStimuli as $sStimulusCode)
{
self::DoCreateStimulusGrant($iProfile, $sStimulusCode, $sClass);
}
}
}
public static function DoCreateProfiles()
{
URP_Profiles::DoCreateAdminProfile();
URP_Profiles::DoCreateUserPortalProfile();
foreach(self::$m_aProfiles as $sName => $aProfileData)
{
self::DoCreateOneProfile($sName, $aProfileData);
}
}
public static function ComputeBasicProfiles()
{
// In this profiling scheme, one single module represents all the classes
//
self::$m_aModules = array(
'UserData' => MetaModel::GetClasses('bizmodel'),
);
self::$m_aProfiles = array(
'Reader' => array(
'description' => 'Person having a ready-only access to the data',
'write_modules' => '',
'stimuli' => array(
),
),
'Writer' => array(
'description' => 'Contributor to the contents (read + write access)',
'write_modules' => 'UserData',
'stimuli' => array(
// any class => 'any'
),
),
);
}
public static function ComputeITILProfiles()
{
// In this profiling scheme, modules are based on ITIL recommendations
//
self::$m_aModules = array(
/*
'WriteModule' => array(
'someclass',
'anotherclass',
),
*/
'General' => MetaModel::GetClasses('structure'),
'Documentation' => MetaModel::GetClasses('documentation'),
'Configuration' => MetaModel::GetClasses('configmgmt'),
'Incident' => MetaModel::GetClasses('incidentmgmt'),
'Problem' => MetaModel::GetClasses('problemmgmt'),
'Change' => MetaModel::GetClasses('changemgmt'),
'Service' => MetaModel::GetClasses('servicemgmt'),
'Call' => MetaModel::GetClasses('requestmgmt'),
'KnownError' => MetaModel::GetClasses('knownerrormgmt'),
);
self::$m_aProfiles = array(
'Configuration Manager' => array(
'description' => 'Person in charge of the documentation of the managed CIs',
'write_modules' => 'General,Documentation,Configuration',
'stimuli' => array(
//'bizServer' => 'none',
//'bizContract' => 'none',
//'bizIncidentTicket' => 'none',
//'bizChangeTicket' => 'any',
),
),
'Service Desk Agent' => array(
'description' => 'Person in charge of creating incident reports',
'write_modules' => 'Incident,Call',
'stimuli' => array(
'Incident' => 'ev_assign',
'UserRequest' => 'ev_assign',
),
),
'Support Agent' => array(
'description' => 'Person analyzing and solving the current incidents',
'write_modules' => 'Incident',
'stimuli' => array(
'Incident' => 'ev_assign,ev_reassign,ev_resolve,ev_close',
'UserRequest' => 'ev_assign,ev_reassign,ev_resolve,ev_close,ev_freeze',
),
),
'Problem Manager' => array(
'description' => 'Person analyzing and solving the current problems',
'write_modules' => 'Problem,KnownError',
'stimuli' => array(
'Problem' => 'ev_assign,ev_reassign,ev_resolve,ev_close',
),
),
'Change Implementor' => array(
'description' => 'Person executing the changes',
'write_modules' => 'Change',
'stimuli' => array(
'NormalChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
'EmergencyChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
'RoutineChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
),
),
'Change Supervisor' => array(
'description' => 'Person responsible for the overall change execution',
'write_modules' => 'Change',
'stimuli' => array(
'NormalChange' => 'ev_validate,ev_reject,ev_assign,ev_reopen,ev_finish',
'EmergencyChange' => 'ev_assign,ev_reopen,ev_finish',
'RoutineChange' => 'ev_assign,ev_reopen,ev_finish',
),
),
'Change Approver' => array(
'description' => 'Person who could be impacted by some changes',
'write_modules' => 'Change',
'stimuli' => array(
'NormalChange' => 'ev_approve,ev_notapprove',
'EmergencyChange' => 'ev_approve,ev_notapprove',
'RoutineChange' => 'none',
),
),
'Service Manager' => array(
'description' => 'Person responsible for the service delivered to the [internal] customer',
'write_modules' => 'Service',
'stimuli' => array(
),
),
'Document author' => array(
'description' => 'Any person who could contribute to documentation',
'write_modules' => 'Documentation',
'stimuli' => array(
),
),
);
}
}
UserRights::SelectModule('UserRightsProfile');

View File

@@ -658,6 +658,16 @@ class UserRightsProjection extends UserRightsAddOnAPI
// See implementation of userrightsprofile
}
public function Setup()
{
SetupProfiles::ComputeITILProfiles();
//SetupProfiles::ComputeBasicProfiles();
SetupProfiles::DoCreateDimensions();
SetupProfiles::DoCreateProfiles();
return true;
}
public function Init()
{
MetaModel::RegisterPlugin('userrights', 'ACbyProfile', array($this, 'CacheData'));
@@ -1246,6 +1256,343 @@ exit;
}
}
//
// Create simple profiles into our user management model:
// - administrator
// - readers
// - contributors
//
class SetupProfiles
{
protected static $m_aDimensions = array(
'organization' => array(
'description' => '',
'type' => 'Organization',
),
);
protected static $m_aActions = array(
UR_ACTION_READ => 'Read',
UR_ACTION_MODIFY => 'Modify',
UR_ACTION_DELETE => 'Delete',
UR_ACTION_BULK_READ => 'Bulk Read',
UR_ACTION_BULK_MODIFY => 'Bulk Modify',
UR_ACTION_BULK_DELETE => 'Bulk Delete',
);
// Note: It is possible to specify the same class in several modules
//
protected static $m_aModules = array();
protected static $m_aProfiles = array();
protected static function DoCreateClassProjection($iDimension, $sClass)
{
$oNewObj = MetaModel::NewObject("URP_ClassProjection");
$oNewObj->Set('dimensionid', $iDimension);
$oNewObj->Set('class', $sClass);
$oNewObj->Set('attribute', '');
$iId = $oNewObj->DBInsertNoReload();
return $iId;
}
protected static function DoCreateDimension($sName, $aDimensionData)
{
$oNewObj = MetaModel::NewObject("URP_Dimensions");
$oNewObj->Set('name', $sName);
$oNewObj->Set('description', $aDimensionData['description']);
$oNewObj->Set('type', $aDimensionData['type']);
$iId = $oNewObj->DBInsertNoReload();
return $iId;
}
protected static function DoCreateProfileProjection($iProfile, $iDimension)
{
$oNewObj = MetaModel::NewObject("URP_ProfileProjection");
$oNewObj->Set('profileid', $iProfile);
$oNewObj->Set('dimensionid', $iDimension);
$oNewObj->Set('value', '<any>');
$oNewObj->Set('attribute', '');
$iId = $oNewObj->DBInsertNoReload();
return $iId;
}
protected static function DoCreateActionGrant($iProfile, $iAction, $sClass, $bPermission = true)
{
$oNewObj = MetaModel::NewObject("URP_ActionGrant");
$oNewObj->Set('profileid', $iProfile);
$oNewObj->Set('permission', $bPermission ? 'yes' : 'no');
$oNewObj->Set('class', $sClass);
$oNewObj->Set('action', self::$m_aActions[$iAction]);
$iId = $oNewObj->DBInsertNoReload();
return $iId;
}
protected static function DoCreateStimulusGrant($iProfile, $sStimulusCode, $sClass)
{
$oNewObj = MetaModel::NewObject("URP_StimulusGrant");
$oNewObj->Set('profileid', $iProfile);
$oNewObj->Set('permission', 'yes');
$oNewObj->Set('class', $sClass);
$oNewObj->Set('stimulus', $sStimulusCode);
$iId = $oNewObj->DBInsertNoReload();
return $iId;
}
protected static function DoCreateAdminProfile()
{
$oNewObj = MetaModel::NewObject("URP_Profiles");
$oNewObj->Set('name', 'Administrator');
$oNewObj->Set('description', 'Has the rights on everything (bypassing any control)');
$iNewId = $oNewObj->DBInsertNoReload();
if ($iNewId != ADMIN_PROFILE_ID)
{
throw new CoreException('Admin profile could not be created with its standard id', array('requested'=>ADMIN_PROFILE_ID, 'obtained'=>$iNewId));
}
}
protected static function DoCreateOneProfile($sName, $aProfileData)
{
$sDescription = $aProfileData['description'];
if (strlen(trim($aProfileData['write_modules'])) == 0)
{
$aWriteModules = array();
}
else
{
$aWriteModules = explode(',', trim($aProfileData['write_modules']));
}
$aStimuli = $aProfileData['stimuli'];
$oNewObj = MetaModel::NewObject("URP_Profiles");
$oNewObj->Set('name', $sName);
$oNewObj->Set('description', $sDescription);
$iProfile = $oNewObj->DBInsertNoReload();
// Project in every dimension
//
$oDimensionSet = new DBObjectSet(DBObjectSearch::FromOQL_AllData("SELECT URP_Dimensions"));
while ($oDimension = $oDimensionSet->Fetch())
{
$iDimension = $oDimension->GetKey();
self::DoCreateProfileProjection($iProfile, $iDimension);
}
// Grant read rights for everything
//
foreach (MetaModel::GetClasses('bizmodel') as $sClass)
{
// Skip non instantiable classes
if (MetaModel::IsAbstract($sClass)) continue;
self::DoCreateActionGrant($iProfile, UR_ACTION_READ, $sClass);
self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_READ, $sClass);
}
// Grant write for given modules
// Start by compiling the information, because some modules may overlap
$aWriteableClasses = array();
foreach ($aWriteModules as $sModule)
{
//$oPage->p('Granting write access for the module"'.$sModule.'" - '.count(self::$m_aModules[$sModule]).' classes');
foreach (self::$m_aModules[$sModule] as $sClass)
{
$aWriteableClasses[$sClass] = true;
}
}
foreach ($aWriteableClasses as $sClass => $foo)
{
// Skip non instantiable classes
if (MetaModel::IsAbstract($sClass)) continue;
if (!MetaModel::IsValidClass($sClass))
{
throw new CoreException("Invalid class name '$sClass'");
}
self::DoCreateActionGrant($iProfile, UR_ACTION_MODIFY, $sClass);
self::DoCreateActionGrant($iProfile, UR_ACTION_DELETE, $sClass);
self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_MODIFY, $sClass);
// By default, do not allow bulk deletion operations for standard users
// self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_DELETE, $sClass);
}
// Grant stimuli for given classes
foreach ($aStimuli as $sClass => $sAllowedStimuli)
{
if (!MetaModel::IsValidClass($sClass))
{
// Could be a class defined in a module that wasn't installed
continue;
//throw new CoreException("Invalid class name '$sClass'");
}
if ($sAllowedStimuli == 'any')
{
$aAllowedStimuli = array_keys(MetaModel::EnumStimuli($sClass));
}
elseif ($sAllowedStimuli == 'none')
{
$aAllowedStimuli = array();
}
else
{
$aAllowedStimuli = explode(',', $sAllowedStimuli);
}
foreach ($aAllowedStimuli as $sStimulusCode)
{
self::DoCreateStimulusGrant($iProfile, $sStimulusCode, $sClass);
}
}
}
public static function DoCreateDimensions()
{
$aClass = MetaModel::GetClasses();
foreach(self::$m_aDimensions as $sName => $aDimensionData)
{
$iDimension = self::DoCreateDimension($sName, $aDimensionData);
foreach($aClass as $sClass)
{
// Skip non instantiable classes
if (MetaModel::IsAbstract($sClass)) continue;
if (!MetaModel::IsValidClass($sClass))
{
throw new CoreException("Invalid class name '$sClass'");
}
self::DoCreateClassProjection($iDimension, $sClass);
}
}
}
public static function DoCreateProfiles()
{
self::DoCreateAdminProfile();
foreach(self::$m_aProfiles as $sName => $aProfileData)
{
self::DoCreateOneProfile($sName, $aProfileData);
}
}
public static function ComputeBasicProfiles()
{
// In this profiling scheme, one single module represents all the classes
//
self::$m_aModules = array(
'UserData' => MetaModel::GetClasses('bizmodel'),
);
self::$m_aProfiles = array(
'Reader' => array(
'description' => 'Person having a ready-only access to the data',
'write_modules' => '',
'stimuli' => array(
),
),
'Writer' => array(
'description' => 'Contributor to the contents (read + write access)',
'write_modules' => 'UserData',
'stimuli' => array(
// any class => 'any'
),
),
);
}
public static function ComputeITILProfiles()
{
// In this profiling scheme, modules are based on ITIL recommendations
//
self::$m_aModules = array(
/*
'WriteModule' => array(
'someclass',
'anotherclass',
),
*/
'General' => MetaModel::GetClasses('structure'),
'Documentation' => MetaModel::GetClasses('documentation'),
'Configuration' => MetaModel::GetClasses('configmgmt'),
'Incident' => MetaModel::GetClasses('incidentmgmt'),
'Problem' => MetaModel::GetClasses('problemmgmt'),
'Change' => MetaModel::GetClasses('changemgmt'),
'Service' => MetaModel::GetClasses('servicemgmt'),
'Call' => MetaModel::GetClasses('requestmgmt'),
'KnownError' => MetaModel::GetClasses('knownerrormgmt'),
);
self::$m_aProfiles = array(
'Configuration Manager' => array(
'description' => 'Person in charge of the documentation of the managed CIs',
'write_modules' => 'General,Documentation,Configuration',
'stimuli' => array(
//'bizServer' => 'none',
//'bizContract' => 'none',
//'bizIncidentTicket' => 'none',
//'bizChangeTicket' => 'any',
),
),
'Service Desk Agent' => array(
'description' => 'Person in charge of creating incident reports',
'write_modules' => 'Incident,Call',
'stimuli' => array(
'Incident' => 'ev_assign',
'UserRequest' => 'ev_assign',
),
),
'Support Agent' => array(
'description' => 'Person analyzing and solving the current incidents or problems',
'write_modules' => 'Incident,Problem,KnownError',
'stimuli' => array(
'Incident' => 'ev_assign,ev_reassign,ev_resolve,ev_close',
'UserRequest' => 'ev_assign,ev_reassign,ev_resolve,ev_close,ev_freeze',
),
),
'Change Implementor' => array(
'description' => 'Person executing the changes',
'write_modules' => 'Change',
'stimuli' => array(
'NormalChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
'EmergencyChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
'RoutineChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
),
),
'Change Supervisor' => array(
'description' => 'Person responsible for the overall change execution',
'write_modules' => 'Change',
'stimuli' => array(
'NormalChange' => 'ev_validate,ev_reject,ev_assign,ev_reopen,ev_finish',
'EmergencyChange' => 'ev_assign,ev_reopen,ev_finish',
'RoutineChange' => 'ev_assign,ev_reopen,ev_finish',
),
),
'Change Approver' => array(
'description' => 'Person who could be impacted by some changes',
'write_modules' => 'Change',
'stimuli' => array(
'NormalChange' => 'ev_approve,ev_notapprove',
'EmergencyChange' => 'ev_approve,ev_notapprove',
'RoutineChange' => 'none',
),
),
'Service Manager' => array(
'description' => 'Person responsible for the service delivered to the [internal] customer',
'write_modules' => 'Service',
'stimuli' => array(
),
),
'Document author' => array(
'description' => 'Any person who could contribute to documentation',
'write_modules' => 'Documentation',
'stimuli' => array(
),
),
);
}
}
UserRights::SelectModule('UserRightsProjection');

View File

@@ -24,7 +24,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT."/application/webpage.class.inc.php");
require_once("../application/webpage.class.inc.php");
class ajax_page extends WebPage
{
@@ -33,9 +33,6 @@ class ajax_page extends WebPage
* @var Hash
*/
protected $m_sReadyScript;
protected $m_sCurrentTab;
protected $m_sCurrentTabContainer;
protected $m_aTabs;
/**
* constructor for the web page
@@ -47,44 +44,8 @@ class ajax_page extends WebPage
$this->m_sReadyScript = "";
$this->add_header("Content-type: text/html; charset=utf-8");
$this->add_header("Cache-control: no-cache");
$this->m_sCurrentTabContainer = '';
$this->m_sCurrentTab = '';
$this->m_aTabs = array();
}
public function AddTabContainer($sTabContainer, $sPrefix = '')
{
$this->m_aTabs[$sTabContainer] = array('content' =>'', 'prefix' => $sPrefix);
$this->add("\$Tabs:$sTabContainer\$");
}
public function AddToTab($sTabContainer, $sTabLabel, $sHtml)
{
if (!isset($this->m_aTabs[$sTabContainer]['content'][$sTabLabel]))
{
// Set the content of the tab
$this->m_aTabs[$sTabContainer]['content'][$sTabLabel] = $sHtml;
}
else
{
// Append to the content of the tab
$this->m_aTabs[$sTabContainer]['content'][$sTabLabel] .= $sHtml;
}
}
public function SetCurrentTabContainer($sTabContainer = '')
{
$sPreviousTabContainer = $this->m_sCurrentTabContainer;
$this->m_sCurrentTabContainer = $sTabContainer;
return $sPreviousTabContainer;
}
public function SetCurrentTab($sTabLabel = '')
{
$sPreviousTab = $this->m_sCurrentTab;
$this->m_sCurrentTab = $sTabLabel;
return $sPreviousTab;
}
/**
* Echoes the content of the whole page
@@ -96,88 +57,14 @@ class ajax_page extends WebPage
{
header($s_header);
}
if (count($this->m_aTabs) > 0)
{
$this->add_ready_script(
<<<EOF
// The "tab widgets" to handle.
var tabs = $('div[id^=tabbedContent]');
// This selector will be reused when selecting actual tab widget A elements.
var tab_a_selector = 'ul.ui-tabs-nav a';
// Enable tabs on all tab widgets. The `event` property must be overridden so
// that the tabs aren't changed on click, and any custom event name can be
// specified. Note that if you define a callback for the 'select' event, it
// will be executed for the selected tab whenever the hash changes.
tabs.tabs({ event: 'change' });
// Define our own click handler for the tabs, overriding the default.
tabs.find( tab_a_selector ).click(function()
{
var state = {};
// Get the id of this tab widget.
var id = $(this).closest( 'div[id^=tabbedContent]' ).attr( 'id' );
// Get the index of this tab.
var idx = $(this).parent().prevAll().length;
// Set the state!
state[ id ] = idx;
$.bbq.pushState( state );
});
EOF
);
}
// Render the tabs in the page (if any)
foreach($this->m_aTabs as $sTabContainerName => $aTabContainer)
{
$sTabs = '';
$m_aTabs = $aTabContainer['content'];
$sPrefix = $aTabContainer['prefix'];
$container_index = 0;
if (count($m_aTabs) > 0)
{
$sTabs = "<!-- tabs -->\n<div id=\"tabbedContent_{$sPrefix}{$container_index}\" class=\"light\">\n";
$sTabs .= "<ul>\n";
// Display the unordered list that will be rendered as the tabs
$i = 0;
foreach($m_aTabs as $sTabName => $sTabContent)
{
$sTabs .= "<li><a href=\"#tab_{$sPrefix}$i\" class=\"tab\"><span>".htmlentities($sTabName, ENT_QUOTES, 'UTF-8')."</span></a></li>\n";
$i++;
}
$sTabs .= "</ul>\n";
// Now add the content of the tabs themselves
$i = 0;
foreach($m_aTabs as $sTabName => $sTabContent)
{
$sTabs .= "<div id=\"tab_{$sPrefix}$i\">".$sTabContent."</div>\n";
$i++;
}
$sTabs .= "</div>\n<!-- end of tabs-->\n";
}
$this->s_content = str_replace("\$Tabs:$sTabContainerName\$", $sTabs, $this->s_content);
$container_index++;
}
$s_captured_output = ob_get_contents();
ob_end_clean();
echo $this->s_content;
echo $this->s_deferred_content;
if (count($this->a_scripts) > 0)
{
echo "<script type=\"text/javascript\">\n";
echo implode("\n", $this->a_scripts);
echo "\n</script>\n";
}
if (!empty($this->m_sReadyScript))
{
echo "<script type=\"text/javascript\">\n";
echo "<script>\n";
echo $this->m_sReadyScript; // Ready Scripts are output as simple scripts
echo "\n</script>\n";
echo "</script>\n";
}
if (trim($s_captured_output) != "")
{
@@ -194,18 +81,6 @@ EOF
public function small_p($sText)
{
}
public function add($sHtml)
{
if (!empty($this->m_sCurrentTabContainer) && !empty($this->m_sCurrentTab))
{
$this->AddToTab($this->m_sCurrentTabContainer, $this->m_sCurrentTab, $sHtml);
}
else
{
parent::add($sHtml);
}
}
/**
* Adds a script to be executed when the DOM is ready (typical JQuery use)
@@ -219,17 +94,6 @@ EOF
// considering that at this time everything in the page is "ready"...
$this->m_sReadyScript .= $sScript;
}
/**
* Cannot be called in this context, since Ajax pages do not share
* any context with the calling page !!
*/
public function GetUniqueId()
{
assert(false);
return 0;
}
}
?>

View File

@@ -23,13 +23,13 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/applicationcontext.class.inc.php');
require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
require_once(APPROOT.'/application/displayblock.class.inc.php');
require_once(APPROOT.'/application/audit.category.class.inc.php');
require_once(APPROOT.'/application/audit.rule.class.inc.php');
//require_once(APPROOT.'/application/menunode.class.inc.php');
require_once(APPROOT.'/application/utils.inc.php');
require_once('../application/applicationcontext.class.inc.php');
require_once('../application/cmdbabstract.class.inc.php');
require_once('../application/displayblock.class.inc.php');
require_once('../application/audit.category.class.inc.php');
require_once('../application/audit.rule.class.inc.php');
//require_once('../application/menunode.class.inc.php');
require_once('../application/utils.inc.php');
class ApplicationException extends CoreException
{

View File

@@ -23,7 +23,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT."/application/utils.inc.php");
require_once("../application/utils.inc.php");
/**
* Helper class to store and manipulate the parameters that make the application's context
*

View File

@@ -25,7 +25,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
require_once('../application/cmdbabstract.class.inc.php');
class AuditCategory extends cmdbAbstractObject
{

View File

@@ -26,7 +26,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/audit.category.class.inc.php');
require_once('../application/audit.category.class.inc.php');
class AuditRule extends cmdbAbstractObject
{

View File

@@ -24,7 +24,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT."/application/webpage.class.inc.php");
require_once("../application/webpage.class.inc.php");
class CLIPage
{
@@ -46,11 +46,6 @@ class CLIPage
echo $sText."\n";
}
public function pre($sText)
{
echo $sText."\n";
}
public function add_comment($sText)
{
echo "#".$sText."\n";

View File

@@ -31,13 +31,11 @@ define('HILIGHT_CLASS_WARNING', 'orange');
define('HILIGHT_CLASS_OK', 'green');
define('HILIGHT_CLASS_NONE', '');
require_once(APPROOT.'/core/cmdbobject.class.inc.php');
require_once(APPROOT.'/application/utils.inc.php');
require_once(APPROOT.'/application/applicationcontext.class.inc.php');
require_once(APPROOT.'/application/ui.linkswidget.class.inc.php');
require_once(APPROOT.'/application/ui.passwordwidget.class.inc.php');
require_once(APPROOT.'/application/ui.extkeywidget.class.inc.php');
require_once(APPROOT.'/application/ui.htmleditorwidget.class.inc.php');
require_once('../core/cmdbobject.class.inc.php');
require_once('../application/utils.inc.php');
require_once('../application/applicationcontext.class.inc.php');
require_once('../application/ui.linkswidget.class.inc.php');
require_once('../application/ui.passwordwidget.class.inc.php');
abstract class cmdbAbstractObject extends CMDBObject
{
@@ -201,7 +199,7 @@ abstract class cmdbAbstractObject extends CMDBObject
$sLinkedClass = $oAttDef->GetLinkedClass();
$oLinkingAttDef = MetaModel::GetAttributeDef($sLinkedClass, $oAttDef->GetExtKeyToRemote());
$sTargetClass = $oLinkingAttDef->GetTargetClass();
$oPage->p(MetaModel::GetClassIcon($sTargetClass)."&nbsp;".$oAttDef->GetDescription().'<span id="busy_'.$sInputId.'"></span>');
$oPage->p(MetaModel::GetClassIcon($sTargetClass)."&nbsp;".$oAttDef->GetDescription());
$sValue = $this->Get($sAttCode);
$sDisplayValue = $this->GetEditValue($sAttCode);
@@ -303,33 +301,13 @@ abstract class cmdbAbstractObject extends CMDBObject
{
$oPage->add('<td style="vertical-align:top">');
//$aDetails[$sTab][$sColIndex] = array();
$sLabel = '';
$sPreviousLabel = '';
$aDetails[$sTab][$sColIndex] = array();
foreach($aFieldsets as $sFieldsetName => $aFields)
{
if (!empty($sFieldsetName) && ($sFieldsetName[0] != '_'))
$aDetails[$sTab][$sColIndex] = array();
if (!empty($sFieldsetName))
{
$sLabel = $sFieldsetName;
}
else
{
$sLabel = '';
}
if ($sLabel != $sPreviousLabel)
{
if (!empty($sPreviousLabel))
{
$oPage->add('<fieldset>');
$oPage->add('<legend>'.Dict::S($sPreviousLabel).'</legend>');
}
$oPage->Details($aDetails[$sTab][$sColIndex]);
if (!empty($sPreviousLabel))
{
$oPage->add('</fieldset>');
}
$aDetails[$sTab][$sColIndex] = array();
$sPreviousLabel = $sLabel;
$oPage->add('<fieldset>');
$oPage->add('<legend>'.Dict::S($sFieldsetName).'</legend>');
}
foreach($aFields as $sAttCode)
{
@@ -340,16 +318,11 @@ abstract class cmdbAbstractObject extends CMDBObject
$aDetails[$sTab][$sColIndex][] = $val;
}
}
}
if (!empty($sPreviousLabel))
{
$oPage->add('<fieldset>');
$oPage->add('<legend>'.Dict::S($sFieldsetName).'</legend>');
}
$oPage->Details($aDetails[$sTab][$sColIndex]);
if (!empty($sPreviousLabel))
{
$oPage->add('</fieldset>');
$oPage->Details($aDetails[$sTab][$sColIndex]);
if (!empty($sFieldsetName))
{
$oPage->add('</fieldset>');
}
}
$oPage->add('</td>');
}
@@ -411,14 +384,8 @@ abstract class cmdbAbstractObject extends CMDBObject
*/
public static function GetDisplaySet(WebPage $oPage, CMDBObjectSet $oSet, $aExtraParams = array())
{
if (empty($aExtraParams['currentId']))
{
$iListId = $oPage->GetUniqueId(); // Works only if not in an Ajax page !!
}
else
{
$iListId = $aExtraParams['currentId'];
}
static $iListId = 0;
$iListId++;
// Initialize and check the parameters
$bViewLink = isset($aExtraParams['view_link']) ? $aExtraParams['view_link'] : true;
@@ -519,9 +486,9 @@ abstract class cmdbAbstractObject extends CMDBObject
$iMaxObjects = -1;
if ($bDisplayLimit && $bTruncated)
{
if ($oSet->Count() > MetaModel::GetConfig()->GetMaxDisplayLimit())
if ($oSet->Count() > utils::GetConfig()->GetMaxDisplayLimit())
{
$iMaxObjects = MetaModel::GetConfig()->GetMinDisplayLimit();
$iMaxObjects = utils::GetConfig()->GetMinDisplayLimit();
$oSet->SetLimit($iMaxObjects);
}
}
@@ -558,46 +525,46 @@ abstract class cmdbAbstractObject extends CMDBObject
}
$sHtml .= '<table class="listContainer">';
$sColspan = '';
// if (isset($aExtraParams['block_id']))
// {
// $divId = $aExtraParams['block_id'];
// }
// else
// {
// $divId = 'missingblockid';
// }
if (isset($aExtraParams['block_id']))
{
$divId = $aExtraParams['block_id'];
}
else
{
$divId = 'missingblockid';
}
$sFilter = $oSet->GetFilter()->serialize();
$iMinDisplayLimit = MetaModel::GetConfig()->GetMinDisplayLimit();
$iMinDisplayLimit = utils::GetConfig()->GetMinDisplayLimit();
$sCollapsedLabel = Dict::Format('UI:TruncatedResults', $iMinDisplayLimit, $oSet->Count());
$sLinkLabel = Dict::S('UI:DisplayAll');
foreach($oSet->GetFilter()->GetInternalParams() as $sName => $sValue)
{
$aExtraParams['query_params'][$sName] = $sValue;
}
if ($bDisplayLimit && $bTruncated && ($oSet->Count() > MetaModel::GetConfig()->GetMaxDisplayLimit()))
if ($bDisplayLimit && $bTruncated && ($oSet->Count() > utils::GetConfig()->GetMaxDisplayLimit()))
{
// list truncated
$aExtraParams['display_limit'] = true;
$sHtml .= '<tr class="containerHeader"><td><span id="lbl_'.$iListId.'">'.$sCollapsedLabel.'</span>&nbsp;&nbsp;<a class="truncated" id="trc_'.$iListId.'">'.$sLinkLabel.'</a></td><td>';
$sHtml .= '<tr class="containerHeader"><td><span id="lbl_'.$divId.'">'.$sCollapsedLabel.'</span>&nbsp;&nbsp;<a class="truncated" id="trc_'.$divId.'">'.$sLinkLabel.'</a></td><td>';
$oPage->add_ready_script(
<<<EOF
$('#$iListId table.listResults').addClass('truncated');
$('#$iListId table.listResults tr:last td').addClass('truncated');
$('#$divId table.listResults').addClass('truncated');
$('#$divId table.listResults tr:last td').addClass('truncated');
EOF
);
}
else if ($bDisplayLimit && !$bTruncated && ($oSet->Count() > MetaModel::GetConfig()->GetMaxDisplayLimit()))
else if ($bDisplayLimit && !$bTruncated && ($oSet->Count() > utils::GetConfig()->GetMaxDisplayLimit()))
{
// Collapsible list
$aExtraParams['display_limit'] = true;
$sHtml .= '<tr class="containerHeader"><td><span id="lbl_'.$iListId.'">'.Dict::Format('UI:CountOfResults', $oSet->Count()).'</span><a class="truncated" id="trc_'.$iListId.'">'.Dict::S('UI:CollapseList').'</a></td><td>';
$sHtml .= '<tr class="containerHeader"><td><span id="lbl_'.$divId.'">'.Dict::Format('UI:CountOfResults', $oSet->Count()).'</span><a class="truncated" id="trc_'.$divId.'">'.Dict::S('UI:CollapseList').'</a></td><td>';
}
$aExtraParams['truncated'] = false; // To expand the full list when clicked
$sExtraParamsExpand = addslashes(str_replace('"', "'", json_encode($aExtraParams))); // JSON encode, change the style of the quotes and escape them
$oPage->add_ready_script(
<<<EOF
// Handle truncated lists
$('#trc_$iListId').click(function()
$('#trc_$divId').click(function()
{
var state = {};
@@ -614,15 +581,15 @@ EOF
$.bbq.pushState( state );
$(this).trigger(state[this.id]);
});
$('#trc_$iListId').unbind('open');
$('#trc_$iListId').bind('open', function()
$('#trc_$divId').bind('open', function()
{
ReloadTruncatedList('$iListId', '$sFilter', '$sExtraParamsExpand');
ReloadTruncatedList('$divId', '$sFilter', '$sExtraParamsExpand');
});
$('#trc_$iListId').unbind('close');
$('#trc_$iListId').bind('close', function()
$('#trc_$divId').bind('close', function()
{
TruncateList('$iListId', $iMinDisplayLimit, '$sCollapsedLabel', '$sLinkLabel');
TruncateList('$divId', $iMinDisplayLimit, '$sCollapsedLabel', '$sLinkLabel');
});
EOF
);
@@ -636,7 +603,7 @@ EOF
//$aMenuExtraParams['linkage'] = $sLinkageAttribute;
$aMenuExtraParams = $aExtraParams;
}
$sHtml .= $oMenuBlock->GetRenderContent($oPage, $aMenuExtraParams, $iListId);
$sHtml .= $oMenuBlock->GetRenderContent($oPage, $aMenuExtraParams);
$sHtml .= '</td></tr>';
}
$sHtml .= "<tr><td $sColspan>";
@@ -689,9 +656,9 @@ EOF
$iMaxObjects = -1;
if ($bDisplayLimit)
{
if ($oSet->Count() > MetaModel::GetConfig()->GetMaxDisplayLimit())
if ($oSet->Count() > utils::GetConfig()->GetMaxDisplayLimit())
{
$iMaxObjects = MetaModel::GetConfig()->GetMinDisplayLimit();
$iMaxObjects = utils::GetConfig()->GetMinDisplayLimit();
}
}
while (($aObjects = $oSet->FetchAssoc()) && ($iMaxObjects != 0))
@@ -722,14 +689,14 @@ EOF
{
$aMenuExtraParams = $aExtraParams;
}
if ($bDisplayLimit && ($oSet->Count() > MetaModel::GetConfig()->GetMaxDisplayLimit()))
if ($bDisplayLimit && ($oSet->Count() > utils::GetConfig()->GetMaxDisplayLimit()))
{
// list truncated
$divId = $aExtraParams['block_id'];
$sFilter = $oSet->GetFilter()->serialize();
$aExtraParams['display_limit'] = false; // To expand the full list
$sExtraParams = addslashes(str_replace('"', "'", json_encode($aExtraParams))); // JSON encode, change the style of the quotes and escape them
$sHtml .= '<tr class="containerHeader"><td>'.Dict::Format('UI:TruncatedResults', MetaModel::GetConfig()->GetMinDisplayLimit(), $oSet->Count()).'&nbsp;&nbsp;<a href="Javascript:ReloadTruncatedList(\''.$divId.'\', \''.$sFilter.'\', \''.$sExtraParams.'\');">'.Dict::S('UI:DisplayAll').'</a></td><td>';
$sHtml .= '<tr class="containerHeader"><td>'.Dict::Format('UI:TruncatedResults', utils::GetConfig()->GetMinDisplayLimit(), $oSet->Count()).'&nbsp;&nbsp;<a href="Javascript:ReloadTruncatedList(\''.$divId.'\', \''.$sFilter.'\', \''.$sExtraParams.'\');">'.Dict::S('UI:DisplayAll').'</a></td><td>';
$oPage->add_ready_script("$('#{$divId} table.listResults').addClass('truncated');");
$oPage->add_ready_script("$('#{$divId} table.listResults tr:last td').addClass('truncated');");
}
@@ -904,12 +871,13 @@ EOF
if (isset($aExtraParams['currentId']))
{
$sSearchFormId = $aExtraParams['currentId'];
$iSearchFormId++;
}
else
{
$iSearchFormId = $oPage->GetUniqueId();
$iSearchFormId++;
$sSearchFormId = 'SimpleSearchForm'.$iSearchFormId;
$sHtml .= "<div id=\"ds_$sSearchFormId\" class=\"mini_tab{$iSearchFormId}\">\n";
$sHtml .= "<div id=\"$sSearchFormId\" class=\"mini_tab{$iSearchFormId}\">\n";
}
// Check if the current class has some sub-classes
if (isset($aExtraParams['baseClass']))
@@ -939,7 +907,7 @@ EOF
$sClassesCombo = MetaModel::GetName($sClassName);
}
$oUnlimitedFilter = new DBObjectSearch($sClassName);
$sHtml .= "<form id=\"fs_{$sSearchFormId}\" action=\"../pages/UI.php\">\n"; // Don't use $_SERVER['SCRIPT_NAME'] since the form may be called asynchronously (from ajax.php)
$sHtml .= "<form id=\"form{$iSearchFormId}\" action=\"../pages/UI.php\">\n"; // Don't use $_SERVER['SCRIPT_NAME'] since the form may be called asynchronously (from ajax.php)
$sHtml .= "<h2>".Dict::Format('UI:SearchFor_Class_Objects', $sClassesCombo)."</h2>\n";
$index = 0;
$sHtml .= "<p>\n";
@@ -1057,9 +1025,10 @@ EOF
{
static $iInputId = 0;
$sFieldPrefix = '';
$sFormPrefix = isset($aArgs['formPrefix']) ? $aArgs['formPrefix'] : '';
$sFieldPrefix = isset($aArgs['prefix']) ? $sFormPrefix.$aArgs['prefix'] : $sFormPrefix;
if (isset($aArgs['prefix']))
{
$sFieldPrefix = $aArgs['prefix'];
}
if (isset($aArgs[$sAttCode]) && empty($value))
{
// default value passed by the context (either the app context of the operation)
@@ -1072,57 +1041,48 @@ EOF
}
else
{
$iInputId = $oPage->GetUniqueId();
$iInputId++;
$iId = $iInputId;
}
if (!$oAttDef->IsExternalField())
{
$bMandatory = 'false';
$bMandatory = 0;
if ( (!$oAttDef->IsNullAllowed()) || ($iFlags & OPT_ATT_MANDATORY))
{
$bMandatory = 'true';
$bMandatory = 1;
}
$sValidationField = "<span class=\"form_validation\" id=\"v_{$iId}\"></span>";
$sValidationField = "<span id=\"v_{$iId}\"></span>";
$sHelpText = $oAttDef->GetHelpOnEdition();
$aEventsList = array();
$aEventsList = array('validate');
switch($oAttDef->GetEditClass())
{
case 'Date':
case 'DateTime':
$aEventsList[] ='validate';
$aEventsList[] ='keyup';
$aEventsList[] ='change';
$sHTMLValue = "<input title=\"$sHelpText\" class=\"date-pick\" type=\"text\" size=\"20\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" value=\"$value\" id=\"$iId\"/>&nbsp;{$sValidationField}";
break;
case 'Password':
$aEventsList[] ='validate';
$aEventsList[] ='keyup';
$aEventsList[] ='change';
$sHTMLValue = "<input title=\"$sHelpText\" type=\"password\" size=\"30\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" value=\"$value\" id=\"$iId\"/>&nbsp;{$sValidationField}";
break;
case 'Text':
$aEventsList[] ='validate';
$aEventsList[] ='keyup';
$aEventsList[] ='change';
$sHTMLValue = "<table><tr><td><textarea class=\"resizable\" title=\"$sHelpText\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" rows=\"8\" cols=\"40\" id=\"$iId\">$value</textarea></td><td>{$sValidationField}</td></tr></table>";
break;
case 'HTML':
$oWidget = new UIHTMLEditorWidget($iId, $sAttCode, $sNameSuffix, $sFieldPrefix, $sHelpText, $sValidationField, $value, $bMandatory);
$sHTMLValue = $oWidget->Display($oPage, $aArgs);
break;
case 'LinkedSet':
$aEventsList[] ='validate';
$aEventsList[] ='change';
$oWidget = new UILinksWidget($sClass, $sAttCode, $iId, $sNameSuffix, $oAttDef->DuplicatesAllowed());
$sHTMLValue = $oWidget->Display($oPage, $value);
break;
case 'Document':
$aEventsList[] ='validate';
$aEventsList[] ='change';
$oDocument = $value; // Value is an ormDocument object
$sFileName = '';
@@ -1132,60 +1092,67 @@ EOF
}
$iMaxFileSize = utils::ConvertToBytes(ini_get('upload_max_filesize'));
$sHTMLValue = "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$iMaxFileSize\" />\n";
$sHTMLValue .= "<input name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" type=\"hidden\" id=\"$iId\" \" value=\"$sFileName\"/>\n";
$sHTMLValue .= "<span id=\"name_$iInputId\">$sFileName</span><br/>\n";
$sHTMLValue .= "<input title=\"$sHelpText\" name=\"file_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" type=\"file\" id=\"file_$iId\" onChange=\"UpdateFileName('$iId', this.value)\"/>&nbsp;{$sValidationField}\n";
$sHTMLValue .= "<input name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" type=\"hidden\" id=\"$iId\" \" value=\"$sFileName\"/>\n";
$sHTMLValue .= "<span id=\"name_$iInputId\">$sFileName</span><br/>\n";
$sHTMLValue .= "<input title=\"$sHelpText\" name=\"file_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" type=\"file\" id=\"file_$iId\" onChange=\"UpdateFileName('$iId', this.value)\"/>&nbsp;{$sValidationField}\n";
break;
case 'List':
// Not editable for now...
$sHTMLValue = '';
// Not editable for now...
$sHTMLValue = '';
break;
case 'One Way Password':
$aEventsList[] ='validate';
$oWidget = new UIPasswordWidget($sAttCode, $iId, $sNameSuffix);
$sHTMLValue = $oWidget->Display($oPage, $aArgs);
// Event list & validation is handled directly by the widget
$oWidget = new UIPasswordWidget($sAttCode, $iId, $sNameSuffix);
$sHTMLValue = $oWidget->Display($oPage, $aArgs);
// Event list & validation is handled directly by the widget
break;
case 'ExtKey':
$aEventsList[] ='validate';
$aEventsList[] ='change';
$aAllowedValues = MetaModel::GetAllowedValues_att($sClass, $sAttCode, $aArgs);
$iFieldSize = $oAttDef->GetMaxSize();
$iMaxComboLength = $oAttDef->GetMaximumComboLength();
$oWidget = new UIExtKeyWidget($sAttCode, $sClass, $oAttDef->GetLabel(), $aAllowedValues, $value, $iId, $bMandatory, $sNameSuffix, $sFieldPrefix, $sFormPrefix);
$sHTMLValue = $oWidget->Display($oPage, $aArgs);
break;
case 'String':
default:
$aEventsList[] ='validate';
// #@# todo - add context information (depending on dimensions)
$aAllowedValues = MetaModel::GetAllowedValues_att($sClass, $sAttCode, $aArgs);
$iFieldSize = $oAttDef->GetMaxSize();
if ($aAllowedValues !== null)
{
// Discrete list of values, use a SELECT
$sHTMLValue = "<select title=\"$sHelpText\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" id=\"$iId\">\n";
$sHTMLValue .= "<option value=\"\">".Dict::S('UI:SelectOne')."</option>\n";
foreach($aAllowedValues as $key => $display_value)
if (count($aAllowedValues) > 50)
{
if ((count($aAllowedValues) == 1) && ($bMandatory == 'true') )
// too many choices, use an autocomplete
// The input for the auto complete
if ($oAttDef->IsNull($value)) // Null values are displayed as ''
{
// When there is only once choice, select it by default
$sSelected = ' selected';
$sDisplayValue = '';
}
else
{
$sSelected = ($value == $key) ? ' selected' : '';
}
$sHTMLValue .= "<option value=\"$key\"$sSelected>$display_value</option>\n";
$sHTMLValue = "<input count=\"".count($aAllowedValues)."\" type=\"text\" id=\"label_$iId\" size=\"30\" maxlength=\"$iFieldSize\" value=\"$sDisplayValue\"/>&nbsp;{$sValidationField}";
// another hidden input to store & pass the object's Id
$sHTMLValue .= "<input type=\"hidden\" id=\"$iId\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" value=\"$value\" />\n";
$oPage->add_ready_script("\$('#label_$iId').autocomplete('./ajax.render.php', { scroll:true, minChars:3, formatItem:formatItem, autoFill:true, keyHolder:'#$iId', extraParams:{operation:'autocomplete', sclass:'$sClass',attCode:'".$sAttCode."'}});");
$oPage->add_ready_script("\$('#label_$iId').blur(function() { $(this).search(); } );");
$oPage->add_ready_script("\$('#label_$iId').result( function(event, data, formatted) { OnAutoComplete('$iId', event, data, formatted); } );");
$aEventsList[] ='change';
}
else
{
// Few choices, use a normal 'select'
// In case there are no valid values, the select will be empty, thus blocking the user from validating the form
$sHTMLValue = "<select title=\"$sHelpText\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" id=\"$iId\">\n";
$sHTMLValue .= "<option value=\"\">".Dict::S('UI:SelectOne')."</option>\n";
foreach($aAllowedValues as $key => $display_value)
{
if ((count($aAllowedValues) == 1) && $bMandatory )
{
// When there is only once choice, select it by default
$sSelected = ' selected';
}
else
{
$sSelected = ($value == $key) ? ' selected' : '';
}
$sHTMLValue .= "<option value=\"$key\"$sSelected>$display_value</option>\n";
}
$sHTMLValue .= "</select>&nbsp;{$sValidationField}\n";
$aEventsList[] ='change';
}
$sHTMLValue .= "</select>&nbsp;{$sValidationField}\n";
$aEventsList[] ='change';
}
else
{
@@ -1193,7 +1160,7 @@ EOF
$aEventsList[] ='keyup';
$aEventsList[] ='change';
}
break;
break;
}
$sPattern = addslashes($oAttDef->GetValidationPattern()); //'^([0-9]+)$';
if (!empty($aEventsList))
@@ -1203,12 +1170,12 @@ EOF
{
$sNullValue = "'$sNullValue'"; // Add quotes to turn this into a JS string if it's not a number
}
$oPage->add_ready_script("$('#$iId').bind('".implode(' ', $aEventsList)."', function(evt, sFormId) { return ValidateField('$iId', '$sPattern', $bMandatory, sFormId, $sNullValue) } );\n"); // Bind to a custom event: validate
$oPage->add_ready_script("$('#$iId').bind('".implode(' ', $aEventsList)."', function(evt, sFormId) { return ValidateField('$iId', '$sPattern', $bMandatory, sFormId, $sNullValue) } );"); // Bind to a custom event: validate
}
$aDependencies = MetaModel::GetDependentAttributes($sClass, $sAttCode); // List of attributes that depend on the current one
if (count($aDependencies) > 0)
{
$oPage->add_ready_script("$('#$iId').bind('change', function(evt, sFormId) { return oWizardHelper{$sFormPrefix}.UpdateDependentFields(['".implode("','", $aDependencies)."']) } );\n"); // Bind to a custom event: validate
$oPage->add_ready_script("$('#$iId').bind('change', function(evt, sFormId) { return UpdateDependentFields(['".implode("','", $aDependencies)."']) } );"); // Bind to a custom event: validate
}
}
return "<div>{$sHTMLValue}</div>";
@@ -1216,14 +1183,9 @@ EOF
public function DisplayModifyForm(WebPage $oPage, $aExtraParams = array())
{
static $iGlobalFormId = 1;
static $iGlobalFormId = 0;
$iGlobalFormId++;
$sPrefix = '';
if (isset($aExtraParams['formPrefix']))
{
$sPrefix = $aExtraParams['formPrefix'];
}
$this->m_iFormId = $sPrefix.$iGlobalFormId;
$this->m_iFormId = $iGlobalFormId;
$sClass = get_class($this);
$oAppContext = new ApplicationContext();
$sStateAttCode = MetaModel::GetStateAttributeCode($sClass);
@@ -1240,7 +1202,7 @@ EOF
}
$oPage->add("<form action=\"$sFormAction\" id=\"form_{$this->m_iFormId}\" enctype=\"multipart/form-data\" method=\"post\" onSubmit=\"return CheckFields('form_{$this->m_iFormId}', true)\">\n");
$oPage->AddTabContainer(OBJECT_PROPERTIES_TAB, $sPrefix);
$oPage->AddTabContainer(OBJECT_PROPERTIES_TAB);
$oPage->SetCurrentTabContainer(OBJECT_PROPERTIES_TAB);
$oPage->SetCurrentTab(Dict::S('UI:PropertiesTab'));
// $aDetailsList = $this->FLattenZList(MetaModel::GetZListItems($sClass, 'details'));
@@ -1269,35 +1231,15 @@ EOF
$oPage->add('<table style="vertical-align:top"><tr>');
foreach($aCols as $sColIndex => $aFieldsets)
{
$sLabel = '';
$sPreviousLabel = '';
$aDetails[$sTab][$sColIndex] = array();
$oPage->add('<td style="vertical-align:top">');
//$aDetails[$sTab][$sColIndex] = array();
foreach($aFieldsets as $sFieldsetName => $aFields)
{
if (!empty($sFieldsetName) && ($sFieldsetName[0]!='_'))
$aDetails[$sTab][$sColIndex] = array();
if (!empty($sFieldsetName))
{
$sLabel = $sFieldsetName;
}
else
{
$sLabel = '';
}
if ($sLabel != $sPreviousLabel)
{
if (!empty($sPreviousLabel))
{
$oPage->add('<fieldset>');
$oPage->add('<legend>'.Dict::S($sPreviousLabel).'</legend>');
}
$oPage->Details($aDetails[$sTab][$sColIndex]);
if (!empty($sPreviousLabel))
{
$oPage->add('</fieldset>');
}
$aDetails[$sTab][$sColIndex] = array();
$sPreviousLabel = $sLabel;
$oPage->add('<fieldset>');
$oPage->add('<legend>'.Dict::S($sFieldsetName).'</legend>');
}
foreach($aFields as $sAttCode)
{
@@ -1317,12 +1259,9 @@ EOF
else
{
$iFlags = $this->GetAttributeFlags($sAttCode);
$sInputId = $this->m_iFormId.'_'.$sAttCode;
if ($iFlags & OPT_ATT_HIDDEN)
{
// Attribute is hidden, add a hidden input
$oPage->add('<input type="hidden" id="'.$sInputId.'" name="attr_'.$sPrefix.$sAttCode.'" value="'.htmlentities($this->Get($sAttCode), ENT_QUOTES, 'UTF-8').'"/>');
$aFieldsMap[$sAttCode] = $sInputId;
// Attribute is hidden, do nothing
}
else
{
@@ -1330,14 +1269,13 @@ EOF
{
// Attribute is read-only
$sHTMLValue = $this->GetAsHTML($sAttCode);
$sHTMLValue .= '<input type="hidden" id="'.$sInputId.'" name="attr_'.$sPrefix.$sAttCode.'" value="'.htmlentities($this->Get($sAttCode), ENT_QUOTES, 'UTF-8').'"/>';
$aFieldsMap[$sAttCode] = $sInputId;
}
else
{
$sValue = $this->Get($sAttCode);
$sDisplayValue = $this->GetEditValue($sAttCode);
$aArgs = array('this' => $this, 'formPrefix' => $sPrefix);
$aArgs = array('this' => $this);
$sInputId = $this->m_iFormId.'_'.$sAttCode;
$sHTMLValue = "<span id=\"field_{$sInputId}\">".self::GetFormElementForField($oPage, $sClass, $sAttCode, $oAttDef, $sValue, $sDisplayValue, $sInputId, '', $iFlags, $aArgs).'</span>';
$aFieldsMap[$sAttCode] = $sInputId;
@@ -1357,16 +1295,11 @@ EOF
$aDetails[$sTab][$sColIndex][] = $aVal;
}
}
}
if (!empty($sPreviousLabel))
{
$oPage->add('<fieldset>');
$oPage->add('<legend>'.Dict::S($sPreviousLabel).'</legend>');
}
$oPage->Details($aDetails[$sTab][$sColIndex]);
if (!empty($sPreviousLabel))
{
$oPage->add('</fieldset>');
$oPage->Details($aDetails[$sTab][$sColIndex]);
if (!empty($sFieldsetName))
{
$oPage->add('</fieldset>');
}
}
$oPage->add('</td>');
}
@@ -1374,10 +1307,8 @@ EOF
}
// Now display the relations, one tab per relation
if (!isset($aExtraParams['noRelations']))
{
$this->DisplayBareRelations($oPage, true); // Edit mode
}
$this->DisplayBareRelations($oPage, true); // Edit mode
$oPage->SetCurrentTab('');
$oPage->add("<input type=\"hidden\" name=\"class\" value=\"$sClass\">\n");
@@ -1392,21 +1323,16 @@ EOF
// The object already exists in the database, it's modification
$oPage->add("<input type=\"hidden\" name=\"id\" value=\"$iKey\">\n");
$oPage->add("<input type=\"hidden\" name=\"operation\" value=\"apply_modify\">\n");
// $oPage->add("<button type=\"button\" id=\"btn_cancel_{$sPrefix}\" class=\"action\" onClick=\"BackToDetails('$sClass', $iKey)\"><span>".Dict::S('UI:Button:Cancel')."</span></button>&nbsp;&nbsp;&nbsp;&nbsp;\n");
$oPage->add("<button type=\"button\" class=\"action cancel\"><span>".Dict::S('UI:Button:Cancel')."</span></button>&nbsp;&nbsp;&nbsp;&nbsp;\n");
$oPage->add("<button type=\"button\" class=\"action\" onClick=\"BackToDetails('$sClass', $iKey)\"><span>".Dict::S('UI:Button:Cancel')."</span></button>&nbsp;&nbsp;&nbsp;&nbsp;\n");
$oPage->add("<button type=\"submit\" class=\"action\"><span>".Dict::S('UI:Button:Apply')."</span></button>\n");
}
else
{
// The object does not exist in the database it's a creation
$oPage->add("<input type=\"hidden\" name=\"operation\" value=\"apply_new\">\n");
// $oPage->add("<button type=\"button\" id=\"btn_cancel_{$sPrefix}\" class=\"action\" onClick=\"BackToDetails('$sClass', $iKey)\"><span>".Dict::S('UI:Button:Cancel')."</span></button>&nbsp;&nbsp;&nbsp;&nbsp;\n");
$oPage->add("<button type=\"button\" class=\"action cancel\">".Dict::S('UI:Button:Cancel')."</button>&nbsp;&nbsp;&nbsp;&nbsp;\n");
$oPage->add("<button type=\"button\" class=\"action\" onClick=\"BackToList('$sClass')\"><span>".Dict::S('UI:Button:Cancel')."</span></button>&nbsp;&nbsp;&nbsp;&nbsp;\n");
$oPage->add("<button type=\"submit\" class=\"action\"><span>".Dict::S('UI:Button:Create')."</span></button>\n");
}
// Hook the cancel button via jQuery so that it can be unhooked easily as well if needed
$sDefaultUrl = '../pages/UI.php?operation=cancel';
$oPage->add_ready_script("$('#form_{$this->m_iFormId} button.cancel').click( function() { BackToDetails('$sClass', $iKey, '$sDefaultUrl')} );");
$oPage->add("</form>\n");
$iFieldsCount = count($aFieldsMap);
@@ -1415,16 +1341,15 @@ EOF
$oPage->add_script(
<<<EOF
// Create the object once at the beginning of the page...
var oWizardHelper$sPrefix = new WizardHelper('$sClass', '$sPrefix');
oWizardHelper$sPrefix.SetFieldsMap($sJsonFieldsMap);
oWizardHelper$sPrefix.SetFieldsCount($iFieldsCount);
var oWizardHelper = new WizardHelper('$sClass');
oWizardHelper.SetFieldsMap($sJsonFieldsMap);
oWizardHelper.SetFieldsCount($iFieldsCount);
EOF
);
$oPage->add_ready_script(
<<<EOF
// Starts the validation when the page is ready
CheckFields('form_{$this->m_iFormId}', false);
EOF
);
}
@@ -1438,12 +1363,9 @@ EOF
if ($oObjectToClone == null)
{
$sTargetState = MetaModel::GetDefaultState($sClass);
$oObj = MetaModel::NewObject($sClass);
if (!empty($sStateAttCode))
{
$sTargetState = MetaModel::GetDefaultState($sClass);
$oObj->Set($sStateAttCode, $sTargetState);
}
$oObj->Set($sStateAttCode, $sTargetState);
}
else
{
@@ -1464,6 +1386,7 @@ EOF
// Now fill-in the fields with default/supplied values
foreach($aList as $sAttCode)
{
$bMandatory = false;
$aAllowedValues = MetaModel::GetAllowedValues_att($sClass, $sAttCode, $aArgs);
if (isset($aArgs['default'][$sAttCode]))
{
@@ -1481,7 +1404,7 @@ EOF
}
}
}
return $oObj->DisplayModifyForm( $oPage, $aExtraParams);
return $oObj->DisplayModifyForm( $oPage, $aExtraParams = array());
}
protected static function ProcessZlist($aList, $aDetails, $sCurrentTab, $sCurrentCol, $sCurrentSet)
@@ -1489,7 +1412,6 @@ EOF
//echo "<pre>ZList: ";
//print_r($aList);
//echo "</pre>\n";
$index = 0;
foreach($aList as $sKey => $value)
{
if (is_array($value))
@@ -1504,7 +1426,7 @@ EOF
//echo "<p>Found a tab: $sName ($sKey)</p>\n";
if(!isset($aDetails[$sName]))
{
$aDetails[$sName] = array('col1' => array());
$aDetails[$sName] = array('col1' => array('' => array()));
}
$aDetails = self::ProcessZlist($value, $aDetails, $sName, 'col1', '');
break;
@@ -1523,7 +1445,7 @@ EOF
//echo "<p>Found a column: $sName ($sKey)</p>\n";
if(!isset($aDetails[$sCurrentTab][$sName]))
{
$aDetails[$sCurrentTab][$sName] = array();
$aDetails[$sCurrentTab][$sName] = array('' => array());
}
$aDetails = self::ProcessZlist($value, $aDetails, $sCurrentTab, $sName, '');
break;
@@ -1533,16 +1455,8 @@ EOF
else
{
//echo "<p>Scalar value: $value, in [$sCurrentTab][$sCurrentCol][$sCurrentSet][]</p>\n";
if (empty($sCurrentSet))
{
$aDetails[$sCurrentTab][$sCurrentCol]['_'.$index][] = $value;
}
else
{
$aDetails[$sCurrentTab][$sCurrentCol][$sCurrentSet][] = $value;
}
$aDetails[$sCurrentTab][$sCurrentCol][$sCurrentSet][] = $value;
}
$index++;
}
return $aDetails;
}
@@ -1714,100 +1628,5 @@ EOF
return $sContextParam;
}
}
/**
* Updates the object from the POSTed parameters
*/
function UpdateObject($sFormPrefix = '')
{
foreach(MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode=>$oAttDef)
{
if ($oAttDef->IsLinkSet() && $oAttDef->IsIndirect())
{
$aLinks = utils::ReadPostedParam("attr_{$sFormPrefix}{$sAttCode}", '');
$sLinkedClass = $oAttDef->GetLinkedClass();
$sExtKeyToRemote = $oAttDef->GetExtKeyToRemote();
$sExtKeyToMe = $oAttDef->GetExtKeyToMe();
$oLinkedSet = DBObjectSet::FromScratch($sLinkedClass);
if (is_array($aLinks))
{
foreach($aLinks as $id => $aData)
{
if (is_numeric($id))
{
if ($id < 0)
{
// New link to be created, the opposite of the id (-$id) is the ID of the remote object
$oLink = MetaModel::NewObject($sLinkedClass);
$oLink->Set($sExtKeyToRemote, -$id);
$oLink->Set($sExtKeyToMe, $this->GetKey());
}
else
{
// Existing link, potentially to be updated...
$oLink = MetaModel::GetObject($sLinkedClass, $id);
}
// Now populate the attributes
foreach($aData as $sName => $value)
{
if (MetaModel::IsValidAttCode($sLinkedClass, $sName))
{
$oLinkAttDef = MetaModel::GetAttributeDef($sLinkedClass, $sName);
if ($oLinkAttDef->IsWritable())
{
$oLink->Set($sName, $value);
}
}
}
$oLinkedSet->AddObject($oLink);
}
}
}
$this->Set($sAttCode, $oLinkedSet);
}
else if ($oAttDef->IsWritable())
{
$iFlags = $this->GetAttributeFlags($sAttCode);
if ($iFlags & (OPT_ATT_HIDDEN | OPT_ATT_READONLY))
{
// Non-visible, or read-only attribute, do nothing
}
elseif ($oAttDef->GetEditClass() == 'Document')
{
// There should be an uploaded file with the named attr_<attCode>
$oDocument = utils::ReadPostedDocument("file_{$sFormPrefix}{$sAttCode}");
if (!$oDocument->IsEmpty())
{
// A new file has been uploaded
$this->Set($sAttCode, $oDocument);
}
}
elseif ($oAttDef->GetEditClass() == 'One Way Password')
{
// Check if the password was typed/changed
$bChanged = utils::ReadPostedParam("attr_{$sFormPrefix}{$sAttCode}_changed", false);
if ($bChanged)
{
// The password has been changed or set
$rawValue = utils::ReadPostedParam("attr_{$sFormPrefix}{$sAttCode}", null);
$this->Set($sAttCode, $rawValue);
}
}
else
{
$rawValue = utils::ReadPostedParam("attr_{$sFormPrefix}{$sAttCode}", null);
if (!is_null($rawValue))
{
$aAttributes[$sAttCode] = trim($rawValue);
$previousValue = $this->Get($sAttCode);
if ($previousValue !== $aAttributes[$sAttCode])
{
$this->Set($sAttCode, $aAttributes[$sAttCode]);
}
}
}
}
}
}
}
?>

View File

@@ -24,14 +24,14 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT."/application/webpage.class.inc.php");
require_once("../application/webpage.class.inc.php");
class CSVPage extends WebPage
{
function __construct($s_title)
{
parent::__construct($s_title);
$this->add_header("Content-type: text/html; charset=utf-8");
$this->add_header("Content-type: text/html; charset=iso-8859-1");
$this->add_header("Cache-control: no-cache");
}

View File

@@ -23,8 +23,8 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/webpage.class.inc.php');
require_once(APPROOT.'/application/utils.inc.php');
require_once('../application/webpage.class.inc.php');
require_once('../application/utils.inc.php');
/**
* Helper class to manage 'blocks' of HTML pieces that are parts of a page and contain some list of cmdb objects
*
@@ -214,7 +214,7 @@ class DisplayBlock
{
$sHtml = '';
$aExtraParams = array_merge($aExtraParams, $this->m_aParams);
$aExtraParams['currentId'] = $sId;
$aExtraParams['block_id'] = $sId;
$sExtraParams = addslashes(str_replace('"', "'", json_encode($aExtraParams))); // JSON encode, change the style of the quotes and escape them
$bAutoReload = false;
@@ -224,14 +224,14 @@ class DisplayBlock
{
case 'fast':
$bAutoReload = true;
$iReloadInterval = MetaModel::GetConfig()->GetFastReloadInterval()*1000;
$iReloadInterval = utils::GetConfig()->GetFastReloadInterval()*1000;
break;
case 'standard':
case 'true':
case true:
$bAutoReload = true;
$iReloadInterval = MetaModel::GetConfig()->GetStandardReloadInterval()*1000;
$iReloadInterval = utils::GetConfig()->GetStandardReloadInterval()*1000;
break;
default:
@@ -253,7 +253,7 @@ class DisplayBlock
{
// render now
$sHtml .= "<div id=\"$sId\" class=\"display_block\">\n";
$sHtml .= $this->GetRenderContent($oPage, $aExtraParams, $sId);
$sHtml .= $this->GetRenderContent($oPage, $aExtraParams);
$sHtml .= "</div>\n";
}
else
@@ -303,18 +303,10 @@ class DisplayBlock
public function RenderContent(WebPage $oPage, $aExtraParams = array())
{
if (empty($aExtraParams['currentId']))
{
$sId = $oPage->GetUniqueId(); // Works only if the page is not an Ajax one !
}
else
{
$sId = $aExtraParams['currentId'];
}
$oPage->add($this->GetRenderContent($oPage, $aExtraParams, $sId));
$oPage->add($this->GetRenderContent($oPage, $aExtraParams));
}
public function GetRenderContent(WebPage $oPage, $aExtraParams = array(), $sId)
public function GetRenderContent(WebPage $oPage, $aExtraParams = array())
{
$sHtml = '';
// Add the extra params into the filter if they make sense for such a filter
@@ -726,21 +718,22 @@ class DisplayBlock
break;
case 'search':
static $iSearchSectionId = 1;
$sStyle = (isset($aExtraParams['open']) && ($aExtraParams['open'] == 'true')) ? 'SearchDrawer' : 'SearchDrawer DrawerClosed';
$sHtml .= "<div id=\"ds_$sId\" class=\"$sStyle\">\n";
$sHtml .= "<div id=\"Search_$iSearchSectionId\" class=\"$sStyle\">\n";
$oPage->add_ready_script(
<<<EOF
$("#dh_$sId").click( function() {
$("#ds_$sId").slideToggle('normal', function() { $("#ds_$sId").parent().resize(); } );
$("#dh_$sId").toggleClass('open');
$("#LnkSearch_$iSearchSectionId").click( function() {
$("#Search_$iSearchSectionId").slideToggle('normal', function() { $("#Search_$iSearchSectionId").parent().resize(); } );
$("#LnkSearch_$iSearchSectionId").toggleClass('open');
});
EOF
);
$aExtraParams['currentId'] = $sId;
$sHtml .= cmdbAbstractObject::GetSearchForm($oPage, $this->m_oSet, $aExtraParams);
$sHtml .= "</div>\n";
$sHtml .= "<div class=\"HRDrawer\"></div>\n";
$sHtml .= "<div id=\"dh_$sId\" class=\"DrawerHandle\">".Dict::S('UI:SearchToggle')."</div>\n";
$sHtml .= "<div id=\"LnkSearch_$iSearchSectionId\" class=\"DrawerHandle\">".Dict::S('UI:SearchToggle')."</div>\n";
$iSearchSectionId++;
break;
case 'open_flash_chart':
@@ -757,7 +750,7 @@ EOF
break;
case 'open_flash_chart_ajax':
require_once(APPROOT.'/pages/php-ofc-library/open-flash-chart.php');
include '../pages/php-ofc-library/open-flash-chart.php';
$sChartType = isset($aExtraParams['chart_type']) ? $aExtraParams['chart_type'] : 'pie';
$oChart = new open_flash_chart();
@@ -875,7 +868,7 @@ EOF
*/
class HistoryBlock extends DisplayBlock
{
public function GetRenderContent(WebPage $oPage, $aExtraParams = array(), $sId)
public function GetRenderContent(WebPage $oPage, $aExtraParams = array())
{
$sHtml = '';
$oSet = new CMDBObjectSet($this->m_oFilter, array('date'=>false));
@@ -957,7 +950,7 @@ class MenuBlock extends DisplayBlock
* an object in with the same tab active by default as the tab that was active when selecting
* the "Modify..." action.
*/
public function GetRenderContent(WebPage $oPage, $aExtraParams = array(), $sId)
public function GetRenderContent(WebPage $oPage, $aExtraParams = array())
{
$sHtml = '';
$oAppContext = new ApplicationContext();

View File

@@ -23,7 +23,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
require_once('../application/cmdbabstract.class.inc.php');
/**
* This class manages the input/output tasks

View File

@@ -23,9 +23,9 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT."/application/nicewebpage.class.inc.php");
require_once(APPROOT."/application/applicationcontext.class.inc.php");
require_once(APPROOT."/application/user.preferences.class.inc.php");
require_once("../application/nicewebpage.class.inc.php");
require_once("../application/applicationcontext.class.inc.php");
require_once("../application/user.preferences.class.inc.php");
/**
* Web page with some associated CSS and scripts (jquery) for a fancier display
*/
@@ -67,8 +67,6 @@ class iTopWebPage extends NiceWebPage
$this->add_linked_script("../js/jquery.blockUI.js");
$this->add_linked_script("../js/utils.js");
$this->add_linked_script("../js/swfobject.js");
$this->add_linked_script("../js/ckeditor/ckeditor.js");
$this->add_linked_script("../js/ckeditor/adapters/jquery.js");
$this->add_ready_script(
<<<EOF
try
@@ -171,39 +169,6 @@ class iTopWebPage extends NiceWebPage
$("tbody tr.green_even:odd",table).removeClass('even').removeClass('green_even').addClass('green');
}
});
$('.resizable').resizable(); // Make resizable everything that claims to be resizable !
// Adjust initial size
$('.v-resizable').each( function()
{
var parent_id = $(this).parent().id;
// Restore the saved height
var iHeight = GetUserPreference(parent_id+'_'+this.id+'_height', undefined);
if (iHeight != undefined)
{
$(this).height(parseInt(iHeight, 10)); // Parse in base 10 !);
}
// Adjust the child 'item''s height and width to fit
var container = $(this);
var fixedWidth = container.parent().innerWidth() - 6;
// Set the width to fit the parent
$(this).width(fixedWidth);
var headerHeight = $(this).find('.drag_handle').height();
// Now adjust the width and height of the child 'item'
container.find('.item').height(container.innerHeight() - headerHeight - 12).width(fixedWidth - 10);
}
);
// Make resizable, vertically only everything that claims to be v-resizable !
$('.v-resizable').resizable( { handles: 's', minHeight: $(this).find('.drag_handle').height(), minWidth: $(this).parent().innerWidth() - 6, maxWidth: $(this).parent().innerWidth() - 6, stop: function()
{
// Adjust the content
var container = $(this);
var headerHeight = $(this).find('.drag_handle').height();
container.find('.item').height(container.innerHeight() - headerHeight - 12);//.width(container.innerWidth());
var parent_id = $(this).parent().id;
SetUserPreference(parent_id+'_'+this.id+'_height', $(this).height(), true); // true => persistent
}
} );
// Tabs, using JQuery BBQ to store the history
// The "tab widgets" to handle.
@@ -297,6 +262,38 @@ class iTopWebPage extends NiceWebPage
changeMonth: true,
changeYear: true
});
$('.resizable').resizable(); // Make resizable everything that claims to be resizable !
// Adjust initial size
$('.v-resizable').each( function()
{
var parent_id = $(this).parent().id;
// Restore the saved height
var iHeight = GetUserPreference(parent_id+'_'+this.id+'_height', undefined);
if (iHeight != undefined)
{
$(this).height(parseInt(iHeight, 10)); // Parse in base 10 !);
}
// Adjust the child 'item''s height and width to fit
var container = $(this);
var fixedWidth = container.parent().innerWidth() - 6;
// Set the width to fit the parent
$(this).width(fixedWidth);
var headerHeight = $(this).find('.drag_handle').height();
// Now adjust the width and height of the child 'item'
container.find('.item').height(container.innerHeight() - headerHeight - 12).width(fixedWidth - 10);
}
);
// Make resizable, vertically only everything that claims to be v-resizable !
$('.v-resizable').resizable( { handles: 's', minHeight: $(this).find('.drag_handle').height(), minWidth: $(this).parent().innerWidth() - 6, maxWidth: $(this).parent().innerWidth() - 6, stop: function()
{
// Adjust the content
var container = $(this);
var headerHeight = $(this).find('.drag_handle').height();
container.find('.item').height(container.innerHeight() - headerHeight - 12);//.width(container.innerWidth());
var parent_id = $(this).parent().id;
SetUserPreference(parent_id+'_'+this.id+'_height', $(this).height(), true); // true => persistent
}
} );
// Restore the persisted sortable order, for all sortable lists... if any
$('.sortable').each(function()
{
@@ -371,16 +368,9 @@ EOF
window.history.back();
}
function BackToDetails(sClass, id, sDefaultUrl)
function BackToDetails(sClass, id)
{
if (id > 0)
{
window.location.href = './UI.php?operation=details&class='+sClass+'&id='+id;
}
else
{
window.location.href = sDefaultUrl;
}
window.location.href = './UI.php?operation=details&class='+sClass+'&id='+id;
}
@@ -401,16 +391,43 @@ EOF
EOF
);
// Build menus from module handlers
//
foreach(get_declared_classes() as $sPHPClass)
{
if (is_subclass_of($sPHPClass, 'ModuleHandlerAPI'))
{
$aCallSpec = array($sPHPClass, 'OnMenuCreation');
call_user_func($aCallSpec);
}
}
// Add the standard menus
/*
* +--------------------+
* | Welcome |
* +--------------------+
* Welcome To iTop
* +--------------------+
* | Tools |
* +--------------------+
* CSV Import
* +--------------------+
* | Admin Tools | << Only present if the user is an admin
* +--------------------+
* User Accounts
* Profiles
* Notifications
* Run Queries
* Export
* Data Model
* Universal Search
*/
$oWelcomeMenu = new MenuGroup('WelcomeMenu', 10 /* fRank */);
new TemplateMenuNode('WelcomeMenuPage', '../application/templates/welcome_menu.html', $oWelcomeMenu->GetIndex() /* oParent */, 1 /* fRank */);
$oToolsMenu = new MenuGroup('DataAdministration', 70 /* fRank */, 'Organization', UR_ACTION_MODIFY, UR_ALLOWED_YES|UR_ALLOWED_DEPENDS);
new WebPageMenuNode('CSVImportMenu', '../pages/csvimport.php', $oToolsMenu->GetIndex(), 1 /* fRank */);
// Add the admin menus
$oAdminMenu = new MenuGroup('AdminTools', 80 /* fRank */);
new OQLMenuNode('UserAccountsMenu', 'SELECT User', $oAdminMenu->GetIndex(), 1 /* fRank */);
new OQLMenuNode('ProfilesMenu', 'SELECT URP_Profiles', $oAdminMenu->GetIndex(), 2 /* fRank */);
new TemplateMenuNode('NotificationsMenu', '../application/templates/notifications_menu.html', $oAdminMenu->GetIndex(), 3 /* fRank */);
new OQLMenuNode('AuditCategories', 'SELECT AuditCategory', $oAdminMenu->GetIndex(), 4 /* fRank */);
new WebPageMenuNode('RunQueriesMenu', '../pages/run_query.php', $oAdminMenu->GetIndex(), 8 /* fRank */);
new WebPageMenuNode('ExportMenu', '../webservices/export.php', $oAdminMenu->GetIndex(), 9 /* fRank */);
new WebPageMenuNode('DataModelMenu', '../pages/schema.php', $oAdminMenu->GetIndex(), 10 /* fRank */);
new WebPageMenuNode('UniversalSearchMenu', '../pages/UniversalSearch.php', $oAdminMenu->GetIndex(), 11 /* fRank */);
}
public function AddToMenu($sHtml)
@@ -446,7 +463,7 @@ EOF
$oAppContext = new ApplicationContext();
$iCurrentOrganization = $oAppContext->GetCurrentValue('org_id');
$sHtml = '<div id="SiloSelection">';
$sHtml .= '<form style="display:inline" action="'.$_SERVER['PHP_SELF'].'"><select class="org_combo" name="c[org_id]" title="Pick an organization" onChange="this.form.submit();">';
$sHtml .= '<form style="display:inline" action="'.$_SERVER['PHP_SELF'].'"><select style="width:150px;font-size:x-small" name="c[org_id]" title="Pick an organization" onChange="this.form.submit();">';
$sSelected = ($iCurrentOrganization == '') ? ' selected' : '';
$sHtml .= '<option value=""'.$sSelected.'>'.Dict::S('UI:AllOrganizations').'</option>';
while($oOrg = $oSet->Fetch())
@@ -461,7 +478,7 @@ EOF
{
$sSelected = "";
}
$sHtml .= '<option title="'.$oOrg->GetName().'" value="'.$oOrg->GetKey().'"'.$sSelected.'>'.$oOrg->GetName().'</option>';
$sHtml .= '<option value="'.$oOrg->GetKey().'"'.$sSelected.'>'.$oOrg->GetName().'</option>';
}
$sHtml .= '</select>';
// Add other dimensions/context information to this form
@@ -644,37 +661,6 @@ EOF
}
$sLogOffMenu .= "</ul>\n</li>\n</ul></span>\n";
$sRestrictions = '';
if (!MetaModel::DBHasAccess(ACCESS_ADMIN_WRITE))
{
if (!MetaModel::DBHasAccess(ACCESS_ADMIN_WRITE))
{
$sRestrictions = Dict::S('UI:AccessRO-All');
}
}
elseif (!MetaModel::DBHasAccess(ACCESS_USER_WRITE))
{
$sRestrictions = Dict::S('UI:AccessRO-Users');
}
if (strlen($sRestrictions) > 0)
{
$sAdminMessage = trim(MetaModel::GetConfig()->Get('access_message'));
$sApplicationBanner = '<div id="admin-banner">';
$sApplicationBanner .= '<img src="../images/locked.png" style="vertical-align:middle;">';
$sApplicationBanner .= '&nbsp;<b>'.$sRestrictions.'</b>';
if (strlen($sAdminMessage) > 0)
{
$sApplicationBanner .= '&nbsp;<b>'.$sAdminMessage.'</b>';
}
$sApplicationBanner .= '</div>';
}
else
{
$sApplicationBanner = '';
}
$sOnlineHelpUrl = MetaModel::GetConfig()->Get('online_help');
//$sLogOffMenu = "<span id=\"logOffBtn\" style=\"height:55px;padding:0;margin:0;\"><img src=\"../images/onOffBtn.png\"></span>";
echo '<div id="left-pane" class="ui-layout-west">';
@@ -684,7 +670,7 @@ EOF
echo ' </div>';
echo ' <div class="header-menu">';
echo ' <div class="icon ui-state-default ui-corner-all"><span id="tPinMenu" class="ui-icon ui-icon-pin-w">pin</span></div>';
echo ' <div style="text-align:center;">'.$sForm.'</div>';
echo ' <div style="width:100%; text-align:center;">'.$sForm.'</div>';
echo ' </div>';
echo ' <div id="menu" class="ui-layout-content">';
echo ' <div id="inner_menu">';
@@ -701,10 +687,9 @@ EOF
echo '<div class="ui-layout-center">';
echo ' <div id="top-bar" style="width:100%">';
echo $sApplicationBanner;
echo ' <div id="global-search"><form action="../pages/UI.php"><table><tr><td></td><td id="g-search-input"><input type="text" name="text" value="'.$sText.'"'.$sOnClick.'/></td>';
echo ' <div id="global-search"><form action="../pages/UI.php"><table><tr><td id="g-search-input"><input type="text" name="text" value="'.$sText.'"'.$sOnClick.'/></td>';
echo '<td><input type="image" src="../images/searchBtn.png"/></a></td>';
echo '<td><a style="background:transparent;" href="'.$sOnlineHelpUrl.'" target="_blank"><img style="border:0;padding-left:20px;padding-right:10px;" title="'.Dict::S('UI:Help').'" src="../images/help.png"/></td>';
echo '<td><a style="background:transparent;" href="http://www.combodo.com/itop-help" target="_blank"><img style="border:0;padding-left:20px;padding-right:10px;" title="'.Dict::S('UI:Help').'" src="../images/help.png"/></td>';
echo '<td style="padding-right:20px;padding-left:10px;">'.$sLogOffMenu.'</td><td><input type="hidden" name="operation" value="full_text"/></td></tr></table></form></div>';
//echo '<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="hidden" name="operation" value="full_text"/></td></tr></table></form></div>';
echo ' </div>';
@@ -771,7 +756,6 @@ EOF
echo $this->s_deferred_content;
echo "<div style=\"display:none\" title=\"ex2\" id=\"ex2\">Please wait...</div>\n"; // jqModal Window
echo "<div style=\"display:none\" title=\"dialog\" id=\"ModalDlg\"></div>";
echo "<div style=\"display:none\" id=\"ajax_content\"></div>";
echo "</body>\n";
echo "</html>\n";

View File

@@ -23,7 +23,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT."/application/nicewebpage.class.inc.php");
require_once("../application/nicewebpage.class.inc.php");
/**
* Web page used for displaying the login form
*/
@@ -68,10 +68,6 @@ body {
border-left: 1px solid #000;
border-right: 1px solid #000;
border-top: 0;
text-align: center;
}
#pwd, #user,#old_pwd, #new_pwd, #retype_new_pwd {
width: 10em;
}
.center {
text-align: center;
@@ -107,7 +103,7 @@ EOF
$sAuthPwd = utils::ReadParam('suggest_pwd', '');
$sVersionShort = Dict::Format('UI:iTopVersion:Short', ITOP_VERSION);
$this->add("<div id=\"login-logo\"><a href=\"http://www.combodo.com/itop\"><img title=\"$sVersionShort\" src=\"../images/itop-logo-external.png\"></a></div>\n");
$this->add("<div id=\"login-logo\"><a href=\"http://www.combodo.com/itop\"><img title=\"$sVersionShort\" src=\"../images/itop-logo.png\"></a></div>\n");
$this->add("<div id=\"login\">\n");
$this->add("<h1>".Dict::S('UI:Login:Welcome')."</h1>\n");
if ($bFailedLogin)
@@ -119,9 +115,9 @@ EOF
$this->add("<p>".Dict::S('UI:Login:IdentifyYourself')."</p>\n");
}
$this->add("<form method=\"post\">\n");
$this->add("<table width=\"100%\">\n");
$this->add("<tr><td style=\"text-align:right\"><label for=\"user\">".Dict::S('UI:Login:UserNamePrompt').":</label></td><td style=\"text-align:left\"><input id=\"user\" type=\"text\" name=\"auth_user\" value=\"$sAuthUser\" /></td></tr>\n");
$this->add("<tr><td style=\"text-align:right\"><label for=\"pwd\">".Dict::S('UI:Login:PasswordPrompt').":</label></td><td style=\"text-align:left\"><input id=\"pwd\" type=\"password\" name=\"auth_pwd\" value=\"$sAuthPwd\" /></td></tr>\n");
$this->add("<table>\n");
$this->add("<tr><td><label for=\"user\">".Dict::S('UI:Login:UserNamePrompt').":</label></td><td><input id=\"user\" type=\"text\" name=\"auth_user\" value=\"$sAuthUser\" /></td></tr>\n");
$this->add("<tr><td><label for=\"pwd\">".Dict::S('UI:Login:PasswordPrompt').":</label></td><td><input id=\"pwd\" type=\"password\" name=\"auth_pwd\" value=\"$sAuthPwd\" /></td></tr>\n");
$this->add("<tr><td colspan=\"2\" class=\"center v-spacer\"> <input type=\"submit\" value=\"".Dict::S('UI:Button:Login')."\" /></td></tr>\n");
$this->add("</table>\n");
$this->add("<input type=\"hidden\" name=\"loginop\" value=\"login\" />\n");
@@ -163,10 +159,10 @@ EOF
$this->add("<p class=\"hilite\">".Dict::S('UI:Login:IncorrectOldPassword')."</p>\n");
}
$this->add("<form method=\"post\">\n");
$this->add("<table width=\"100%\">\n");
$this->add("<tr><td style=\"text-align:right\"><label for=\"old_pwd\">".Dict::S('UI:Login:OldPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"old_pwd\" name=\"old_pwd\" value=\"\" /></td></tr>\n");
$this->add("<tr><td style=\"text-align:right\"><label for=\"new_pwd\">".Dict::S('UI:Login:NewPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"new_pwd\" name=\"new_pwd\" value=\"\" /></td></tr>\n");
$this->add("<tr><td style=\"text-align:right\"><label for=\"retype_new_pwd\">".Dict::S('UI:Login:RetypeNewPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"retype_new_pwd\" name=\"retype_new_pwd\" value=\"\" /></td></tr>\n");
$this->add("<table>\n");
$this->add("<tr><td><label for=\"old_pwd\">".Dict::S('UI:Login:OldPasswordPrompt').":</label></td><td><input type=\"password\" id=\"old_pwd\" name=\"old_pwd\" value=\"\" /></td></tr>\n");
$this->add("<tr><td><label for=\"new_pwd\">".Dict::S('UI:Login:NewPasswordPrompt').":</label></td><td><input type=\"password\" id=\"new_pwd\" name=\"new_pwd\" value=\"\" /></td></tr>\n");
$this->add("<tr><td><label for=\"retype_new_pwd\">".Dict::S('UI:Login:RetypeNewPasswordPrompt').":</label></td><td><input type=\"password\" id=\"retype_new_pwd\" name=\"retype_new_pwd\" value=\"\" /></td></tr>\n");
$this->add("<tr><td colspan=\"2\" class=\"center v-spacer\"> <input type=\"button\" onClick=\"GoBack();\" value=\"".Dict::S('UI:Button:Cancel')."\" />&nbsp;&nbsp;<input type=\"submit\" onClick=\"return DoCheckPwd();\" value=\"".Dict::S('UI:Button:ChangePassword')."\" /></td></tr>\n");
$this->add("</table>\n");
$this->add("<input type=\"hidden\" name=\"loginop\" value=\"do_change_pwd\" />\n");
@@ -198,7 +194,7 @@ EOF
static function SecureConnectionRequired()
{
return MetaModel::GetConfig()->GetSecureConnectionRequired();
return utils::GetConfig()->GetSecureConnectionRequired();
}
static function IsConnectionSecure()
@@ -222,7 +218,7 @@ EOF
exit;
}
$aAllowedLoginTypes = MetaModel::GetConfig()->GetAllowedLoginTypes();
$aAllowedLoginTypes = utils::GetConfig()->GetAllowedLoginTypes();
if (isset($_SESSION['auth_user']))
{
@@ -270,7 +266,7 @@ EOF
case 'external':
// Web server supplied authentication
$bExternalAuth = false;
$sExtAuthVar = MetaModel::GetConfig()->GetExternalAuthenticationVariable(); // In which variable is the info passed ?
$sExtAuthVar = utils::GetConfig()->GetExternalAuthenticationVariable(); // In which variable is the info passed ?
$sEval = '$bExternalAuth = isset('.$sExtAuthVar.');';
eval($sEval);
if ($bExternalAuth)
@@ -326,16 +322,6 @@ EOF
{
// User is Ok, let's save it in the session and proceed with normal login
UserRights::Login($sAuthUser, $sAuthentication); // Login & set the user's language
if (MetaModel::GetConfig()->Get('log_usage'))
{
$oLog = new EventLoginUsage();
$oLog->Set('userinfo', UserRights::GetUser());
$oLog->Set('user_id', UserRights::GetUserObject()->GetKey());
$oLog->Set('message', 'Successful login');
$oLog->DBInsertNoReload();
}
$_SESSION['auth_user'] = $sAuthUser;
$_SESSION['login_mode'] = $sLoginMode;
}
@@ -353,7 +339,7 @@ EOF
static function DoLogin($bMustBeAdmin = false, $bIsAllowedToPortalUsers = false)
{
$operation = utils::ReadParam('loginop', '');
session_name(MetaModel::GetConfig()->Get('session_name'));
session_name(utils::GetConfig()->Get('session_name'));
session_start();
if ($operation == 'logoff')
@@ -364,7 +350,7 @@ EOF
}
else
{
$aAllowedLoginTypes = MetaModel::GetConfig()->GetAllowedLoginTypes();
$aAllowedLoginTypes = utils::GetConfig()->GetAllowedLoginTypes();
if (count($aAllowedLoginTypes) > 0)
{
$sLoginMode = $aAllowedLoginTypes[0];
@@ -407,7 +393,7 @@ EOF
if ($bMustBeAdmin && !UserRights::IsAdministrator())
{
require_once(APPROOT.'/setup/setuppage.class.inc.php');
require_once('../setup/setuppage.class.inc.php');
$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
$oP->add("<h1>".Dict::S('UI:Login:Error:AccessAdmin')."</h1>\n");
$oP->p("<a href=\"../pages/logoff.php\">".Dict::S('UI:LogOffMenu')."</a>");

View File

@@ -23,8 +23,8 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/utils.inc.php');
require_once(APPROOT.'/application/template.class.inc.php');
require_once('../application/utils.inc.php');
require_once('../application/template.class.inc.php');
/**
@@ -98,6 +98,7 @@ class ApplicationMenu
foreach(self::$aRootMenus as $aMenu)
{
$oMenuNode = self::GetMenuNode($aMenu['index']);
if (($oMenuNode->GetMenuId() == 'AdminTools') && (!UserRights::IsAdministrator())) continue; // Don't display the admin menu for non admin users
if (!$oMenuNode->IsEnabled()) continue; // Don't display a non-enabled menu
$oPage->AddToMenu('<h3>'.$oMenuNode->GetTitle().'</h3>');
$oPage->AddToMenu('<div>');
@@ -277,11 +278,6 @@ abstract class MenuNode
* User Rights allowed results (actually a bitmask) to check if the menu is enabled, null if none
*/
protected $m_iEnableActionResults;
/**
* Stimulus to check: if the user can 'apply' this stimulus, then she/he can see this menu
*/
protected $m_sEnableStimulus;
/**
* Create a menu item, sets the condition to have it displayed and inserts it into the application's main menu
@@ -289,18 +285,16 @@ abstract class MenuNode
* @param integer $iParentIndex ID of the parent menu, pass -1 for top level (group) items
* @param float $fRank Number used to order the list, any number will do, but for a given level (i.e same parent) all menus are sorted based on this value
* @param string $sEnableClass Name of class of object
* @param mixed $iActionCode UR_ACTION_READ, UR_ACTION_MODIFY, UR_ACTION_DELETE, UR_ACTION_BULKREAD, UR_ACTION_BULKMODIFY or UR_ACTION_BULKDELETE
* @param integer $iActionCode Either UR_ACTION_READ, UR_ACTION_MODIFY, UR_ACTION_DELETE, UR_ACTION_BULKREAD, UR_ACTION_BULKMODIFY or UR_ACTION_BULKDELETE
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
* @param string $sEnableStimulus The user can see this menu if she/he has enough rights to apply this stimulus
* @return MenuNode
*/
public function __construct($sMenuId, $iParentIndex = -1, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
public function __construct($sMenuId, $iParentIndex = -1, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
{
$this->sMenuId = $sMenuId;
$this->m_sEnableClass = $sEnableClass;
$this->m_iEnableAction = $iActionCode;
$this->m_iEnableActionResults = $iAllowedResults;
$this->m_sEnableStimulus = $sEnableStimulus;
$this->index = ApplicationMenu::InsertMenu($this, $iParentIndex, $fRank);
}
@@ -340,26 +334,11 @@ abstract class MenuNode
{
if (MetaModel::IsValidClass($this->m_sEnableClass))
{
if ($this->m_sEnableStimulus != null)
$iResult = UserRights::IsActionAllowed($this->m_sEnableClass, $this->m_iEnableAction);
if (($iResult & $this->m_iEnableActionResults))
{
if (!UserRights::IsStimulusAllowed($this->m_sEnableClass, $this->m_sEnableStimulus))
{
return false;
}
return true;
}
if ($this->m_iEnableAction != null)
{
$iResult = UserRights::IsActionAllowed($this->m_sEnableClass, $this->m_iEnableAction);
if (($iResult & $this->m_iEnableActionResults))
{
return true;
}
else
{
return false;
}
}
return true;
}
return false;
}
@@ -403,9 +382,9 @@ class MenuGroup extends MenuNode
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
* @return MenuGroup
*/
public function __construct($sMenuId, $fRank, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
public function __construct($sMenuId, $fRank, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
{
parent::__construct($sMenuId, -1 /* no parent, groups are at root level */, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
parent::__construct($sMenuId, -1 /* no parent, groups are at root level */, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
}
public function RenderContent(WebPage $oPage, $aExtraParams = array())
@@ -433,9 +412,9 @@ class TemplateMenuNode extends MenuNode
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
* @return MenuNode
*/
public function __construct($sMenuId, $sTemplateFile, $iParentIndex, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
public function __construct($sMenuId, $sTemplateFile, $iParentIndex, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
{
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
$this->sTemplateFile = $sTemplateFile;
}
@@ -488,9 +467,9 @@ class OQLMenuNode extends MenuNode
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
* @return MenuNode
*/
public function __construct($sMenuId, $sOQL, $iParentIndex, $fRank = 0, $bSearch = false, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
public function __construct($sMenuId, $sOQL, $iParentIndex, $fRank = 0, $bSearch = false, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
{
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
$this->sPageTitle = "Menu:$sMenuId+";
$this->sOQL = $sOQL;
$this->bSearch = $bSearch;
@@ -567,9 +546,9 @@ class SearchMenuNode extends MenuNode
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
* @return MenuNode
*/
public function __construct($sMenuId, $sClass, $iParentIndex, $fRank = 0, $bSearch = false, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
public function __construct($sMenuId, $sClass, $iParentIndex, $fRank = 0, $bSearch = false, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
{
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
$this->sPageTitle = "Menu:$sMenuId+";
$this->sClass = $sClass;
}
@@ -607,9 +586,9 @@ class WebPageMenuNode extends MenuNode
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
* @return MenuNode
*/
public function __construct($sMenuId, $sHyperlink, $iParentIndex, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
public function __construct($sMenuId, $sHyperlink, $iParentIndex, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
{
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
$this->sHyperlink = $sHyperlink;
}

View File

@@ -23,7 +23,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT."/application/webpage.class.inc.php");
require_once("../application/webpage.class.inc.php");
/**
* Web page with some associated CSS and scripts (jquery) for a fancier display
*/

View File

@@ -23,9 +23,9 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT."/application/nicewebpage.class.inc.php");
require_once(APPROOT."/application/applicationcontext.class.inc.php");
require_once(APPROOT."/application/user.preferences.class.inc.php");
require_once("../application/nicewebpage.class.inc.php");
require_once("../application/applicationcontext.class.inc.php");
require_once("../application/user.preferences.class.inc.php");
/**
* Web page with some associated CSS and scripts (jquery) for a fancier display
* of the Portal web page
@@ -164,7 +164,6 @@ EOF
public function output()
{
$sMenu = '';
$this->AddMenuButton('logoff', 'Portal:Disconnect', '../pages/logoff.php?portal=1'); // This menu is always present and is the last one
foreach($this->m_aMenuButtons as $aMenuItem)
{
@@ -174,4 +173,4 @@ EOF
parent::output();
}
}
?>
?>

View File

@@ -23,8 +23,8 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/core/cmdbobject.class.inc.php');
require_once(APPROOT.'/application/utils.inc.php');
require_once('../core/cmdbobject.class.inc.php');
require_once('../application/utils.inc.php');
MetaModel::Startup(ITOP_CONFIG_FILE);

View File

@@ -23,7 +23,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/displayblock.class.inc.php');
require_once('../application/displayblock.class.inc.php');
/**
* This class manages the special template format used internally to build the iTop web pages
*/
@@ -218,8 +218,8 @@ class DisplayTemplate
*/
static public function UnitTest()
{
require_once(APPROOT.'/application/startup.inc.php');
require_once(APPROOT."/application/itopwebpage.class.inc.php");
require_once('../application/startup.inc.php');
require_once("../application/itopwebpage.class.inc.php");
$sTemplate = '<div class="page_header">
<div class="actions_details"><a href="#"><span>Actions</span></a></div>

View File

@@ -1,271 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Class UIExtKeyWidget
* UI wdiget for displaying and editing external keys when
* A simple drop-down list is not enough...
*
* The layout is the following
*
* +-- #label_<id> (input)-------+ +-----------+
* | | | Browse... |
* +-----------------------------+ +-----------+
*
* And the popup dialog has the following layout:
*
* +------------------- ac_dlg_<id> (div)-----------+
* + +--- ds_<id> (div)---------------------------+ |
* | | +------------- fs_<id> (form)------------+ | |
* | | | +--------+---+ | | |
* | | | | Class | V | | | |
* | | | +--------+---+ | | |
* | | | | | |
* | | | S e a r c h F o r m | | |
* | | | +--------+ | | |
* | | | | Search | | | |
* | | | +--------+ | | |
* | | +----------------------------------------+ | |
* | +--------------+-dh_<id>-+--------------------+ |
* | \ Search / |
* | +------+ |
* | +--- fr_<id> (form)--------------------------+ |
* | | +------------ dr_<id> (div)--------------+ | |
* | | | | | |
* | | | S e a r c h R e s u l t s | | |
* | | | | | |
* | | +----------------------------------------+ | |
* | | +--------+ +-----+ | |
* | | | Cancel | | Add | | |
* | | +--------+ +-----+ | |
* | +--------------------------------------------+ |
* +------------------------------------------------+
* @author Erwan Taloc <erwan.taloc@combodo.com>
* @author Romain Quetiez <romain.quetiez@combodo.com>
* @author Denis Flaven <denis.flaven@combodo.com>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/webpage.class.inc.php');
require_once(APPROOT.'/application/displayblock.class.inc.php');
class UIExtKeyWidget
{
protected static $iWidgetIndex = 0;
protected $sAttCode;
protected $sNameSuffix;
protected $iId;
protected $sTitle;
public function __construct($sAttCode, $sClass, $sTitle, $aAllowedValues, $value, $iInputId, $bMandatory, $sNameSuffix = '', $sFieldPrefix = '', $sFormPrefix = '')
{
self::$iWidgetIndex++;
$this->sAttCode = $sAttCode;
$this->sClass = $sClass;
$this->oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
$this->sNameSuffix = $sNameSuffix;
$this->iId = $iInputId;
$this->aAllowedValues = $aAllowedValues;
$this->value = $value;
$this->sFieldPrefix = $sFieldPrefix;
$this->sTargetClass = $this->oAttDef->GetTargetClass();
$this->sTitle = $sTitle;
$this->sFormPrefix = $sFormPrefix;
$this->bMandatory = $bMandatory;
}
/**
* Get the HTML fragment corresponding to the linkset editing widget
* @param WebPage $oP The web page used for all the output
* @param Hash $aArgs Extra context arguments
* @return string The HTML fragment to be inserted into the page
*/
public function Display(WebPage $oPage, $aArgs = array())
{
$bCreate = (!MetaModel::IsAbstract($this->sTargetClass)) && (UserRights::IsActionAllowed($this->sTargetClass, UR_ACTION_BULK_MODIFY) && $this->oAttDef->AllowTargetCreation());
$sMessage = Dict::S('UI:Message:EmptyList:UseSearchForm');
$sHTMLValue = "<span style=\"white-space:nowrap\">"; // no wrap
if (count($this->aAllowedValues) < $this->oAttDef->GetMaximumComboLength())
{
// Few choices, use a normal 'select'
$sSelectMode = 'true';
$sHelpText = $this->oAttDef->GetHelpOnEdition();
// In case there are no valid values, the select will be empty, thus blocking the user from validating the form
$sHTMLValue = "<select title=\"$sHelpText\" name=\"attr_{$this->sFieldPrefix}{$this->sAttCode}{$this->sNameSuffix}\" id=\"$this->iId\">\n";
$sHTMLValue .= "<option value=\"\">".Dict::S('UI:SelectOne')."</option>\n";
foreach($this->aAllowedValues as $key => $display_value)
{
if ((count($this->aAllowedValues) == 1) && ($this->bMandatory == 'true') )
{
// When there is only once choice, select it by default
$sSelected = ' selected';
}
else
{
$sSelected = ($this->value == $key) ? ' selected' : '';
}
$sHTMLValue .= "<option value=\"$key\"$sSelected>$display_value</option>\n";
}
$sHTMLValue .= "</select>\n";
$oPage->add_ready_script(
<<<EOF
oACWidget_{$this->iId} = new ExtKeyWidget('{$this->iId}', '{$this->sClass}', '{$this->sAttCode}', '{$this->sNameSuffix}', $sSelectMode, oWizardHelper{$this->sFormPrefix});
oACWidget_{$this->iId}.emptyHtml = "<div style=\"background: #fff; border:0; text-align:center; vertical-align:middle;\"><p>$sMessage</p></div>";
EOF
);
}
else
{
// Too many choices, use an autocomplete
$sSelectMode = 'false';
if ($this->oAttDef->IsNull($this->value)) // Null values are displayed as ''
{
$sDisplayValue = '';
}
else
{
$sDisplayValue = $this->GetObjectName($this->value);
}
$sFormPrefix = $this->sFormPrefix;
$iMinChars = $this->oAttDef->GetMinAutoCompleteChars();
$iFieldSize = $this->oAttDef->GetMaxSize();
// the input for the auto-complete
$sHTMLValue = "<input count=\"".count($this->aAllowedValues)."\" type=\"text\" id=\"label_$this->iId\" size=\"30\" maxlength=\"$iFieldSize\" value=\"$sDisplayValue\"/>&nbsp;";
$sHTMLValue .= "<a class=\"no-arrow\" href=\"javascript:oACWidget_{$this->iId}.Search();\"><img style=\"border:0;vertical-align:middle;\" src=\"../images/mini_search.gif\" /></a>&nbsp;";
// another hidden input to store & pass the object's Id
$sHTMLValue .= "<input type=\"hidden\" id=\"$this->iId\" name=\"attr_{$this->sFieldPrefix}{$this->sAttCode}{$this->sNameSuffix}\" value=\"$this->value\" />\n";
// Scripts to start the autocomplete and bind some events to it
$sDialogTitle = addslashes($this->sTitle);
$oPage->add_ready_script(
<<<EOF
oACWidget_{$this->iId} = new ExtKeyWidget('{$this->iId}', '{$this->sClass}', '{$this->sAttCode}', '{$this->sNameSuffix}', $sSelectMode, oWizardHelper{$this->sFormPrefix});
oACWidget_{$this->iId}.emptyHtml = "<div style=\"background: #fff; border:0; text-align:center; vertical-align:middle;\"><p>$sMessage</p></div>";
$('#label_$this->iId').autocomplete('../pages/ajax.render.php', { scroll:true, minChars:{$iMinChars}, formatItem:formatItem, autoFill:false, matchContains:true, keyHolder:'#{$this->iId}', extraParams:{operation:'autocomplete', sclass:'{$this->sClass}',attCode:'{$this->sAttCode}'}});
$('#label_$this->iId').blur(function() { $(this).search(); } );
$('#label_$this->iId').result( function(event, data, formatted) { OnAutoComplete('{$this->iId}', event, data, formatted); } );
$('#ac_dlg_$this->iId').dialog({ width: $(window).width()*0.8, height: $(window).height()*0.8, autoOpen: false, modal: true, title: '$sDialogTitle', resizeStop: oACWidget_{$this->iId}.UpdateSizes, close: oACWidget_{$this->iId}.OnClose });
EOF
);
$oPage->add_at_the_end($this->GetSearchDialog($oPage)); // To prevent adding forms inside the main form
}
if ($bCreate)
{
$sHTMLValue .= "<a class=\"no-arrow\" href=\"javascript:oACWidget_{$this->iId}.CreateObject();\"><img style=\"border:0;vertical-align:middle;\" src=\"../images/mini_add.gif\" /></a>&nbsp;";
$oPage->add_at_the_end('<div id="ajax_'.$this->iId.'"></div>');
}
$sHTMLValue .= "<span id=\"v_{$this->iId}\"></span>";
$sHTMLValue .= "</span>"; // end of no wrap
return $sHTMLValue;
}
protected function GetSearchDialog(WebPage $oPage)
{
$sHTML = '<div id="ac_dlg_'.$this->iId.'"><div class="wizContainer" style="vertical-align:top;"><div id="dc_'.$this->iId.'">';
$oFilter = new DBObjectSearch($this->sTargetClass);
$oSet = new CMDBObjectSet($oFilter);
$oBlock = new DisplayBlock($oFilter, 'search', false);
$sHTML .= $oBlock->GetDisplay($oPage, $this->iId, array('open' => true, 'currentId' => $this->iId));
$sHTML .= "<form id=\"fr_{$this->iId}\" OnSubmit=\"return oACWidget_{$this->iId}.DoOk();\">\n";
$sHTML .= "<div id=\"dr_{$this->iId}\" style=\"vertical-align:top;background: #fff;height:100%;overflow:auto;padding:0;border:0;\">\n";
$sHTML .= "<div style=\"background: #fff; border:0; text-align:center; vertical-align:middle;\"><p>".Dict::S('UI:Message:EmptyList:UseSearchForm')."</p></div>\n";
$sHTML .= "</div>\n";
$sHTML .= "<input type=\"button\" id=\"btn_cancel_{$this->iId}\" value=\"".Dict::S('UI:Button:Cancel')."\" onClick=\"$('#ac_dlg_{$this->iId}').dialog('close');\">&nbsp;&nbsp;";
$sHTML .= "<input type=\"button\" id=\"btn_ok_{$this->iId}\" value=\"".Dict::S('UI:Button:Ok')."\" onClick=\"oACWidget_{$this->iId}.DoOk();\">";
$sHTML .= "</form>\n";
$sHTML .= '</div></div></div>';
$oPage->add_ready_script("$('#fs_{$this->iId}').bind('submit.uiAutocomplete', oACWidget_{$this->iId}.DoSearchObjects);");
$oPage->add_ready_script("$('#dc_{$this->iId}').resize(oACWidget_{$this->iId}.UpdateSizes);");
return $sHTML;
}
/**
* Search for objects to be selected
* @param WebPage $oP The page used for the output (usually an AjaxWebPage)
* @param string $sRemoteClass Name of the "remote" class to perform the search on, must be a derived class of m_sRemoteClass
* @param Array $aAlreadyLinkedIds List of IDs of objects of "remote" class already linked, to be filtered out of the search
*/
public function SearchObjectsToSelect(WebPage $oP, $sTargetClass = '')
{
if ($sTargetClass != '')
{
// assert(MetaModel::IsParentClass($this->m_sRemoteClass, $sRemoteClass));
$oFilter = new DBObjectSearch($sTargetClass);
}
else
{
// No remote class specified use the one defined in the linkedset
$oFilter = new DBObjectSearch($this->sTargetClass);
}
$oFilter->AddCondition('id', array_keys($this->aAllowedValues), 'IN');
$oSet = new CMDBObjectSet($oFilter);
$oBlock = new DisplayBlock($oFilter, 'list', false);
$oBlock->Display($oP, $this->iId, array('menu' => false, 'selection_mode' => true, 'selection_type' => 'single', 'display_limit' => false)); // Don't display the 'Actions' menu on the results
}
/**
* Get the display name of the selected object, to fill back the autocomplete
*/
public function GetObjectName($iObjId)
{
$oObj = MetaModel::GetObject($this->sTargetClass, $iObjId);
return $oObj->GetName();
}
/**
* Get the form to create a new object of the 'target' class
*/
public function GetObjectCreationForm(WebPage $oPage)
{
$sDialogTitle = addslashes($this->sTitle);
$oPage->add('<div id="ac_create_'.$this->iId.'"><div class="wizContainer" style="vertical-align:top;"><div id="dcr_'.$this->iId.'">');
$oPage->add("<h1>".MetaModel::GetClassIcon($this->sTargetClass)."&nbsp;".Dict::Format('UI:CreationTitle_Class', MetaModel::GetName($this->sTargetClass))."</h1>\n");
cmdbAbstractObject::DisplayCreationForm($oPage, $this->sTargetClass, null, array(), array('formPrefix' => $this->iId, 'noRelations' => true));
$oPage->add('</div></div></div>');
$oPage->add_ready_script("\$('#ac_create_$this->iId').dialog({ width: $(window).width()*0.8, height: 'auto', autoOpen: false, modal: true, title: '$sDialogTitle'});\n");
$oPage->add_ready_script("$('#dcr_{$this->iId} form').removeAttr('onsubmit');");
$oPage->add_ready_script("$('#dcr_{$this->iId} form').bind('submit.uilinksWizard', oACWidget_{$this->iId}.DoCreateObject);");
}
/**
* Get the form to create a new object of the 'target' class
*/
public function DoCreateObject($oPage)
{
$oObj = MetaModel::NewObject($this->sTargetClass);
$oObj->UpdateObject($this->sFormPrefix.$this->iId);
$oMyChange = MetaModel::NewObject("CMDBChange");
$oMyChange->Set("date", time());
$sUserString = CMDBChange::GetCurrentUserName();
$oMyChange->Set("userinfo", $sUserString);
$iChangeId = $oMyChange->DBInsert();
$oObj->DBInsertTracked($oMyChange);
return array('name' => $oObj->GetName(), 'id' => $oObj->GetKey());
}
}
?>

View File

@@ -1,86 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Class UIHTMLEditorWidget
* UI wdiget for displaying and editing one-way encrypted passwords
*
* @author Phil Eddies
* @author Romain Quetiez <romain.quetiez@combodo.com>
* @author Denis Flaven <denis.flaven@combodo.com>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
class UIHTMLEditorWidget
{
protected $m_iId;
protected $m_sAttCode;
protected $m_sNameSuffix;
protected $m_sFieldPrefix;
protected $m_sHelpText;
protected $m_sValidationField;
protected $m_sValue;
protected $m_sMandatory;
public function __construct($iInputId, $sAttCode, $sNameSuffix, $sFieldPrefix, $sHelpText, $sValidationField, $sValue, $sMandatory)
{
$this->m_iId = $iInputId;
$this->m_sAttCode = $sAttCode;
$this->m_sNameSuffix = $sNameSuffix;
$this->m_sHelpText = $sHelpText;
$this->m_sValidationField = $sValidationField;
$this->m_sValue = $sValue;
$this->m_sMandatory = $sMandatory;
$this->m_sFieldPrefix = $sFieldPrefix;
}
/**
* Get the HTML fragment corresponding to the HTML editor widget
* @param WebPage $oP The web page used for all the output
* @param Hash $aArgs Extra context arguments
* @return string The HTML fragment to be inserted into the page
*/
public function Display(WebPage $oPage, $aArgs = array())
{
$iId = $this->m_iId;
$sCode = $this->m_sAttCode.$this->m_sNameSuffix;
$sValue = $this->m_sValue;
$sHelpText = $this->m_sHelpText;
$sValidationField = $this->m_sValidationField;
$sHtmlValue = "<table><tr><td><textarea class=\"htmlEditor\" title=\"$sHelpText\" name=\"attr_{$this->m_sFieldPrefix}{$sCode}\" rows=\"14\" cols=\"110\" id=\"$iId\">$sValue</textarea></td><td>$sValidationField</td></tr></table>";
// Replace the text area with CKEditor
// To change the default settings of the editor,
// a) edit the file /js/ckeditor/config.js
// b) or override some of the configuration settings, using the second parameter of ckeditor()
$sLanguage = strtolower(trim(UserRights::GetUserLanguage()));
$oPage->add_ready_script("$('#$iId').ckeditor(function() { /* callback code */ }, { language : '$sLanguage' , contentsLanguage : '$sLanguage' });"); // Transform $iId into a CKEdit
// Please read...
// ValidateCKEditField triggers a timer... calling itself indefinitely
// This design was the quickest way to achieve the field validation (only checking if the field is blank)
// because the ckeditor does not fire events like "change" or "keyup", etc.
// See http://dev.ckeditor.com/ticket/900 => won't fix
// The most relevant solution would be to implement a plugin to CKEdit, and handle the internal events like: setData, insertHtml, insertElement, loadSnapshot, key, afterUndo, afterRedo
// Could also be bound to 'instanceReady.ckeditor'
$oPage->add_ready_script("$('#$iId').bind('validate', function(evt, sFormId) { return ValidateCKEditField('$iId', '', {$this->m_sMandatory}, sFormId, '') } );");
return $sHtmlValue;
}
}
?>

View File

@@ -23,8 +23,8 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/webpage.class.inc.php');
require_once(APPROOT.'/application/displayblock.class.inc.php');
require_once('../application/webpage.class.inc.php');
require_once('../application/displayblock.class.inc.php');
class UILinksWidget
{
@@ -37,6 +37,7 @@ class UILinksWidget
protected $m_sLinkedClass;
protected $m_sRemoteClass;
protected $m_bDuplicatesAllowed;
protected static $iWidgetIndex = 0;
public function __construct($sClass, $sAttCode, $iInputId, $sNameSuffix = '', $bDuplicatesAllowed = false)
{
@@ -46,6 +47,7 @@ class UILinksWidget
$this->m_iInputId = $iInputId;
$this->m_bDuplicatesAllowed = $bDuplicatesAllowed;
$this->m_aEditableFields = array();
self::$iWidgetIndex++;
$oAttDef = MetaModel::GetAttributeDef($this->m_sClass, $this->m_sAttCode);
$this->m_sLinkedClass = $oAttDef->GetLinkedClass();
@@ -58,7 +60,7 @@ class UILinksWidget
$this->m_aEditableFields = array();
$this->m_aTableConfig = array();
$this->m_aTableConfig['form::checkbox'] = array( 'label' => "<input class=\"select_all\" type=\"checkbox\" value=\"1\" onClick=\"CheckAll('#linkedset_{$this->m_sAttCode}{$this->m_sNameSuffix} .selection', this.checked); oWidget".$this->m_iInputId.".OnSelectChange();\">", 'description' => Dict::S('UI:SelectAllToggle+'));
$this->m_aTableConfig['form::checkbox'] = array( 'label' => "<input class=\"select_all\" type=\"checkbox\" value=\"1\" onClick=\"CheckAll('#linkedset_{$this->m_sAttCode}{$this->m_sNameSuffix} .selection', this.checked); oWidget".self::$iWidgetIndex.".OnSelectChange();\">", 'description' => Dict::S('UI:SelectAllToggle+'));
foreach(MetaModel::ListAttributeDefs($this->m_sLinkedClass) as $sAttCode=>$oAttDef)
{
@@ -107,14 +109,12 @@ class UILinksWidget
$sPrefix .= "[$key][";
$sNameSuffix = "]"; // To make a tabular form
$aArgs['prefix'] = $sPrefix;
$aRow['form::checkbox'] = "<input class=\"selection\" type=\"checkbox\" onClick=\"oWidget".$this->m_iInputId.".OnSelectChange();\" value=\"$key\">";
$aRow['form::checkbox'] = "<input class=\"selection\" type=\"checkbox\" onChange=\"oWidget".self::$iWidgetIndex.".OnSelectChange();\" value=\"$key\">";
$aRow['form::checkbox'] .= "<input type=\"hidden\" name=\"attr_{$sPrefix}id{$sNameSuffix}\" value=\"$key\">";
foreach($this->m_aEditableFields as $sFieldCode)
{
$sFieldId = $this->m_iInputId.'_'.$sFieldCode.'['.$linkObjOrId->GetKey().']';
$sSafeId = str_replace(array('[',']','-'), '_', $sFieldId);
$oAttDef = MetaModel::GetAttributeDef($this->m_sLinkedClass, $sFieldCode);
$aRow[$sFieldCode] = cmdbAbstractObject::GetFormElementForField($oP, $this->m_sLinkedClass, $sFieldCode, $oAttDef, $linkObjOrId->Get($sFieldCode), '' /* DisplayValue */, $sSafeId, $sNameSuffix, 0, $aArgs);
$aRow[$sFieldCode] = cmdbAbstractObject::GetFormElementForField($oP, $this->m_sLinkedClass, $sFieldCode, $oAttDef, $linkObjOrId->Get($sFieldCode), '' /* DisplayValue */, $key, $sNameSuffix, 0, $aArgs);
}
}
else
@@ -123,14 +123,12 @@ class UILinksWidget
$sPrefix .= "[$linkObjOrId][";
$sNameSuffix = "]"; // To make a tabular form
$aArgs['prefix'] = $sPrefix;
$aRow['form::checkbox'] = "<input class=\"selection\" type=\"checkbox\" onClick=\"oWidget".$this->m_iInputId.".OnSelectChange();\" value=\"$linkObjOrId\">";
$aRow['form::checkbox'] = "<input class=\"selection\" type=\"checkbox\" onChange=\"oWidget".self::$iWidgetIndex.".OnSelectChange();\" value=\"$linkObjOrId\">";
$aRow['form::checkbox'] .= "<input type=\"hidden\" name=\"attr_{$sPrefix}id{$sNameSuffix}\" value=\"\">";
foreach($this->m_aEditableFields as $sFieldCode)
{
$sFieldId = $this->m_iInputId.'_'.$sFieldCode.'['.$linkObjOrId.']';
$sSafeId = str_replace(array('[',']','-'), '_', $sFieldId);
$oAttDef = MetaModel::GetAttributeDef($this->m_sLinkedClass, $sFieldCode);
$aRow[$sFieldCode] = cmdbAbstractObject::GetFormElementForField($oP, $this->m_sLinkedClass, $sFieldCode, $oAttDef, '' /* TO DO/ call GetDefaultValue($oObject->ToArgs()) */, '' /* DisplayValue */, $sSafeId /* id */, $sNameSuffix, 0, $aArgs);
$aRow[$sFieldCode] = cmdbAbstractObject::GetFormElementForField($oP, $this->m_sLinkedClass, $sFieldCode, $oAttDef, '' /* TO DO/ call GetDefaultValue($oObject->ToArgs()) */, '' /* DisplayValue */, '' /* id */, $sNameSuffix, 0, $aArgs);
}
}
@@ -211,6 +209,7 @@ class UILinksWidget
*/
public function Display(WebPage $oPage, DBObjectSet $oValue, $aArgs = array())
{
$iWidgetIndex = self::$iWidgetIndex;
$sHtmlValue = '';
$sTargetClass = self::GetTargetClass($this->m_sClass, $this->m_sAttCode);
$sHtmlValue .= "<div id=\"linkedset_{$this->m_sAttCode}{$this->m_sNameSuffix}\">\n";
@@ -227,12 +226,12 @@ class UILinksWidget
$sHtmlValue .= $this->DisplayFormTable($oPage, $this->m_aTableConfig, $aForm);
$sDuplicates = ($this->m_bDuplicatesAllowed) ? 'true' : 'false';
$oPage->add_ready_script(<<<EOF
oWidget{$this->m_iInputId} = new LinksWidget('{$this->m_sAttCode}{$this->m_sNameSuffix}', '{$this->m_sClass}', '{$this->m_sAttCode}', '{$this->m_iInputId}', '{$this->m_sNameSuffix}', $sDuplicates);
oWidget{$this->m_iInputId}.Init();
oWidget$iWidgetIndex = new LinksWidget('{$this->m_sAttCode}{$this->m_sNameSuffix}', '{$this->m_sClass}', '{$this->m_sAttCode}', '{$this->m_iInputId}', '{$this->m_sNameSuffix}', $sDuplicates);
oWidget$iWidgetIndex.Init();
EOF
);
$sHtmlValue .= "<span style=\"float:left;\">&nbsp;&nbsp;&nbsp;<img src=\"../images/tv-item-last.gif\">&nbsp;&nbsp;<input id=\"{$this->m_sAttCode}{$this->m_sNameSuffix}_btnRemove\" type=\"button\" value=\"".Dict::S('UI:RemoveLinkedObjectsOf_Class')."\" onClick=\"oWidget{$this->m_iInputId}.RemoveSelected();\" >";
$sHtmlValue .= "&nbsp;&nbsp;&nbsp;<input id=\"{$this->m_sAttCode}{$this->m_sNameSuffix}_btnAdd\" type=\"button\" value=\"".Dict::Format('UI:AddLinkedObjectsOf_Class', MetaModel::GetName($this->m_sRemoteClass))."\" onClick=\"oWidget{$this->m_iInputId}.AddObjects();\"></span>\n";
$sHtmlValue .= "<span style=\"float:left;\">&nbsp;&nbsp;&nbsp;<img src=\"../images/tv-item-last.gif\">&nbsp;&nbsp;<input id=\"{$this->m_sAttCode}{$this->m_sNameSuffix}_btnRemove\" type=\"button\" value=\"".Dict::S('UI:RemoveLinkedObjectsOf_Class')."\" onClick=\"oWidget$iWidgetIndex.RemoveSelected();\" >";
$sHtmlValue .= "&nbsp;&nbsp;&nbsp;<input id=\"{$this->m_sAttCode}{$this->m_sNameSuffix}_btnAdd\" type=\"button\" value=\"".Dict::Format('UI:AddLinkedObjectsOf_Class', MetaModel::GetName($this->m_sRemoteClass))."\" onClick=\"oWidget$iWidgetIndex.AddObjects();\"></span>\n";
$sHtmlValue .= "<span style=\"clear:both;\"><p>&nbsp;</p></span>\n";
$sHtmlValue .= "</div>\n";
$oPage->add_at_the_end($this->GetObjectPickerDialog($oPage)); // To prevent adding forms inside the main form
@@ -349,11 +348,12 @@ EOF
{
$sHtml = "<div id=\"dlg_{$this->m_sAttCode}{$this->m_sNameSuffix}\">";
$sHtml .= "<div class=\"wizContainer\" style=\"vertical-align:top;\">\n";
$iWidgetIndex = self::$iWidgetIndex;
$oFilter = new DBObjectSearch($this->m_sRemoteClass);
$oSet = new CMDBObjectSet($oFilter);
$oBlock = new DisplayBlock($oFilter, 'search', false);
$sHtml .= $oBlock->GetDisplay($oPage, "SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}", array('open' => true));
$sHtml .= "<form id=\"ObjectsAddForm_{$this->m_sAttCode}{$this->m_sNameSuffix}\" OnSubmit=\"return oWidget{$this->m_iInputId}.DoAddObjects(this.id);\">\n";
$sHtml .= "<form id=\"ObjectsAddForm_{$this->m_sAttCode}{$this->m_sNameSuffix}\" OnSubmit=\"return oWidget$iWidgetIndex.DoAddObjects(this.id);\">\n";
$sHtml .= "<div id=\"SearchResultsToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}\" style=\"vertical-align:top;background: #fff;height:100%;overflow:auto;padding:0;border:0;\">\n";
$sHtml .= "<div style=\"background: #fff; border:0; text-align:center; vertical-align:middle;\"><p>".Dict::S('UI:Message:EmptyList:UseSearchForm')."</p></div>\n";
$sHtml .= "</div>\n";
@@ -361,10 +361,10 @@ EOF
$sHtml .= "</div>\n";
$sHtml .= "</form>\n";
$sHtml .= "</div>\n";
$oPage->add_ready_script("$('#dlg_{$this->m_sAttCode}{$this->m_sNameSuffix}').dialog({ width: $(window).width()*0.8, height: $(window).height()*0.8, autoOpen: false, modal: true, resizeStop: oWidget{$this->m_iInputId}.UpdateSizes });");
$oPage->add_ready_script("$('#dlg_{$this->m_sAttCode}{$this->m_sNameSuffix}').dialog({ width: $(window).width()*0.8, height: $(window).height()*0.8, autoOpen: false, modal: true, resizeStop: oWidget$iWidgetIndex.UpdateSizes });");
$oPage->add_ready_script("$('#dlg_{$this->m_sAttCode}{$this->m_sNameSuffix}').dialog('option', {title:'".addslashes(Dict::Format('UI:AddObjectsOf_Class_LinkedWith_Class', MetaModel::GetName($this->m_sLinkedClass), MetaModel::GetName($this->m_sClass)))."'});");
$oPage->add_ready_script("$('#SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix} form').bind('submit.uilinksWizard', oWidget{$this->m_iInputId}.SearchObjectsToAdd);");
$oPage->add_ready_script("$('#SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}').resize(oWidget{$this->m_iInputId}.UpdateSizes);");
$oPage->add_ready_script("$('#SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix} form').bind('submit.uilinksWizard', oWidget$iWidgetIndex.SearchObjectsToAdd);");
$oPage->add_ready_script("$('#SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}').resize(oWidget$iWidgetIndex.UpdateSizes);");
return $sHtml;
}

View File

@@ -24,8 +24,8 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/webpage.class.inc.php');
require_once(APPROOT.'/application/displayblock.class.inc.php');
require_once('../application/webpage.class.inc.php');
require_once('../application/displayblock.class.inc.php');
class UIPasswordWidget
{
@@ -56,10 +56,11 @@ class UIPasswordWidget
$sConfirmPasswordValue = utils::ReadPostedParam("attr_{$sCode}_confirmed", '*****');
$sChangedValue = (($sPasswordValue != '*****') || ($sConfirmPasswordValue != '*****')) ? 1 : 0;
$sHtmlValue = '';
$sHtmlValue = '<input type="password" maxlength="255" name="attr_'.$sCode.'" id="'.$this->iId.'" value="'.htmlentities($sPasswordValue, ENT_QUOTES, 'UTF-8').'"/>&nbsp;<span class="form_validation" id="v_'.$this->iId.'"></span><br/>';
$sHtmlValue = '<input type="password" maxlength="255" name="attr_'.$sCode.'" id="'.$this->iId.'" value="'.htmlentities($sPasswordValue, ENT_QUOTES, 'UTF-8').'"/>&nbsp;<span id="v_'.$this->iId.'"></span><br/>';
$sHtmlValue .= '<input type="password" maxlength="255" id="'.$this->iId.'_confirm" value="'.htmlentities($sConfirmPasswordValue, ENT_QUOTES, 'UTF-8').'" name="attr_'.$sCode.'_confirmed"/> '.Dict::S('UI:PasswordConfirm').' <input type="button" value="'.Dict::S('UI:Button:ResetPassword').'" onClick="ResetPwd(\''.$this->iId.'\');">';
$sHtmlValue .= '<input type="hidden" id="'.$this->iId.'_changed" name="attr_'.$sCode.'_changed" value="'.$sChangedValue.'"/>';
$oPage->add_ready_script("$('#$this->iId').bind('keyup change', function(evt) { return PasswordFieldChanged('$this->iId') } );"); // Bind to a custom event: validate
$oPage->add_ready_script("$('#$this->iId').bind('keyup change', function(evt) { return PasswordFieldChanged('$this->iId') } );"); // Bind to a custom event: validate
$oPage->add_ready_script("$('#$this->iId').bind('keyup change validate', function(evt, sFormId) { return ValidatePasswordField('$this->iId', sFormId) } );"); // Bind to a custom event: validate
$oPage->add_ready_script("$('#{$this->iId}_confirm').bind('keyup change', function(evt, sFormId) { return ValidatePasswordField('$this->iId', sFormId) } );"); // Bind to a custom event: validate
@@ -67,4 +68,4 @@ class UIPasswordWidget
return $sHtmlValue;
}
}
?>
?>

View File

@@ -132,7 +132,7 @@ class UILinksWizard
function AddObjects()
{
// TO DO: compute the list of objects already linked with the current Object
$.post( '../pages/ajax.render.php', { 'operation': 'addObjects',
$.post( 'ajax.render.php', { 'operation': 'addObjects',
'class': '{$this->m_sClass}',
'linkageAttr': '{$this->m_sLinkageAttr}',
'linkedClass': '{$this->m_sLinkedClass}',
@@ -175,7 +175,7 @@ class UILinksWizard
theMap['operation'] = 'searchObjectsToAdd';
// Run the query and display the results
$.post( '../pages/ajax.render.php', theMap,
$.post( 'ajax.render.php', theMap,
function(data)
{
$('#SearchResultsToAdd').html(data);
@@ -223,7 +223,7 @@ class UILinksWizard
theMap['operation'] = 'doAddObjects';
// Run the query and display the results
$.post( '../pages/ajax.render.php', theMap,
$.post( 'ajax.render.php', theMap,
function(data)
{
//console.log('Data: ' + data);

View File

@@ -22,8 +22,8 @@
* @author Denis Flaven <denis.flaven@combodo.com>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/core/dbobject.class.php');
require_once(APPROOT.'/core/userrights.class.inc.php');
require_once('../core/dbobject.class.php');
require_once('../core/userrights.class.inc.php');
/**
* This class is used to store, in a persistent manner, user related settings (preferences)

View File

@@ -23,10 +23,10 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/core/config.class.inc.php');
require_once(APPROOT.'/application/transaction.class.inc.php');
require_once('../core/config.class.inc.php');
require_once('../application/transaction.class.inc.php');
define('ITOP_CONFIG_FILE', APPROOT.'/config-itop.php');
define('ITOP_CONFIG_FILE', '../config-itop.php');
class FileUploadException extends Exception
{
@@ -45,9 +45,8 @@ class utils
public static function IsModeCLI()
{
$sSAPIName = php_sapi_name();
$sCleanName = strtolower(trim($sSAPIName));
if ($sCleanName == 'cli')
global $argv;
if (isset($argv))
{
return true;
}
@@ -174,6 +173,28 @@ class utils
return file_get_contents($sFileName);
}
/**
* Specify the application config file
* @param string path to the config file
* @return void
*/
public static function SpecifyConfigFile($sFilePath)
{
self::$m_sConfigFile = $sFilePath;
}
/**
* Get access to the application config file
* @param none
* @return Config The Config object initialized from the application config file
*/
public static function GetConfig()
{
if (self::$m_oConfig == null)
{
self::$m_oConfig = new Config(self::$m_sConfigFile);
}
return self::$m_oConfig;
}
/**
* Helper function to convert a value expressed in a 'user friendly format'
* as in php.ini, e.g. 256k, 2M, 1G etc. Into a number of bytes
@@ -211,7 +232,7 @@ class utils
{
// Build an absolute URL to this page on this server/port
$sServerName = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '';
if (MetaModel::GetConfig()->GetSecureConnectionRequired() || MetaModel::GetConfig()->GetHttpsHyperlinks())
if (self::GetConfig()->GetSecureConnectionRequired() || self::GetConfig()->GetHttpsHyperlinks())
{
// If a secure connection is required, or if the URL is requested to start with HTTPS
// then any URL must start with https !

View File

@@ -45,7 +45,6 @@ class WebPage
protected $a_include_stylesheets;
protected $a_headers;
protected $a_base;
protected $iNextId;
public function __construct($s_title)
{
@@ -58,7 +57,6 @@ class WebPage
$this->a_linked_stylesheets = array();
$this->a_headers = array();
$this->a_base = array( 'href' => '', 'target' => '');
$this->iNextId = 0;
ob_start(); // Start capturing the output
}
@@ -105,14 +103,6 @@ class WebPage
$this->add($this->GetP($s_html));
}
/**
* Add a pre-formatted text to the body of the page
*/
public function pre($s_html)
{
$this->add('<pre>'.$s_html.'</pre>');
}
/**
* Add a paragraph to the body of the page
*/
@@ -360,14 +350,5 @@ class WebPage
}
return $sTag;
}
/**
* Get an ID (for any kind of HTML tag) that is guaranteed unique in this page
* @return int The unique ID (in this page)
*/
public function GetUniqueId()
{
return $this->iNextId++;
}
}
?>
?>

View File

@@ -23,7 +23,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT.'/application/uiwizard.class.inc.php');
require_once('../application/uiwizard.class.inc.php');
class WizardHelper
{
@@ -50,8 +50,8 @@ class WizardHelper
foreach($this->m_aData['m_oCurrentValues'] as $sAttCode => $value)
{
// Because this is stored in a Javascript array, unused indexes
// are filled with null values and unused keys (stored as strings) contain $$NULL$$
if ( ($sAttCode !='id') && ($sAttCode !== false) && ($value !== null) && ($value !== '$$NULL$$'))
// are filled with null values
if ( ($sAttCode !='id') && ($sAttCode !== false) && ($value !== null))
{
$oAttDef = MetaModel::GetAttributeDef($this->m_aData['m_sClass'], $sAttCode);
if (($oAttDef->IsLinkSet()) && ($value != '') )
@@ -227,11 +227,6 @@ class WizardHelper
return $this->m_aData['m_sClass'];
}
public function GetFormPrefix()
{
return $this->m_aData['m_sFormPrefix'];
}
public function GetIdForField($sFieldName)
{
$sResult = '';

View File

@@ -23,7 +23,7 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
require_once(APPROOT."/application/webpage.class.inc.php");
require_once("../application/webpage.class.inc.php");
/**
* Simple web page with no includes or fancy formatting, useful to generateXML documents
* The page adds the content-type text/XML and the encoding into the headers

View File

@@ -1,3 +0,0 @@
<?php
define('APPROOT', dirname(__FILE__).'/');
?>

View File

@@ -24,7 +24,7 @@
*/
require_once(APPROOT.'/core/email.class.inc.php');
require_once('../core/email.class.inc.php');
/**
* A user defined action, to customize the application
@@ -235,10 +235,6 @@ class ActionEmail extends ActionNotification
$sSubject = MetaModel::ApplyParams($this->Get('subject'), $aContextArgs);
$sBody = MetaModel::ApplyParams($this->Get('body'), $aContextArgs);
$oObj = $aContextArgs['this->object()'];
$sServerIP = $_SERVER['SERVER_ADDR']; //gethostbyname(gethostname());
$sReference = '<iTop/'.get_class($oObj).'/'.$oObj->GetKey().'@'.$sServerIP.'>';
$oEmail = new EMail();
@@ -255,14 +251,12 @@ class ActionEmail extends ActionNotification
$sTestBody .= "<li>BCC: $sBCC</li>\n";
$sTestBody .= "<li>From: $sFrom</li>\n";
$sTestBody .= "<li>Reply-To: $sReplyTo</li>\n";
$sTestBody .= "<li>References: $sReference</li>\n";
$sTestBody .= "</ul>\n";
$sTestBody .= "</p>\n";
$sTestBody .= "</div>\n";
$oEmail->SetBody($sTestBody);
$oEmail->SetRecipientTO($this->Get('test_recipient'));
$oEmail->SetRecipientFrom($this->Get('test_recipient'));
$oEmail->SetReferences($sReference);
}
else
{
@@ -273,7 +267,6 @@ class ActionEmail extends ActionNotification
$oEmail->SetRecipientBCC($sBCC);
$oEmail->SetRecipientFrom($sFrom);
$oEmail->SetRecipientReplyTo($sReplyTo);
$oEmail->SetReferences($sReference);
}
if (empty($this->m_aMailErrors))
@@ -346,4 +339,4 @@ class ActionEmail extends ActionNotification
}
}
}
?>
?>

View File

@@ -142,7 +142,7 @@ class iTopArchive
public function WriteCatalog()
{
$sXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?".">\n"; // split the XML closing tag that disturbs PSPad's syntax coloring
$sXml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">\n"; // split the XML closing tag that disturbs PSPad's syntax coloring
$sXml .= "<archive version=\"1.0\">\n";
$sXml .= "<title>{$this->m_sTitle}</title>\n";
$sXml .= "<description>{$this->m_sDescription}</description>\n";

View File

@@ -72,15 +72,8 @@ define('DEL_AUTO', 2);
*/
abstract class AttributeDefinition
{
public function GetType()
{
return Dict::S('Core:'.get_class($this));
}
public function GetTypeDesc()
{
return Dict::S('Core:'.get_class($this).'+');
}
abstract public function GetType();
abstract public function GetTypeDesc();
abstract public function GetEditClass();
protected $m_sCode;
@@ -269,11 +262,11 @@ abstract class AttributeDefinition
return (string)$sValue;
}
public function GetAllowedValues($aArgs = array(), $sContains = '')
public function GetAllowedValues($aArgs = array(), $sBeginsWith = '')
{
$oValSetDef = $this->GetValuesDef();
if (!$oValSetDef) return null;
return $oValSetDef->GetValues($aArgs, $sContains);
return $oValSetDef->GetValues($aArgs, $sBeginsWith);
}
/**
@@ -318,6 +311,8 @@ class AttributeLinkedSet extends AttributeDefinition
return array_merge(parent::ListExpectedParams(), array("allowed_values", "depends_on", "linked_class", "ext_key_to_me", "count_min", "count_max"));
}
public function GetType() {return "Array of objects";}
public function GetTypeDesc() {return "Any kind of objects [subclass] of the same class";}
public function GetEditClass() {return "List";}
public function IsWritable() {return true;}
@@ -399,6 +394,8 @@ class AttributeDBFieldVoid extends AttributeDefinition
// To be overriden, used in GetSQLColumns
protected function GetSQLCol() {return "VARCHAR(255)";}
public function GetType() {return "Void";}
public function GetTypeDesc() {return "Any kind of value, from the DB";}
public function GetEditClass() {return "String";}
public function GetValuesDef() {return $this->Get("allowed_values");}
@@ -498,6 +495,8 @@ class AttributeInteger extends AttributeDBField
//return array_merge(parent::ListExpectedParams(), array());
}
public function GetType() {return "Integer";}
public function GetTypeDesc() {return "Numeric value (could be negative)";}
public function GetEditClass() {return "String";}
protected function GetSQLCol() {return "INT(11)";}
@@ -593,6 +592,8 @@ class AttributeDecimal extends AttributeDBField
return array_merge(parent::ListExpectedParams(), array('digits', 'decimals' /* including precision */));
}
public function GetType() {return "Decimal";}
public function GetTypeDesc() {return "Decimal value (could be negative)";}
public function GetEditClass() {return "String";}
protected function GetSQLCol() {return "DECIMAL(".$this->Get('digits').",".$this->Get('decimals').")";}
@@ -689,6 +690,8 @@ class AttributeBoolean extends AttributeInteger
//return array_merge(parent::ListExpectedParams(), array());
}
public function GetType() {return "Boolean";}
public function GetTypeDesc() {return "Boolean";}
public function GetEditClass() {return "Integer";}
protected function GetSQLCol() {return "TINYINT(1)";}
@@ -720,6 +723,8 @@ class AttributeString extends AttributeDBField
//return array_merge(parent::ListExpectedParams(), array());
}
public function GetType() {return "String";}
public function GetTypeDesc() {return "Alphanumeric string";}
public function GetEditClass() {return "String";}
protected function GetSQLCol() {return "VARCHAR(255)";}
@@ -1047,6 +1052,8 @@ class AttributeEncryptedString extends AttributeString
*/
class AttributeText extends AttributeString
{
public function GetType() {return "Text";}
public function GetTypeDesc() {return "Multiline character string";}
public function GetEditClass() {return "Text";}
protected function GetSQLCol() {return "TEXT";}
@@ -1068,21 +1075,6 @@ class AttributeText extends AttributeString
}
}
/**
* Map a text column (size > ?), containing HTML code, to an attribute
*
* @package iTopORM
*/
class AttributeHTML extends AttributeText
{
public function GetEditClass() {return "HTML";}
public function GetAsHTML($sValue)
{
return $sValue;
}
}
/**
* Specialization of a string: email
*
@@ -1090,10 +1082,11 @@ class AttributeHTML extends AttributeText
*/
class AttributeEmailAddress extends AttributeString
{
public function GetTypeDesc() {return "Email address(es)";}
public function GetValidationPattern()
{
// return "^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$";
return "^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$";
return "^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$";
}
public function GetAsHTML($sValue)
@@ -1110,6 +1103,8 @@ class AttributeEmailAddress extends AttributeString
*/
class AttributeIPAddress extends AttributeString
{
public function GetTypeDesc() {return "IP address";}
public function GetValidationPattern()
{
$sNum = '(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])';
@@ -1124,39 +1119,27 @@ class AttributeIPAddress extends AttributeString
*/
class AttributeOQL extends AttributeText
{
public function GetTypeDesc() {return "OQL expression";}
}
/**
* Specialization of a string: template (contains iTop placeholders like $current_contact_id$ or $this->name$)
* Specialization of a string: template
*
* @package iTopORM
*/
class AttributeTemplateString extends AttributeString
{
public function GetTypeDesc() {return "Template string";}
}
/**
* Specialization of a text: template (contains iTop placeholders like $current_contact_id$ or $this->name$)
* Specialization of a text: template
*
* @package iTopORM
*/
class AttributeTemplateText extends AttributeText
{
}
/**
* Specialization of a HTML: template (contains iTop placeholders like $current_contact_id$ or $this->name$)
*
* @package iTopORM
*/
class AttributeTemplateHTML extends AttributeText
{
public function GetEditClass() {return "HTML";}
public function GetAsHTML($sValue)
{
return $sValue;
}
public function GetTypeDesc() {return "Multiline template string";}
}
@@ -1167,6 +1150,8 @@ class AttributeTemplateHTML extends AttributeText
*/
class AttributeWikiText extends AttributeText
{
public function GetTypeDesc() {return "Multiline string with special formatting such as links to objects";}
public function GetAsHTML($value)
{
// [SELECT xxxx.... [label]] => hyperlink to a result list
@@ -1191,6 +1176,8 @@ class AttributeEnum extends AttributeString
//return array_merge(parent::ListExpectedParams(), array());
}
public function GetType() {return "Enum";}
public function GetTypeDesc() {return "List of predefined alphanumeric strings";}
public function GetEditClass() {return "String";}
protected function GetSQLCol()
{
@@ -1274,9 +1261,9 @@ class AttributeEnum extends AttributeString
return $sLabel;
}
public function GetAllowedValues($aArgs = array(), $sContains = '')
public function GetAllowedValues($aArgs = array(), $sBeginsWith = '')
{
$aRawValues = parent::GetAllowedValues($aArgs, $sContains);
$aRawValues = parent::GetAllowedValues($aArgs, $sBeginsWith);
if (is_null($aRawValues)) return null;
$aLocalizedValues = array();
foreach ($aRawValues as $sKey => $sValue)
@@ -1331,6 +1318,8 @@ class AttributeDateTime extends AttributeDBField
//return array_merge(parent::ListExpectedParams(), array());
}
public function GetType() {return "Date";}
public function GetTypeDesc() {return "Date and time";}
public function GetEditClass() {return "DateTime";}
protected function GetSQLCol() {return "TIMESTAMP";}
public static function GetAsUnixSeconds($value)
@@ -1571,6 +1560,8 @@ class AttributeDate extends AttributeDateTime
//return array_merge(parent::ListExpectedParams(), array());
}
public function GetType() {return "Date";}
public function GetTypeDesc() {return "Date";}
public function GetEditClass() {return "Date";}
protected function GetSQLCol() {return "DATE";}
@@ -1659,6 +1650,8 @@ class AttributeExternalKey extends AttributeDBFieldVoid
return array_merge(parent::ListExpectedParams(), array("targetclass", "is_null_allowed", "on_target_delete"));
}
public function GetType() {return "Extkey";}
public function GetTypeDesc() {return "Link to another object";}
public function GetEditClass() {return "ExtKey";}
protected function GetSQLCol() {return "INT(11)";}
public function RequiresIndex()
@@ -1702,17 +1695,17 @@ class AttributeExternalKey extends AttributeDBFieldVoid
return $oValSetDef;
}
public function GetAllowedValues($aArgs = array(), $sContains = '')
public function GetAllowedValues($aArgs = array(), $sBeginsWith = '')
{
try
{
return parent::GetAllowedValues($aArgs, $sContains);
return parent::GetAllowedValues($aArgs, $sBeginsWith);
}
catch (MissingQueryArgument $e)
{
// Some required arguments could not be found, enlarge to any existing value
$oValSetDef = new ValueSetObjects('SELECT '.$this->GetTargetClass());
return $oValSetDef->GetValues($aArgs, $sContains);
return $oValSetDef->GetValues($aArgs, $sBeginsWith);
}
}
@@ -1738,22 +1731,6 @@ class AttributeExternalKey extends AttributeDBFieldVoid
if (MetaModel::IsValidObject($proposedValue)) return $proposedValue->GetKey();
return (int)$proposedValue;
}
public function GetMaximumComboLength()
{
return $this->GetOptional('max_combo_length', MetaModel::GetConfig()->Get('max_combo_length'));
}
public function GetMinAutoCompleteChars()
{
return $this->GetOptional('min_autocomplete_chars', MetaModel::GetConfig()->Get('min_autocomplete_chars'));
}
public function AllowTargetCreation()
{
return $this->GetOptional('allow_target_creation', MetaModel::GetConfig()->Get('allow_target_creation'));
}
}
/**
@@ -1768,6 +1745,8 @@ class AttributeExternalField extends AttributeDefinition
return array_merge(parent::ListExpectedParams(), array("extkey_attcode", "target_attcode"));
}
public function GetType() {return "ExtkeyField";}
public function GetTypeDesc() {return "Field of an object pointed to by the current object";}
public function GetEditClass() {return "ExtField";}
protected function GetSQLCol()
{
@@ -1965,6 +1944,8 @@ class AttributeURL extends AttributeString
return array_merge(parent::ListExpectedParams(), array("target"));
}
public function GetType() {return "Url";}
public function GetTypeDesc() {return "Absolute or relative URL as a text string";}
public function GetEditClass() {return "String";}
public function GetAsHTML($sValue)
@@ -1998,6 +1979,8 @@ class AttributeBlob extends AttributeDefinition
return array_merge(parent::ListExpectedParams(), array("depends_on"));
}
public function GetType() {return "Blob";}
public function GetTypeDesc() {return "Document";}
public function GetEditClass() {return "Document";}
public function IsDirectField() {return true;}
@@ -2141,6 +2124,8 @@ class AttributeOneWayPassword extends AttributeDefinition
return array_merge(parent::ListExpectedParams(), array("depends_on"));
}
public function GetType() {return "One Way Password";}
public function GetTypeDesc() {return "One Way Password";}
public function GetEditClass() {return "One Way Password";}
public function IsDirectField() {return true;}
@@ -2263,6 +2248,8 @@ class AttributeOneWayPassword extends AttributeDefinition
// Indexed array having two dimensions
class AttributeTable extends AttributeText
{
public function GetType() {return "Table";}
public function GetTypeDesc() {return "Array with 2 dimensions";}
public function GetEditClass() {return "Text";}
protected function GetSQLCol() {return "TEXT";}
@@ -2338,6 +2325,8 @@ class AttributeTable extends AttributeText
// The PHP value is a hash array, it is stored as a TEXT column
class AttributePropertySet extends AttributeTable
{
public function GetType() {return "PropertySet";}
public function GetTypeDesc() {return "List of properties (name and value)";}
public function GetEditClass() {return "Text";}
protected function GetSQLCol() {return "TEXT";}

View File

@@ -219,14 +219,6 @@ class RowStatus_Modify extends RowStatus
}
}
class RowStatus_Disappeared extends RowStatus_Modify
{
public function GetDescription()
{
return "disappeared, changed ".$this->m_iChanged." cols";
}
}
class RowStatus_Issue extends RowStatus
{
protected $m_sReason;
@@ -255,19 +247,15 @@ class BulkChange
// #@# todo: rename the variables to sColIndex
protected $m_aAttList; // attcode => iCol
protected $m_aExtKeys; // aExtKeys[sExtKeyAttCode][sExtReconcKeyAttCode] = iCol;
protected $m_aReconcilKeys; // attcode (attcode = 'id' for the pkey)
protected $m_sSynchroScope; // OQL - if specified, then the missing items will be reported
protected $m_aOnDisappear; // array of attcode => value, values to be set when an object gets out of scope (ignored if no scope has been defined)
protected $m_aReconcilKeys;// attcode (attcode = 'id' for the pkey)
public function __construct($sClass, $aData, $aAttList, $aExtKeys, $aReconcilKeys, $sSynchroScope = null, $aOnDisappear = null)
public function __construct($sClass, $aData, $aAttList, $aExtKeys, $aReconcilKeys)
{
$this->m_sClass = $sClass;
$this->m_aData = $aData;
$this->m_aAttList = $aAttList;
$this->m_aReconcilKeys = $aReconcilKeys;
$this->m_aExtKeys = $aExtKeys;
$this->m_sSynchroScope = $sSynchroScope;
$this->m_aOnDisappear = $aOnDisappear;
}
protected function ResolveExternalKey($aRowData, $sAttCode, &$aResults)
@@ -442,70 +430,6 @@ class BulkChange
return $aResults;
}
protected function PrepareMissingObject(&$oTargetObj, &$aErrors)
{
$aResults = array();
$aErrors = array();
// External keys
//
foreach($this->m_aExtKeys as $sAttCode => $aKeyConfig)
{
//$oExtKey = MetaModel::GetAttributeDef(get_class($oTargetObj), $sAttCode);
$aResults[$sAttCode]= new CellStatus_Void($oTargetObj->Get($sAttCode));
foreach ($aKeyConfig as $sForeignAttCode => $iCol)
{
$aResults[$iCol] = new CellStatus_Void('?');
}
}
// Update attributes
//
foreach($this->m_aOnDisappear as $sAttCode => $value)
{
if (!MetaModel::IsValidAttCode(get_class($oTargetObj), $sAttCode))
{
throw new BulkChangeException('Invalid attribute code', array('class' => get_class($oTargetObj), 'attcode' => $sAttCode));
}
$oTargetObj->Set($sAttCode, $value);
if (!array_key_exists($sAttCode, $this->m_aAttList))
{
// #@# will be out of the reporting... (counted anyway)
}
}
// Reporting on fields
//
$aChangedFields = $oTargetObj->ListChanges();
foreach ($this->m_aAttList as $sAttCode => $iCol)
{
if ($sAttCode == 'id')
{
$aResults[$iCol]= new CellStatus_Void($oTargetObj->GetKey());
}
if (array_key_exists($sAttCode, $aChangedFields))
{
$aResults[$iCol]= new CellStatus_Modify($oTargetObj->Get($sAttCode), $oTargetObj->GetOriginal($sAttCode));
}
else
{
// By default... nothing happens
$aResults[$iCol]= new CellStatus_Void($oTargetObj->Get($sAttCode));
}
}
// Checks
//
$res = $oTargetObj->CheckConsistency();
if ($res !== true)
{
// $res contains the error description
$aErrors["GLOBAL"] = "Attributes not consistent with each others: $res";
}
return $aResults;
}
protected function CreateObject(&$aResult, $iRow, $aRowData, CMDBChange $oChange = null)
{
@@ -516,7 +440,7 @@ class BulkChange
{
$sErrors = implode(', ', $aErrors);
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue("Unexpected attribute value(s)");
return $oTargetObj;
return;
}
// Check that any external key will have a value proposed
@@ -535,7 +459,7 @@ class BulkChange
{
$sMissingKeys = implode(', ', $aMissingKeys);
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue("Could not be created, due to missing external key(s): $sMissingKeys");
return $oTargetObj;
return;
}
// Optionaly record the results
@@ -553,7 +477,6 @@ class BulkChange
$aResult[$iRow]["finalclass"] = get_class($oTargetObj);
$aResult[$iRow]["id"] = new CellStatus_Void(0);
}
return $oTargetObj;
}
protected function UpdateObject(&$aResult, $iRow, $oTargetObj, $aRowData, CMDBChange $oChange = null)
@@ -589,40 +512,6 @@ class BulkChange
$aResult[$iRow]["__STATUS__"] = new RowStatus_NoChange();
}
}
protected function UpdateMissingObject(&$aResult, $iRow, $oTargetObj, CMDBChange $oChange = null)
{
$aResult[$iRow] = $this->PrepareMissingObject($oTargetObj, $aErrors);
// Reporting
//
$aResult[$iRow]["finalclass"] = get_class($oTargetObj);
$aResult[$iRow]["id"] = new CellStatus_Void($oTargetObj->GetKey());
if (count($aErrors) > 0)
{
$sErrors = implode(', ', $aErrors);
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue("Unexpected attribute value(s)");
return;
}
$aChangedFields = $oTargetObj->ListChanges();
if (count($aChangedFields) > 0)
{
$aResult[$iRow]["__STATUS__"] = new RowStatus_Disappeared(count($aChangedFields));
// Optionaly record the results
//
if ($oChange)
{
$oTargetObj->DBUpdateTracked($oChange);
}
}
else
{
$aResult[$iRow]["__STATUS__"] = new RowStatus_Disappeared(0);
}
}
public function Process(CMDBChange $oChange = null)
{
@@ -639,23 +528,14 @@ class BulkChange
print_r($this->m_aExtKeys);
echo "Reconciliation:\n";
print_r($this->m_aReconcilKeys);
echo "Synchro scope:\n";
print_r($this->m_sSynchroScope);
echo "Synchro changes:\n";
print_r($this->m_aOnDisappear);
//echo "Data:\n";
//print_r($this->m_aData);
echo "</pre>\n";
exit;
}
// Compute the results
//
if (!is_null($this->m_sSynchroScope))
{
$aVisited = array();
}
$aResult = array();
foreach($this->m_aData as $iRow => $aRowData)
{
@@ -725,18 +605,13 @@ class BulkChange
switch($oReconciliationSet->Count())
{
case 0:
$oTargetObj = $this->CreateObject($aResult, $iRow, $aRowData, $oChange);
$this->CreateObject($aResult, $iRow, $aRowData, $oChange);
// $aResult[$iRow]["__STATUS__"]=> set in CreateObject
$aVisited[] = $oTargetObj->GetKey();
break;
case 1:
$oTargetObj = $oReconciliationSet->Fetch();
$this->UpdateObject($aResult, $iRow, $oTargetObj, $aRowData, $oChange);
// $aResult[$iRow]["__STATUS__"]=> set in UpdateObject
if (!is_null($this->m_sSynchroScope))
{
$aVisited[] = $oTargetObj->GetKey();
}
break;
default:
// Found several matches, ambiguous
@@ -770,295 +645,8 @@ class BulkChange
}
}
}
if (!is_null($this->m_sSynchroScope))
{
// Compute the delta between the scope and visited objects
$oScopeSearch = DBObjectSearch::FromOQL($this->m_sSynchroScope);
$oScopeSet = new DBObjectSet($oScopeSearch);
while ($oObj = $oScopeSet->Fetch())
{
$iObj = $oObj->GetKey();
if (!in_array($iObj, $aVisited))
{
$iRow++;
$this->UpdateMissingObject($aResult, $iRow, $oObj, $oChange);
}
}
}
return $aResult;
}
/**
* Display the history of bulk imports
*/
static function DisplayImportHistory(WebPage $oPage, $bFromAjax = false, $bShowAll = false)
{
$sAjaxDivId = "CSVImportHistory";
if (!$bFromAjax)
{
$oPage->add('<div id="'.$sAjaxDivId.'">');
}
$oPage->p(Dict::S('UI:History:BulkImports+'));
$oBulkChangeSearch = DBObjectSearch::FromOQL("SELECT CMDBChange WHERE userinfo LIKE '%(CSV)'");
$iQueryLimit = $bShowAll ? 0 : MetaModel::GetConfig()->GetMaxDisplayLimit() + 1;
$oBulkChanges = new DBObjectSet($oBulkChangeSearch, array('date' => false), array(), $iQueryLimit);
$oAppContext = new ApplicationContext();
$bLimitExceeded = false;
if ($oBulkChanges->Count() > MetaModel::GetConfig()->GetMaxDisplayLimit())
{
$bLimitExceeded = true;
if (!$bShowAll)
{
$iMaxObjects = MetaModel::GetConfig()->GetMinDisplayLimit();
$oBulkChanges->SetLimit($iMaxObjects);
}
}
$oBulkChanges->Seek(0);
$aDetails = array();
while ($oChange = $oBulkChanges->Fetch())
{
$sDate = '<a href="?step=10&changeid='.$oChange->GetKey().'&'.$oAppContext->GetForLink().'">'.$oChange->Get('date').'</a>';
$sUser = $oChange->GetUserName();
if (preg_match('/^(.*)\\(CSV\\)$/i', $oChange->Get('userinfo'), $aMatches))
{
$sUser = $aMatches[1];
}
else
{
$sUser = $oChange->Get('userinfo');
}
$oOpSearch = DBObjectSearch::FromOQL("SELECT CMDBChangeOpCreate WHERE change = :change_id");
$oOpSet = new DBObjectSet($oOpSearch, array(), array('change_id' => $oChange->GetKey()));
$iCreated = $oOpSet->Count();
// Get the class from the first item found (assumption: a CSV load is done for a single class)
if ($oCreateOp = $oOpSet->Fetch())
{
$sClass = $oCreateOp->Get('objclass');
}
$oOpSearch = DBObjectSearch::FromOQL("SELECT CMDBChangeOpSetAttribute WHERE change = :change_id");
$oOpSet = new DBObjectSet($oOpSearch, array(), array('change_id' => $oChange->GetKey()));
$aModified = array();
$aAttList = array();
while ($oModified = $oOpSet->Fetch())
{
// Get the class (if not done earlier on object creation)
$sClass = $oModified->Get('objclass');
$iKey = $oModified->Get('objkey');
$sAttCode = $oModified->Get('attcode');
$aAttList[$sClass][$sAttCode] = true;
$aModified["$sClass::$iKey"] = true;
}
$iModified = count($aModified);
// Assumption: there is only one class of objects being loaded
// Then the last class found gives us the class for every object
if ( ($iModified > 0) || ($iCreated > 0))
{
$aDetails[] = array('date' => $sDate, 'user' => $sUser, 'class' => $sClass, 'created' => $iCreated, 'modified' => $iModified);
}
}
$aConfig = array( 'date' => array('label' => Dict::S('UI:History:Date'), 'description' => Dict::S('UI:History:Date+')),
'user' => array('label' => Dict::S('UI:History:User'), 'description' => Dict::S('UI:History:User+')),
'class' => array('label' => Dict::S('Core:AttributeClass'), 'description' => Dict::S('Core:AttributeClass+')),
'created' => array('label' => Dict::S('UI:History:StatsCreations'), 'description' => Dict::S('UI:History:StatsCreations+')),
'modified' => array('label' => Dict::S('UI:History:StatsModifs'), 'description' => Dict::S('UI:History:StatsModifs+')),
);
if ($bLimitExceeded)
{
if ($bShowAll)
{
// Collapsible list
$oPage->add('<p>'.Dict::Format('UI:CountOfResults', $oBulkChanges->Count()).'&nbsp;&nbsp;<a class="truncated" onclick="OnTruncatedHistoryToggle(false);">'.Dict::S('UI:CollapseList').'</a></p>');
}
else
{
// Truncated list
$iMinDisplayLimit = MetaModel::GetConfig()->GetMinDisplayLimit();
$sCollapsedLabel = Dict::Format('UI:TruncatedResults', $iMinDisplayLimit, $oBulkChanges->Count());
$sLinkLabel = Dict::S('UI:DisplayAll');
$oPage->add('<p>'.$sCollapsedLabel.'&nbsp;&nbsp;<a class="truncated" onclick="OnTruncatedHistoryToggle(true);">'.$sLinkLabel.'</p>');
$oPage->add_ready_script(
<<<EOF
$('#$sAjaxDivId table.listResults').addClass('truncated');
$('#$sAjaxDivId table.listResults tr:last td').addClass('truncated');
EOF
);
$sAppContext = $oAppContext->GetForLink();
$oPage->add_script(
<<<EOF
function OnTruncatedHistoryToggle(bShowAll)
{
$.get('../pages/ajax.render.php?{$sAppContext}', {operation: 'displayCSVHistory', showall: bShowAll}, function(data)
{
$('#$sAjaxDivId').html(data);
var table = $('#$sAjaxDivId .listResults');
table.tableHover(); // hover tables
table.tablesorter( { widgets: ['myZebra', 'truncatedList']} ); // sortable and zebra tables
}
);
}
EOF
);
}
}
else
{
// Normal display - full list without any decoration
}
$oPage->table($aConfig, $aDetails);
if (!$bFromAjax)
{
$oPage->add('</div>');
}
}
/**
* Display the details of an import
*/
static function DisplayImportHistoryDetails(iTopWebPage $oPage, $iChange)
{
if ($iChange == 0)
{
throw new Exception("Missing parameter changeid");
}
$oChange = MetaModel::GetObject('CMDBChange', $iChange, false);
if (is_null($oChange))
{
throw new Exception("Unknown change: $iChange");
}
$oPage->add("<div><p><h1>".Dict::Format('UI:History:BulkImportDetails', $oChange->Get('date'), $oChange->GetUserName())."</h1></p></div>\n");
// Assumption : change made one single class of objects
$aObjects = array();
$aAttributes = array(); // array of attcode => occurences
$oOpSearch = DBObjectSearch::FromOQL("SELECT CMDBChangeOp WHERE change = :change_id");
$oOpSet = new DBObjectSet($oOpSearch, array(), array('change_id' => $iChange));
while ($oOperation = $oOpSet->Fetch())
{
$sClass = $oOperation->Get('objclass');
$iKey = $oOperation->Get('objkey');
$iObjId = "$sClass::$iKey";
if (!isset($aObjects[$iObjId]))
{
$aObjects[$iObjId] = array();
$aObjects[$iObjId]['__class__'] = $sClass;
$aObjects[$iObjId]['__id__'] = $iKey;
}
if (get_class($oOperation) == 'CMDBChangeOpCreate')
{
$aObjects[$iObjId]['__created__'] = true;
}
elseif (is_subclass_of($oOperation, 'CMDBChangeOpSetAttribute'))
{
$sAttCode = $oOperation->Get('attcode');
if (get_class($oOperation) == 'CMDBChangeOpSetAttributeScalar')
{
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
if ($oAttDef->IsExternalKey())
{
$oOldTarget = MetaModel::GetObject($oAttDef->GetTargetClass(), $oOperation->Get('oldvalue'));
$oNewTarget = MetaModel::GetObject($oAttDef->GetTargetClass(), $oOperation->Get('newvalue'));
$sOldValue = $oOldTarget->GetHyperlink();
$sNewValue = $oNewTarget->GetHyperlink();
}
else
{
$sOldValue = $oOperation->GetAsHTML('oldvalue');
$sNewValue = $oOperation->GetAsHTML('newvalue');
}
$aObjects[$iObjId][$sAttCode] = $sOldValue.' -&gt; '.$sNewValue;
}
else
{
$aObjects[$iObjId][$sAttCode] = 'n/a';
}
if (isset($aAttributes[$sAttCode]))
{
$aAttributes[$sAttCode]++;
}
else
{
$aAttributes[$sAttCode] = 1;
}
}
}
$aDetails = array();
foreach($aObjects as $iUId => $aObjData)
{
$aRow = array();
$oObject = MetaModel::GetObject($aObjData['__class__'], $aObjData['__id__'], false);
if (is_null($oObject))
{
$aRow['object'] = $aObjData['__class__'].'::'.$aObjData['__id__'].' (deleted)';
}
else
{
$aRow['object'] = $oObject->GetHyperlink();
}
if (isset($aObjData['__created__']))
{
$aRow['operation'] = Dict::S('Change:ObjectCreated');
}
else
{
$aRow['operation'] = Dict::S('Change:ObjectModified');
}
foreach ($aAttributes as $sAttCode => $iOccurences)
{
if (isset($aObjData[$sAttCode]))
{
$aRow[$sAttCode] = $aObjData[$sAttCode];
}
elseif (!is_null($oObject))
{
// This is the current vaslue: $oObject->GetAsHtml($sAttCode)
// whereas we are displaying the value that was set at the time
// the object was created
// This requires addtional coding...let's do that later
$aRow[$sAttCode] = '';
}
else
{
$aRow[$sAttCode] = '';
}
}
$aDetails[] = $aRow;
}
$aConfig = array();
$aConfig['object'] = array('label' => MetaModel::GetName($sClass), 'description' => MetaModel::GetClassDescription($sClass));
$aConfig['operation'] = array('label' => Dict::S('UI:History:Changes'), 'description' => Dict::S('UI:History:Changes+'));
foreach ($aAttributes as $sAttCode => $iOccurences)
{
$aConfig[$sAttCode] = array('label' => MetaModel::GetLabel($sClass, $sAttCode), 'description' => MetaModel::GetDescription($sClass, $sAttCode));
}
$oPage->table($aConfig, $aDetails);
}
}

View File

@@ -49,34 +49,6 @@ class CMDBChange extends DBObject
MetaModel::Init_AddAttribute(new AttributeDateTime("date", array("allowed_values"=>null, "sql"=>"date", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
}
// Helper to keep track of the author of a given change,
// taking into account a variety of cases (contact attached or not, impersonation)
static public function GetCurrentUserName()
{
if (UserRights::IsImpersonated())
{
$sUserString = Dict::Format('UI:Archive_User_OnBehalfOf_User', UserRights::GetRealUserFriendlyName(), UserRights::GetUserFriendlyName());
}
else
{
$sUserString = UserRights::GetUserFriendlyName();
}
return $sUserString;
}
public function GetUserName()
{
if (preg_match('/^(.*)\\(CSV\\)$/i', $this->Get('userinfo'), $aMatches))
{
$sUser = $aMatches[1];
}
else
{
$sUser = $this->Get('userinfo');
}
return $sUser;
}
}
?>

View File

@@ -59,8 +59,6 @@ require_once('dbobject.class.php');
require_once('dbobjectsearch.class.php');
require_once('dbobjectset.class.php');
require_once('dbproperty.class.inc.php');
// db change tracking data model
require_once('cmdbchange.class.inc.php');
require_once('cmdbchangeop.class.inc.php');
@@ -152,7 +150,7 @@ abstract class CMDBObject extends DBObject
{
$original = '';
}
$oMyChangeOp->Set("prevstring", $original);
$oMyChangeOp->Set("prevdata", $original);
$iId = $oMyChangeOp->DBInsertNoReload();
}
elseif ($oAttDef instanceOf AttributeBlob)
@@ -234,7 +232,7 @@ abstract class CMDBObject extends DBObject
// and we decided that it was too risky to activate it
// Anyhow, users willing to have a very strong security could set
// skip_strong_security = 0, in the config file
$bSkipStrongSecurity = MetaModel::GetConfig()->Get('skip_strong_security');
$bSkipStrongSecurity = utils::GetConfig()->Get('skip_strong_security');
}
if (!$bSkipStrongSecurity)
{

View File

@@ -533,51 +533,6 @@ class CMDBSource
// so far, only one line...
return implode(', ', $aRes);
}
/**
* Determine the slave status of the server
* @return bool true if the server is slave
*/
public static function IsSlaveServer()
{
try
{
$result = self::Query('SHOW SLAVE STATUS');
}
catch(MySQLException $e)
{
throw new CoreException("Current user not allowed to check the status", array('mysql_error' => $e->getMessage()));
}
if (mysql_num_rows($result) == 0)
{
return false;
}
// Returns one single row anytime
$aRow = mysql_fetch_array($result, MYSQL_ASSOC);
mysql_free_result($result);
if (!isset($aRow['Slave_IO_Running']))
{
return false;
}
if (!isset($aRow['Slave_SQL_Running']))
{
return false;
}
// If at least one slave thread is running, then we consider that the slave is enabled
if ($aRow['Slave_IO_Running'] == 'Yes')
{
return true;
}
if ($aRow['Slave_SQL_Running'] == 'Yes')
{
return true;
}
return false;
}
}

View File

@@ -18,11 +18,6 @@ define('ITOP_VERSION', '$ITOP_VERSION$');
define('ITOP_REVISION', '$WCREV$');
define('ITOP_BUILD_DATE', '$WCNOW$');
define('ACCESS_USER_WRITE', 1);
define('ACCESS_ADMIN_WRITE', 2);
define('ACCESS_FULL', ACCESS_USER_WRITE | ACCESS_ADMIN_WRITE);
define('ACCESS_READONLY', 0);
/**
* Configuration read/write
*
@@ -75,7 +70,6 @@ class Config
protected $m_aAppModules;
protected $m_aDataModels;
protected $m_aWebServiceCategories;
protected $m_aAddons;
protected $m_aDictionaries;
@@ -124,95 +118,6 @@ class Config
'source_of_value' => '',
'show_in_conf_sample' => true,
),
'max_combo_length' => array(
'type' => 'int',
'description' => 'The maximum number of elements in a drop-down list. If more then an autocomplete will be used',
'default' => 50,
'value' => 50,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'min_autocomplete_chars' => array(
'type' => 'int',
'description' => 'The minimum number of characters to type in order to trigger the "autocomplete" behavior',
'default' => 3,
'value' => 3,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'allow_target_creation' => array(
'type' => 'bool',
'description' => 'Displays the + button on external keys to create target objects',
'default' => true,
'value' => true,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
// Levels that trigger a confirmation in the CSV import/synchro wizard
'csv_import_min_object_confirmation' => array(
'type' => 'integer',
'description' => 'Minimum number of objects to check for the confirmation percentages',
'default' => 3,
'value' => 3,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'csv_import_errors_percentage' => array(
'type' => 'integer',
'description' => 'Percentage of errors that trigger a confirmation in the CSV import',
'default' => 50,
'value' => 50,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'csv_import_modifications_percentage' => array(
'type' => 'integer',
'description' => 'Percentage of modifications that trigger a confirmation in the CSV import',
'default' => 50,
'value' => 50,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'csv_import_creations_percentage' => array(
'type' => 'integer',
'description' => 'Percentage of creations that trigger a confirmation in the CSV import',
'default' => 50,
'value' => 50,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'access_mode' => array(
'type' => 'integer',
'description' => 'Combination of flags (ACCESS_USER_WRITE | ACCESS_ADMIN_WRITE, or ACCESS_FULL)',
'default' => ACCESS_FULL,
'value' => ACCESS_FULL,
'source_of_value' => '',
'show_in_conf_sample' => true,
),
'access_message' => array(
'type' => 'string',
'description' => 'Message displayed to the users when there is any access restriction',
'default' => 'iTop is temporarily frozen, please wait... (the admin team)',
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => true,
),
'online_help' => array(
'type' => 'string',
'description' => 'Hyperlink to the online-help web page',
'default' => 'http://www.combodo.com/itop-help',
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => true,
),
'log_usage' => array(
'type' => 'bool',
'description' => 'Log the usage of the application (i.e. the date/time and the user name of each login)',
'default' => false,
'value' => false,
'source_of_value' => '',
'show_in_conf_sample' => false,
),
);
public function IsProperty($sPropCode)
@@ -240,6 +145,7 @@ class Config
default:
throw new CoreException('Unknown type for setting', array('property' => $sPropCode, 'type' => $sType));
}
$this->m_aSettings[$sPropCode]['value'] = $value;
$this->m_aSettings[$sPropCode]['source_of_value'] = $sSourceDesc;
@@ -337,46 +243,38 @@ class Config
$this->m_sFile = $sConfigFile;
$this->m_aAppModules = array(
// Some default modules, always present can be move to an official iTop Module later if needed
'application/transaction.class.inc.php',
'application/menunode.class.inc.php',
'application/user.preferences.class.inc.php',
'application/audit.rule.class.inc.php',
// Romain - That's dirty, because those classes are in fact part of the core
'../application/transaction.class.inc.php',
'../application/menunode.class.inc.php',
'../application/user.preferences.class.inc.php',
'../application/audit.rule.class.inc.php',
// Romain - That's dirty, because those 3 classes are in fact part of the core
// but I needed those classes to be derived from cmdbAbstractObject
// (to be managed via the GUI) and this class in not really known from
// the core, PLUS I needed the includes to be there also for the setup
// to create the tables.
'core/event.class.inc.php',
'core/action.class.inc.php',
'core/trigger.class.inc.php',
'../core/event.class.inc.php',
'../core/action.class.inc.php',
'../core/trigger.class.inc.php',
);
$this->m_aDataModels = array();
$this->m_aWebServiceCategories = array(
'webservices/webservices.basic.php',
);
$this->m_aAddons = array(
// Default AddOn, always present can be moved to an official iTop Module later if needed
'user rights' => 'addons/userrights/userrightsprofile.class.inc.php',
'user rights' => '../addons/userrights/userrightsprofile.class.inc.php',
);
$this->m_aDictionaries = array(
// Default dictionaries, always present can be moved to an official iTop Module later if needed
'dictionaries/dictionary.itop.core.php',
'dictionaries/dictionary.itop.ui.php', // Support for English
'dictionaries/fr.dictionary.itop.ui.php', // Support for French
'dictionaries/fr.dictionary.itop.core.php', // Support for French
'dictionaries/es_cr.dictionary.itop.ui.php', // Support for Spanish (from Costa Rica)
'dictionaries/es_cr.dictionary.itop.core.php', // Support for Spanish (from Costa Rica)
'dictionaries/de.dictionary.itop.ui.php', // Support for German
'dictionaries/de.dictionary.itop.core.php', // Support for German
'dictionaries/pt_br.dictionary.itop.ui.php', // Support for Brazilian Portuguese
'dictionaries/pt_br.dictionary.itop.core.php', // Support for Brazilian Portuguese
'dictionaries/ru.dictionary.itop.ui.php', // Support for Russian
'dictionaries/ru.dictionary.itop.core.php', // Support for Russian
'dictionaries/tr.dictionary.itop.ui.php', // Support for Turkish
'dictionaries/tr.dictionary.itop.core.php', // Support for Turkish
'dictionaries/zh.dictionary.itop.ui.php', // Support for Chinese
'dictionaries/zh.dictionary.itop.core.php', // Support for Chinese
'../dictionaries/dictionary.itop.core.php',
'../dictionaries/dictionary.itop.ui.php', // Support for English
'../dictionaries/fr.dictionary.itop.ui.php', // Support for French
'../dictionaries/fr.dictionary.itop.core.php', // Support for French
'../dictionaries/es_cr.dictionary.itop.ui.php', // Support for Spanish (from Costa Rica)
'../dictionaries/es_cr.dictionary.itop.core.php', // Support for Spanish (from Costa Rica)
'../dictionaries/de.dictionary.itop.ui.php', // Support for German
'../dictionaries/de.dictionary.itop.core.php', // Support for German
'../dictionaries/pt_br.dictionary.itop.ui.php', // Support for Brazilian Portuguese
'../dictionaries/pt_br.dictionary.itop.core.php', // Support for Brazilian Portuguese
);
foreach($this->m_aSettings as $sPropCode => $aSettingInfo)
{
$this->m_aSettings[$sPropCode]['value'] = $aSettingInfo['default'];
@@ -474,8 +372,7 @@ class Config
}
if (!array_key_exists('user rights', $MyModules['addons']))
{
// Add one, by default
$MyModules['addons']['user rights'] = '/addons/userrights/userrightsnull.class.inc.php';
$MyModules['addons']['user rights'] = '../addons/userrights/userrightsnull.class.inc.php';
}
if (!array_key_exists('dictionaries', $MyModules))
{
@@ -483,10 +380,6 @@ class Config
}
$this->m_aAppModules = $MyModules['application'];
$this->m_aDataModels = $MyModules['business'];
if (isset($MyModules['webservices']))
{
$this->m_aWebServiceCategories = $MyModules['webservices'];
}
$this->m_aAddons = $MyModules['addons'];
$this->m_aDictionaries = $MyModules['dictionaries'];
@@ -535,8 +428,22 @@ class Config
protected function Verify()
{
// Files are verified later on, just before using them -see MetaModel::Plugin()
// (we have their final path at that point)
foreach ($this->m_aAppModules as $sModule => $sToInclude)
{
$this->CheckFile('application module', $sToInclude);
}
foreach ($this->m_aDataModels as $sModule => $sToInclude)
{
$this->CheckFile('business model', $sToInclude);
}
foreach ($this->m_aAddons as $sModule => $sToInclude)
{
$this->CheckFile('addon module', $sToInclude);
}
foreach ($this->m_aDictionaries as $sModule => $sToInclude)
{
$this->CheckFile('dictionary', $sToInclude);
}
}
public function GetModuleSetting($sModule, $sProperty, $defaultvalue = null)
@@ -571,15 +478,6 @@ class Config
$this->m_aDataModels = $aDataModels;
}
public function GetWebServiceCategories()
{
return $this->m_aWebServiceCategories;
}
public function SetWebServiceCategories($aWebServiceCategories)
{
$this->m_aWebServiceCategories = $aWebServiceCategories;
}
public function GetAddons()
{
return $this->m_aAddons;
@@ -846,74 +744,7 @@ class Config
{
return is_writable($this->m_sFile);
}
public function GetLoadedFile()
{
return $this->m_sFile;
}
/**
* Render the configuration as an associative array
* @return boolean True otherwise throws an Exception
*/
public function ToArray()
{
$aSettings = array();
foreach($this->m_aSettings as $sPropCode => $aSettingInfo)
{
$aSettings[$sPropCode] = $aSettingInfo['value'];
}
$aSettings['db_host'] = $this->m_sDBHost;
$aSettings['db_user'] = $this->m_sDBUser;
$aSettings['db_pwd'] = $this->m_sDBPwd;
$aSettings['db_name'] = $this->m_sDBName;
$aSettings['db_subname'] = $this->m_sDBSubname;
$aSettings['db_character_set'] = $this->m_sDBCharacterSet;
$aSettings['db_collation'] = $this->m_sDBCollation;
$aSettings['log_global'] = $this->m_bLogGlobal;
$aSettings['log_notification'] = $this->m_bLogNotification;
$aSettings['log_issue'] = $this->m_bLogIssue;
$aSettings['log_web_service'] = $this->m_bLogWebService;
$aSettings['min_display_limit'] = $this->m_iMinDisplayLimit;
$aSettings['max_display_limit'] = $this->m_iMaxDisplayLimit;
$aSettings['standard_reload_interval'] = $this->m_iStandardReloadInterval;
$aSettings['fast_reload_interval'] = $this->m_iFastReloadInterval;
$aSettings['secure_connection_required'] = $this->m_bSecureConnectionRequired;
$aSettings['https_hyperlinks'] = $this->m_bHttpsHyperlinks;
$aSettings['default_language'] = $this->m_sDefaultLanguage;
$aSettings['allowed_login_types'] = $this->m_sAllowedLoginTypes;
$aSettings['encryption_key'] = $this->m_sEncryptionKey;
$aSettings['csv_import_charsets'] = $this->m_aCharsets;
foreach ($this->m_aModuleSettings as $sModule => $aProperties)
{
foreach ($aProperties as $sProperty => $value)
{
$aSettings['module_settings'][$sModule][$sProperty] = $value;
}
}
foreach($this->m_aAppModules as $sFile)
{
$aSettings['application_list'][] = $sFile;
}
foreach($this->m_aDataModels as $sFile)
{
$aSettings['datamodel_list'][] = $sFile;
}
foreach($this->m_aWebServiceCategories as $sFile)
{
$aSettings['webservice_list'][] = $sFile;
}
foreach($this->m_aAddons as $sKey => $sFile)
{
$aSettings['addon_list'][] = $sFile;
}
foreach($this->m_aDictionaries as $sFile)
{
$aSettings['dictionary_list'][] = $sFile;
}
return $aSettings;
}
/**
* Write the configuration to a file (php format) that can be reloaded later
* By default write to the same file that was specified when constructing the object
@@ -1014,12 +845,6 @@ class Config
fwrite($hFile, "\t\t'$sFile',\n");
}
fwrite($hFile, "\t),\n");
fwrite($hFile, "\t'webservices' => array (\n");
foreach($this->m_aWebServiceCategories as $sFile)
{
fwrite($hFile, "\t\t'$sFile',\n");
}
fwrite($hFile, "\t),\n");
fwrite($hFile, "\t'addons' => array (\n");
foreach($this->m_aAddons as $sKey => $sFile)
{

View File

@@ -849,14 +849,7 @@ abstract class DBObject
$sInsertSQL = "INSERT INTO `$sTable` (".join(",", $aFieldsToWrite).") VALUES (".join(", ", $aValuesToWrite).")";
if (MetaModel::DBIsReadOnly())
{
$iNewKey = -1;
}
else
{
$iNewKey = CMDBSource::InsertInto($sInsertSQL);
}
$iNewKey = CMDBSource::InsertInto($sInsertSQL);
// Note that it is possible to have a key defined here, and the autoincrement expected, this is acceptable in a non root class
if (empty($this->m_iKey))
{
@@ -949,11 +942,6 @@ abstract class DBObject
$this->Reload();
return $this->m_iKey;
}
public function DBInsertTracked(CMDBChange $oVoid)
{
return $this->DBInsert();
}
// Creates a copy of the current object into the database
// Returns the id of the newly created object
@@ -1016,10 +1004,7 @@ abstract class DBObject
$oFilter->AddCondition('id', $this->m_iKey, '=');
$sSQL = MetaModel::MakeUpdateQuery($oFilter, $aChanges);
if (!MetaModel::DBIsReadOnly())
{
CMDBSource::Query($sSQL);
}
CMDBSource::Query($sSQL);
}
$this->DBWriteLinks();
@@ -1035,11 +1020,6 @@ abstract class DBObject
return $this->m_iKey;
}
public function DBUpdateTracked(CMDBChange $oVoid)
{
return $this->DBUpdate();
}
// Make the current changes persistent - clever wrapper for Insert or Update
public function DBWrite()
@@ -1063,10 +1043,7 @@ abstract class DBObject
$this->OnDelete();
$sSQL = MetaModel::MakeDeleteQuery($oFilter);
if (!MetaModel::DBIsReadOnly())
{
CMDBSource::Query($sSQL);
}
CMDBSource::Query($sSQL);
$this->AfterDelete();
@@ -1074,11 +1051,6 @@ abstract class DBObject
$this->m_iKey = null;
}
public function DBDeleteTracked(CMDBChange $oVoid)
{
$this->DBDelete();
}
public function EnumTransitions()
{
$sStateAttCode = MetaModel::GetStateAttributeCode(get_class($this));

View File

@@ -158,30 +158,6 @@ class DBObjectSet
return $aRet;
}
public function ToArrayOfValues()
{
if (!$this->m_bLoaded) $this->Load();
$aRet = array();
foreach($this->m_aData as $iRow => $aObjects)
{
foreach($aObjects as $sClassAlias => $oObject)
{
$aRet[$iRow][$sClassAlias.'.'.'id'] = $oObject->GetKey();
$sClass = get_class($oObject);
foreach(MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
{
if ($oAttDef->IsScalar())
{
$sAttName = $sClassAlias.'.'.$sAttCode;
$aRet[$iRow][$sAttName] = $oObject->Get($sAttCode);
}
}
}
}
return $aRet;
}
public function GetColumnAsArray($sAttCode, $bWithId = true)
{
$aRet = array();

View File

@@ -1,159 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Database properties - manage database instances in a complex installation
*
* @author Erwan Taloc <erwan.taloc@combodo.com>
* @author Romain Quetiez <romain.quetiez@combodo.com>
* @author Denis Flaven <denis.flaven@combodo.com>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
/**
* A database property
*
* @package iTopORM
*/
class DBProperty extends DBObject
{
public static function Init()
{
$aParams = array
(
"category" => "cloud",
"key_type" => "autoincrement",
"name_attcode" => "name",
"state_attcode" => "",
"reconc_keys" => array(),
"db_table" => "priv_db_properties",
"db_key_field" => "id",
"db_finalclass_field" => "",
);
MetaModel::Init_Params($aParams);
//MetaModel::Init_InheritAttributes();
MetaModel::Init_AddAttribute(new AttributeString("name", array("allowed_values"=>null, "sql"=>"name", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("description", array("allowed_values"=>null, "sql"=>"description", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("value", array("allowed_values"=>null, "sql"=>"value", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeDateTime("change_date", array("allowed_values"=>null, "sql"=>"change_date", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("change_comment", array("allowed_values"=>null, "sql"=>"change_comment", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
}
/**
* Helper to check wether the table has been created into the DB
* (this table did not exist in 1.0.1 and older versions)
*/
public static function IsInstalled()
{
$sTable = MetaModel::DBGetTable(__CLASS__);
if (CMDBSource::IsTable($sTable))
{
return true;
}
else
{
return false;
}
return false;
}
public static function SetProperty($sName, $sValue, $sComment = '', $sDescription = null)
{
try
{
$oSearch = DBObjectSearch::FromOQL('SELECT DBProperty WHERE name = :name');
$oSet = new DBObjectSet($oSearch, array(), array('name' => $sName));
if ($oSet->Count() == 0)
{
$oProp = new DBProperty();
$oProp->Set('name', $sName);
$oProp->Set('description', $sDescription);
$oProp->Set('value', $sValue);
$oProp->Set('change_date', time());
$oProp->Set('change_comment', $sComment);
$oProp->DBInsert();
}
elseif ($oSet->Count() == 1)
{
$oProp = $oSet->fetch();
if (!is_null($sDescription))
{
$oProp->Set('description', $sDescription);
}
$oProp->Set('value', $sValue);
$oProp->Set('change_date', time());
$oProp->Set('change_comment', $sComment);
$oProp->DBUpdate();
}
else
{
// Houston...
throw new CoreException('duplicate db property');
}
}
catch (MySQLException $e)
{
// This might be because the table could not be found,
// let's check it and discard silently if this is really the case
if (self::IsInstalled())
{
throw $e;
}
IssueLog::Error('Attempting to write a DBProperty while the module has not been installed');
}
}
public static function GetProperty($sName, $default = null)
{
try
{
$oSearch = DBObjectSearch::FromOQL('SELECT DBProperty WHERE name = :name');
$oSet = new DBObjectSet($oSearch, array(), array('name' => $sName));
$iCount = $oSet->Count();
if ($iCount == 0)
{
//throw new CoreException('unknown db property', array('name' => $sName));
$sValue = $default;
}
elseif ($iCount == 1)
{
$oProp = $oSet->fetch();
$sValue = $oProp->Get('value');
}
else
{
// $iCount > 1
// Houston...
throw new CoreException('duplicate db property', array('name' => $sName, 'count' => $iCount));
}
}
catch (MySQLException $e)
{
// This might be because the table could not be found,
// let's check it and discard silently if this is really the case
if (self::IsInstalled())
{
throw $e;
}
$sValue = $default;
}
return $sValue;
}
}
?>

View File

@@ -89,11 +89,6 @@ class EMail
$this->m_aHeaders[$sKey] = $sValue;
}
}
public function SetReferences($sReferences)
{
$this->AddToHeader('References', $sReferences);
}
public function SetBody($sBody)
{
@@ -137,4 +132,4 @@ class EMail
}
?>
?>

View File

@@ -258,35 +258,4 @@ class EventWebService extends Event
}
}
class EventLoginUsage extends Event
{
public static function Init()
{
$aParams = array
(
"category" => "core/cmdb,view_in_gui",
"key_type" => "autoincrement",
"name_attcode" => "",
"state_attcode" => "",
"reconc_keys" => array(),
"db_table" => "priv_event_loginusage",
"db_key_field" => "id",
"db_finalclass_field" => "",
);
MetaModel::Init_Params($aParams);
MetaModel::Init_InheritAttributes();
MetaModel::Init_AddAttribute(new AttributeExternalKey("user_id", array("targetclass"=>"User", "jointype"=> "", "allowed_values"=>null, "sql"=>"user_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeExternalField("contact_name", array("allowed_values"=>null, "extkey_attcode"=>"user_id", "target_attcode"=>"contactid", "is_null_allowed"=>true, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeExternalField("contact_email", array("allowed_values"=>null, "extkey_attcode"=>"user_id", "target_attcode"=>"email", "is_null_allowed"=>true, "depends_on"=>array())));
// Display lists
MetaModel::Init_SetZListItems('details', array('date', 'user_id', 'contact_name', 'contact_email', 'userinfo', 'message')); // Attributes to be displayed for the complete details
MetaModel::Init_SetZListItems('list', array('date', 'user_id', 'contact_name', 'contact_email', 'userinfo')); // Attributes to be displayed for a list
// Search criteria
MetaModel::Init_SetZListItems('standard_search', array('date', 'user_id', 'contact_name', 'contact_email')); // Criteria of the std search form
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
}
}
?>

View File

@@ -198,10 +198,10 @@ class FilterFromAttribute extends FilterDefinition
return $oAttDef->GetValuesDef();
}
public function GetAllowedValues($aArgs = array(), $sContains = '')
public function GetAllowedValues($aArgs = array(), $sBeginsWith = '')
{
$oAttDef = $this->Get("refattribute");
return $oAttDef->GetAllowedValues($aArgs, $sContains);
return $oAttDef->GetAllowedValues($aArgs, $sBeginsWith);
}
public function GetOperators()

View File

@@ -1,146 +1,120 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* File logging
*
* @author Erwan Taloc <erwan.taloc@combodo.com>
* @author Romain Quetiez <romain.quetiez@combodo.com>
* @author Denis Flaven <denis.flaven@combodo.com>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
class FileLog
{
protected $m_sFile = ''; // log is disabled if this is empty
public function __construct($sFileName = '')
{
$this->m_sFile = $sFileName;
}
public function Error($sText)
{
self::Write("Error | ".$sText);
}
public function Warning($sText)
{
self::Write("Warning | ".$sText);
}
public function Info($sText)
{
self::Write("Info | ".$sText);
}
public function Ok($sText)
{
self::Write("Ok | ".$sText);
}
protected function Write($sText)
{
if (strlen($this->m_sFile) == 0) return;
$hLogFile = @fopen($this->m_sFile, 'a');
if ($hLogFile !== false)
{
$sDate = date('Y-m-d H:i:s');
fwrite($hLogFile, "$sDate | $sText\n");
fclose($hLogFile);
}
}
}
class SetupLog
{
protected static $m_oFileLog;
public static function Enable($sTargetFile)
{
self::$m_oFileLog = new FileLog($sTargetFile);
}
public static function Error($sText)
{
self::$m_oFileLog->Error($sText);
}
public static function Warning($sText)
{
self::$m_oFileLog->Warning($sText);
}
public static function Info($sText)
{
self::$m_oFileLog->Info($sText);
}
public static function Ok($sText)
{
self::$m_oFileLog->Ok($sText);
}
}
class IssueLog
{
protected static $m_oFileLog;
public static function Enable($sTargetFile)
{
self::$m_oFileLog = new FileLog($sTargetFile);
}
public static function Error($sText)
{
self::$m_oFileLog->Error($sText);
}
public static function Warning($sText)
{
self::$m_oFileLog->Warning($sText);
}
public static function Info($sText)
{
self::$m_oFileLog->Info($sText);
}
public static function Ok($sText)
{
self::$m_oFileLog->Ok($sText);
}
}
class ToolsLog
{
protected static $m_oFileLog;
public static function Enable($sTargetFile)
{
self::$m_oFileLog = new FileLog($sTargetFile);
}
public static function Error($sText)
{
self::$m_oFileLog->Error($sText);
}
public static function Warning($sText)
{
self::$m_oFileLog->Warning($sText);
}
public static function Info($sText)
{
self::$m_oFileLog->Info($sText);
}
public static function Ok($sText)
{
self::$m_oFileLog->Ok($sText);
}
}
?>
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* File logging
*
* @author Erwan Taloc <erwan.taloc@combodo.com>
* @author Romain Quetiez <romain.quetiez@combodo.com>
* @author Denis Flaven <denis.flaven@combodo.com>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
class FileLog
{
protected $m_sFile = ''; // log is disabled if this is empty
public function __construct($sFileName = '')
{
$this->m_sFile = $sFileName;
}
public function Error($sText)
{
self::Write("Error | ".$sText);
}
public function Warning($sText)
{
self::Write("Warning | ".$sText);
}
public function Info($sText)
{
self::Write("Info | ".$sText);
}
public function Ok($sText)
{
self::Write("Ok | ".$sText);
}
protected function Write($sText)
{
if (strlen($this->m_sFile) == 0) return;
$hLogFile = @fopen($this->m_sFile, 'a');
if ($hLogFile !== false)
{
$sDate = date('Y-m-d H:i:s');
fwrite($hLogFile, "$sDate | $sText\n");
fclose($hLogFile);
}
}
}
class SetupLog
{
protected static $m_oFileLog;
public static function Enable($sTargetFile)
{
self::$m_oFileLog = new FileLog($sTargetFile);
}
public static function Error($sText)
{
self::$m_oFileLog->Error($sText);
}
public static function Warning($sText)
{
self::$m_oFileLog->Warning($sText);
}
public static function Info($sText)
{
self::$m_oFileLog->Info($sText);
}
public static function Ok($sText)
{
self::$m_oFileLog->Ok($sText);
}
}
class IssueLog
{
protected static $m_oFileLog;
public static function Enable($sTargetFile)
{
self::$m_oFileLog = new FileLog($sTargetFile);
}
public static function Error($sText)
{
self::$m_oFileLog->Error($sText);
}
public static function Warning($sText)
{
self::$m_oFileLog->Warning($sText);
}
public static function Info($sText)
{
self::$m_oFileLog->Info($sText);
}
public static function Ok($sText)
{
self::$m_oFileLog->Ok($sText);
}
}
?>

View File

@@ -14,8 +14,6 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
require_once(APPROOT.'core/modulehandler.class.inc.php');
/**
* Metamodel
*
@@ -904,16 +902,16 @@ abstract class MetaModel
// Allowed values
//
public static function GetAllowedValues_att($sClass, $sAttCode, $aArgs = array(), $sContains = '')
public static function GetAllowedValues_att($sClass, $sAttCode, $aArgs = array(), $sBeginsWith = '')
{
$oAttDef = self::GetAttributeDef($sClass, $sAttCode);
return $oAttDef->GetAllowedValues($aArgs, $sContains);
return $oAttDef->GetAllowedValues($aArgs, $sBeginsWith);
}
public static function GetAllowedValues_flt($sClass, $sFltCode, $aArgs = array(), $sContains = '')
public static function GetAllowedValues_flt($sClass, $sFltCode, $aArgs = array(), $sBeginsWith = '')
{
$oFltDef = self::GetClassFilterDef($sClass, $sFltCode);
return $oFltDef->GetAllowedValues($aArgs, $sContains);
return $oFltDef->GetAllowedValues($aArgs, $sBeginsWith);
}
//
@@ -1352,42 +1350,16 @@ abstract class MetaModel
// Discard attributes that do not make sense
// (missing classes in the current module combination, resulting in irrelevant ext key or link set)
//
self::Init_CheckZListItems($aItems, $sTargetClass);
self::$m_aListData[$sTargetClass][$sListCode] = $aItems;
}
protected static function Init_CheckZListItems(&$aItems, $sTargetClass)
{
foreach($aItems as $iFoo => $attCode)
foreach($aItems as $iFoo => $sAttCode)
{
if (is_array($attCode))
{
self::Init_CheckZListItems($attCode, $sTargetClass);
}
else if (isset(self::$m_aIgnoredAttributes[$sTargetClass][$attCode]))
if (isset(self::$m_aIgnoredAttributes[$sTargetClass][$sAttCode]))
{
unset($aItems[$iFoo]);
}
}
self::$m_aListData[$sTargetClass][$sListCode] = $aItems;
}
public static function FlattenZList($aList)
{
$aResult = array();
foreach($aList as $value)
{
if (!is_array($value))
{
$aResult[] = $value;
}
else
{
$aResult = array_merge($aResult, self::FlattenZList($value));
}
}
return $aResult;
}
public static function Init_DefineState($sStateCode, $aStateDef)
{
$sTargetClass = self::GetCallersPHPClass("Init");
@@ -1429,7 +1401,6 @@ abstract class MetaModel
public static function Init_OverloadStateAttribute($sStateCode, $sAttCode, $iFlags)
{
// Warning: this is not sufficient: the flags have to be copied to the states that are inheriting from this state
$sTargetClass = self::GetCallersPHPClass("Init");
self::$m_aStates[$sTargetClass][$sStateCode]['attribute_list'][$sAttCode] = $iFlags;
}
@@ -2359,7 +2330,7 @@ abstract class MetaModel
//
foreach(self::EnumZLists() as $sListCode)
{
foreach (self::FlattenZList(self::GetZListItems($sClass, $sListCode)) as $sMyAttCode)
foreach (self::GetZListItems($sClass, $sListCode) as $sMyAttCode)
{
if (!self::IsValidAttCode($sClass, $sMyAttCode))
{
@@ -2369,7 +2340,6 @@ abstract class MetaModel
}
}
}
if (count($aErrors) > 0)
{
echo "<div style=\"width:100%;padding:10px;background:#FFAAAA;display:;\">";
@@ -2565,30 +2535,6 @@ abstract class MetaModel
return $aDataDump;
}
/*
* Determines wether the target DB is frozen or not
*/
public static function DBIsReadOnly()
{
// Improvement: check the mySQL variable -> Read-only
if (UserRights::IsAdministrator())
{
return (!self::DBHasAccess(ACCESS_ADMIN_WRITE));
}
else
{
return (!self::DBHasAccess(ACCESS_USER_WRITE));
}
}
public static function DBHasAccess($iRequested = ACCESS_FULL)
{
$iMode = self::$m_oConfig->Get('access_mode');
if (($iMode & $iRequested) == 0) return false;
return true;
}
protected static function MakeDictEntry($sKey, $sValueFromOldSystem, $sDefaultValue, &$bNotInDico)
{
$sValue = Dict::S($sKey, 'x-no-nothing');
@@ -3279,18 +3225,8 @@ abstract class MetaModel
CMDBSource::SelectDB(self::$m_sDBName);
// Some of the init could not be done earlier (requiring classes to be declared and DB to be accessible)
// To be deprecated
self::InitPlugins();
foreach(get_declared_classes() as $sPHPClass)
{
if (is_subclass_of($sPHPClass, 'ModuleHandlerAPI'))
{
$aCallSpec = array($sPHPClass, 'OnMetaModelStarted');
call_user_func_array($aCallSpec, array());
}
}
if (false)
{
echo "Debug<br/>\n";
@@ -3308,12 +3244,10 @@ abstract class MetaModel
if (self::$m_oConfig->GetLogIssue())
{
self::$m_bLogIssue = true;
IssueLog::Enable(APPROOT.'/error.log');
IssueLog::Enable('../error.log');
}
self::$m_bLogNotification = self::$m_oConfig->GetLogNotification();
self::$m_bLogWebService = self::$m_oConfig->GetLogWebService();
ToolsLog::Enable(APPROOT.'/tools.log');
}
else
{
@@ -3348,7 +3282,7 @@ abstract class MetaModel
// Romain: this is the only way I've found to cope with the fact that
// classes have to be derived from cmdbabstract (to be editable in the UI)
require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
require_once('../application/cmdbabstract.class.inc.php');
foreach (self::$m_oConfig->GetAppModules() as $sModule => $sToInclude)
{
@@ -3358,10 +3292,6 @@ abstract class MetaModel
{
self::Plugin($sConfigFile, 'business', $sToInclude);
}
foreach (self::$m_oConfig->GetWebServiceCategories() as $sModule => $sToInclude)
{
self::Plugin($sConfigFile, 'webservice', $sToInclude);
}
foreach (self::$m_oConfig->GetAddons() as $sModule => $sToInclude)
{
self::Plugin($sConfigFile, 'addons', $sToInclude);
@@ -3411,36 +3341,13 @@ abstract class MetaModel
protected static function Plugin($sConfigFile, $sModuleType, $sToInclude)
{
$sFirstChar = substr($sToInclude, 0, 1);
$sSecondChar = substr($sToInclude, 1, 1);
if (($sFirstChar != '/') && ($sFirstChar != '\\') && ($sSecondChar != ':'))
if (!file_exists($sToInclude))
{
// It is a relative path, prepend APPROOT
if (substr($sToInclude, 0, 3) == '../')
{
// Preserve compatibility with config files written before 1.0.1
// Replace '../' by '<root>/'
$sFile = APPROOT.'/'.substr($sToInclude, 3);
}
else
{
$sFile = APPROOT.'/'.$sToInclude;
}
throw new CoreException('Wrong filename in configuration file', array('file' => $sConfigFile, 'module' => $sModuleType, 'filename' => $sToInclude));
}
else
{
// Leave as is - should be an absolute path
$sFile = $sToInclude;
}
if (!file_exists($sFile))
{
throw new CoreException('Wrong filename in configuration file', array('file' => $sConfigFile, 'module' => $sModuleType, 'filename' => $sFile));
}
require_once($sFile);
require_once($sToInclude);
}
// #@# to be deprecated!
//
protected static function InitPlugins()
{
foreach(self::$m_aPlugins as $sName => $aData)
@@ -3598,20 +3505,14 @@ abstract class MetaModel
public static function BulkDelete(DBObjectSearch $oFilter)
{
$sSQL = self::MakeDeleteQuery($oFilter);
if (!self::DBIsReadOnly())
{
CMDBSource::Query($sSQL);
}
CMDBSource::Query($sSQL);
}
public static function BulkUpdate(DBObjectSearch $oFilter, array $aValues)
{
// $aValues is an array of $sAttCode => $value
$sSQL = self::MakeUpdateQuery($oFilter, $aValues);
if (!self::DBIsReadOnly())
{
CMDBSource::Query($sSQL);
}
CMDBSource::Query($sSQL);
}
// Links

View File

@@ -1,37 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Class ModuleHandler
* Defines the API to implement module specific actions during page execution
*
* @author Erwan Taloc <erwan.taloc@combodo.com>
* @author Romain Quetiez <romain.quetiez@combodo.com>
* @author Denis Flaven <denis.flaven@combodo.com>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
abstract class ModuleHandlerAPI
{
public static function OnMetaModelStarted()
{
}
public static function OnMenuCreation()
{
}
}
?>

View File

@@ -14,7 +14,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
require_once(APPROOT.'/core/simplecrypt.class.inc.php');
require_once('../core/simplecrypt.class.inc.php');
/**
* ormPassword

View File

@@ -50,6 +50,7 @@ define('UR_ACTION_APPLICATION_DEFINED', 10000); // Application specific actions
*/
abstract class UserRightsAddOnAPI
{
abstract public function Setup(); // initial installation
abstract public function CreateAdministrator($sAdminUser, $sAdminPwd, $sLanguage = 'EN US'); // could be used during initial installation
abstract public function Init(); // loads data (possible optimizations)
@@ -110,35 +111,6 @@ abstract class User extends cmdbAbstractObject
abstract public function CanChangePassword();
abstract public function ChangePassword($sOldPassword, $sNewPassword);
/*
* Compute a name in best effort mode
*/
public function GetFriendlyName()
{
if (!MetaModel::IsValidAttCode(get_class($this), 'contactid'))
{
return $this->Get('login');
}
if ($this->Get('contactid') != 0)
{
$sFirstName = $this->Get('first_name');
$sLastName = $this->Get('last_name');
$sEmail = $this->Get('email');
if (strlen($sFirstName) > 0)
{
return "$sFirstName $sLastName";
}
elseif (strlen($sEmail) > 0)
{
return "$sLastName <$sEmail>";
}
else
{
return $sLastName;
}
}
}
/*
* Overload the standard behavior
*/
@@ -338,6 +310,15 @@ class UserRights
return $bRes;
}
// Installation (e.g: give default values for users)
public static function Setup()
{
// to be discussed...
$bRes = self::$m_oAddOn->Setup();
self::FlushPrivileges(true /* reset admin cache */);
return $bRes;
}
protected static function IsLoggedIn()
{
if (self::$m_oUser == null)
@@ -391,11 +372,6 @@ class UserRights
public static function CanChangePassword()
{
if (MetaModel::DBIsReadOnly())
{
return false;
}
if (!is_null(self::$m_oUser))
{
return self::$m_oUser->CanChangePassword();
@@ -418,25 +394,16 @@ class UserRights
}
}
public static function ChangePassword($sOldPassword, $sNewPassword, $sName = '')
public static function ChangePassword($sCurrentPassword, $sNewPassword)
{
if (empty($sName))
if (!is_null(self::$m_oUser))
{
$oUser = self::$m_oUser;
return self::$m_oUser->ChangePassword($sCurrentPassword, $sNewPassword);
}
else
{
// find the id out of the login string
$oUser = self::FindUser($sName);
}
if (is_null($oUser))
{
return false;
}
else
{
return $oUser->ChangePassword($sOldPassword, $sNewPassword);
}
}
public static function Impersonate($sName, $sPassword)
@@ -471,18 +438,6 @@ class UserRights
}
}
public static function GetUserObject()
{
if (is_null(self::$m_oUser))
{
return null;
}
else
{
return self::$m_oUser;
}
}
public static function GetUserLanguage()
{
if (is_null(self::$m_oUser))
@@ -533,31 +488,9 @@ class UserRights
{
return '';
}
if (!MetaModel::IsValidAttCode(get_class($oUser), 'contactid'))
{
return '';
}
return $oUser->Get('contactid');
}
// Render the user name in best effort mode
public static function GetUserFriendlyName($sName = '')
{
if (empty($sName))
{
$oUser = self::$m_oUser;
}
else
{
$oUser = FindUser($sName);
}
if (is_null($oUser))
{
return '';
}
return $oUser->GetFriendlyName();
}
public static function IsImpersonated()
{
if (is_null(self::$m_oRealUser))
@@ -585,15 +518,6 @@ class UserRights
return self::$m_oRealUser->GetKey();
}
public static function GetRealUserFriendlyName()
{
if (is_null(self::$m_oRealUser))
{
return '';
}
return self::$m_oRealUser->GetFriendlyName();
}
protected static function CheckLogin()
{
if (!self::IsLoggedIn())
@@ -628,14 +552,6 @@ class UserRights
// When initializing, we need to let everything pass trough
if (!self::CheckLogin()) return true;
if (MetaModel::DBIsReadOnly())
{
if ($iActionCode == UR_ACTION_MODIFY) return false;
if ($iActionCode == UR_ACTION_DELETE) return false;
if ($iActionCode == UR_ACTION_BULK_MODIFY) return false;
if ($iActionCode == UR_ACTION_BULK_DELETE) return false;
}
if (self::IsAdministrator($oUser)) return true;
if (MetaModel::HasCategory($sClass, 'bizmodel'))
@@ -666,14 +582,6 @@ class UserRights
// When initializing, we need to let everything pass trough
if (!self::CheckLogin()) return true;
if (MetaModel::DBIsReadOnly())
{
if ($iActionCode == UR_ACTION_MODIFY) return false;
if ($iActionCode == UR_ACTION_DELETE) return false;
if ($iActionCode == UR_ACTION_BULK_MODIFY) return false;
if ($iActionCode == UR_ACTION_BULK_DELETE) return false;
}
if (self::IsAdministrator($oUser)) return true;
if (MetaModel::HasCategory($sClass, 'bizmodel'))
@@ -696,14 +604,6 @@ class UserRights
// When initializing, we need to let everything pass trough
if (!self::CheckLogin()) return true;
if (MetaModel::DBIsReadOnly())
{
if ($iActionCode == UR_ACTION_MODIFY) return false;
if ($iActionCode == UR_ACTION_DELETE) return false;
if ($iActionCode == UR_ACTION_BULK_MODIFY) return false;
if ($iActionCode == UR_ACTION_BULK_DELETE) return false;
}
if (self::IsAdministrator($oUser)) return true;
// this module is forbidden for non admins

View File

@@ -51,23 +51,25 @@ abstract class ValueSetDefinition
}
public function GetValues($aArgs, $sContains = '')
public function GetValues($aArgs, $sBeginsWith = '')
{
if (!$this->m_bIsLoaded)
{
$this->LoadValues($aArgs);
$this->m_bIsLoaded = true;
}
if (strlen($sContains) == 0)
if (strlen($sBeginsWith) == 0)
{
$aRet = $this->m_aValues;
}
else
{
$iCheckedLen = strlen($sBeginsWith);
$sBeginsWith = strtolower($sBeginsWith);
$aRet = array();
foreach ($this->m_aValues as $sKey=>$sValue)
{
if (stripos($sValue, $sContains) !== false)
if (strtolower(substr($sValue, 0, $iCheckedLen)) == $sBeginsWith)
{
$aRet[$sKey] = $sValue;
}

View File

@@ -807,14 +807,6 @@ div#logo div {
background: url(../images/banner-bkg.png) repeat-x scroll 0 0 transparent;
text-align: right;
}
#admin-banner {
float: left;
margin-top: 2px;
padding: 8px;
border: 1px solid #c33;
background-color: #fee;
-moz-border-radius: 0.5em;
}
#global-search {
height: 55px;
float: right;
@@ -894,26 +886,4 @@ tr.row_modified td {
tr.row_added td {
border-bottom: 1px #ccc solid;
padding: 2px;
}
a.truncated {
cursor: pointer;
}
.org_combo
{
font-size:x-small;
width: auto;
max-width: 200px;
}
span.form_validation {
width:24px;
text-align:center;
}
.notification {
border: 1px solid #c33;
background-color: #fee;
padding: 0.5em;
margin: 0.5em;
text-align:center;
width: 95%;
-moz-border-radius: 0.5em;
}
}

View File

@@ -33,102 +33,6 @@
// Class: CMDBChange
//
Dict::Add('DE DE', 'English', 'English', array(
'Core:AttributeLinkedSet' => 'Array of objects',
'Core:AttributeLinkedSet+' => 'Any kind of objects [subclass] of the same class',
'Core:AttributeLinkedSetIndirect' => 'Array of objects (N-N)',
'Core:AttributeLinkedSetIndirect+' => 'Any kind of objects [subclass] of the same class',
'Core:AttributeInteger' => 'Integer',
'Core:AttributeInteger+' => 'Numeric value (could be negative)',
'Core:AttributeDecimal' => 'Decimal',
'Core:AttributeDecimal+' => 'Decimal value (could be negative)',
'Core:AttributeBoolean' => 'Boolean',
'Core:AttributeBoolean+' => 'Boolean',
'Core:AttributeString' => 'String',
'Core:AttributeString+' => 'Alphanumeric string',
'Core:AttributeClass' => 'Class',
'Core:AttributeClass+' => 'Class',
'Core:AttributeApplicationLanguage' => 'User language',
'Core:AttributeApplicationLanguage+' => 'Language and country (EN US)',
'Core:AttributeFinalClass' => 'Class (auto)',
'Core:AttributeFinalClass+' => 'Real class of the object (automatically created by the core)',
'Core:AttributePassword' => 'Password',
'Core:AttributePassword+' => 'Password of an external device',
'Core:AttributeEncryptedString' => 'Encrypted string',
'Core:AttributeEncryptedString+' => 'String encrypted with a local key',
'Core:AttributeText' => 'Text',
'Core:AttributeText+' => 'Multiline character string',
'Core:AttributeHTML' => 'HTML',
'Core:AttributeHTML+' => 'HTML string',
'Core:AttributeEmailAddress' => 'Email address',
'Core:AttributeEmailAddress+' => 'Email address',
'Core:AttributeIPAddress' => 'IP address',
'Core:AttributeIPAddress+' => 'IP address',
'Core:AttributeOQL' => 'OQL',
'Core:AttributeOQL+' => 'Object Query Langage expression',
'Core:AttributeEnum' => 'Enum',
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
'Core:AttributeTemplateString' => 'Template string',
'Core:AttributeTemplateString+' => 'String containing placeholders',
'Core:AttributeTemplateText' => 'Template text',
'Core:AttributeTemplateText+' => 'Text containing placeholders',
'Core:AttributeTemplateHTML' => 'Template HTML',
'Core:AttributeTemplateHTML+' => 'HTML containing placeholders',
'Core:AttributeWikiText' => 'Wiki article',
'Core:AttributeWikiText+' => 'Wiki formatted text',
'Core:AttributeDateTime' => 'Date/time',
'Core:AttributeDateTime+' => 'Date and time (year-month-day hh:mm:ss)',
'Core:AttributeDate' => 'Date',
'Core:AttributeDate+' => 'Date (year-month-day)',
'Core:AttributeDeadline' => 'Deadline',
'Core:AttributeDeadline+' => 'Date, displayed relatively to the current time',
'Core:AttributeExternalKey' => 'External key',
'Core:AttributeExternalKey+' => 'External (or foreign) key',
'Core:AttributeExternalField' => 'External field',
'Core:AttributeExternalField+' => 'Field mapped from an external key',
'Core:AttributeURL' => 'URL',
'Core:AttributeURL+' => 'Absolute or relative URL as a text string',
'Core:AttributeBlob' => 'Blob',
'Core:AttributeBlob+' => 'Any binary content (document)',
'Core:AttributeOneWayPassword' => 'One way password',
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
'Core:AttributeTable' => 'Table',
'Core:AttributeTable+' => 'Indexed array having two dimensions',
'Core:AttributePropertySet' => 'Properties',
'Core:AttributePropertySet+' => 'List of untyped properties (name and value)',
));
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:CMDBChange' => 'Change',
'Class:CMDBChange+' => 'Protokllierung der Changes',
@@ -203,8 +107,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
// Used by CMDBChangeOp... & derived classes
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Change:ObjectCreated' => 'Objekt erstellt',
'Change:ObjectDeleted' => 'Object deleted',
'Change:ObjectModified' => 'Object modified',
'Change:ObjectDeleted' => 'Objekt erstellt',
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s geändert zu %2$s (vorheriger Wert: %3$s)',
'Change:Text_AppendedTo_AttName' => '%1$s zugefügt an %2$s',
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modifiziert, vorheriger Wert: %2$s',

View File

@@ -439,12 +439,6 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'UI:History:User+' => 'Benutzer, der die Änderung durchführte',
'UI:History:Changes' => 'Änderungen',
'UI:History:Changes+' => 'Änderungen, die am Objekt durchgeführt wurden',
'UI:History:StatsCreations' => 'Created',
'UI:History:StatsCreations+' => 'Count of objects created',
'UI:History:StatsModifs' => 'Modified',
'UI:History:StatsModifs+' => 'Count of objects modified',
'UI:History:StatsDeletes' => 'Deleted',
'UI:History:StatsDeletes+' => 'Count of objects deleted',
'UI:Loading' => 'Laden...',
'UI:Menu:Actions' => 'Aktionen',
'UI:Menu:New' => 'Neu...',
@@ -487,8 +481,6 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'UI:LogOff:ThankYou' => 'Vielen Dank dafür, dass Sie iTop benutzen!',
'UI:LogOff:ClickHereToLoginAgain' => 'Klicken Sie hier, um sich wieder anzumelden...',
'UI:ChangePwdMenu' => 'Passwort ändern...',
'UI:AccessRO-All' => 'iTop is read-only',
'UI:AccessRO-Users' => 'iTop is read-only for end-users',
'UI:Login:RetypePwdDoesNotMatch' => 'Neues Passwort und das wiederholte Passwort entsprechen nicht überein!',
'UI:Button:Login' => 'iTop betreten',
'UI:Login:Error:AccessRestricted' => 'Der iTop-Zugang ist gesperrt. Bitte kontaktieren Sie einen iTop-Administrator.',

View File

@@ -23,101 +23,6 @@
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
Dict::Add('EN US', 'English', 'English', array(
'Core:AttributeLinkedSet' => 'Array of objects',
'Core:AttributeLinkedSet+' => 'Any kind of objects of the same class or subclass',
'Core:AttributeLinkedSetIndirect' => 'Array of objects (N-N)',
'Core:AttributeLinkedSetIndirect+' => 'Any kind of objects [subclass] of the same class',
'Core:AttributeInteger' => 'Integer',
'Core:AttributeInteger+' => 'Numeric value (could be negative)',
'Core:AttributeDecimal' => 'Decimal',
'Core:AttributeDecimal+' => 'Decimal value (could be negative)',
'Core:AttributeBoolean' => 'Boolean',
'Core:AttributeBoolean+' => 'Boolean',
'Core:AttributeString' => 'String',
'Core:AttributeString+' => 'Alphanumeric string',
'Core:AttributeClass' => 'Class',
'Core:AttributeClass+' => 'Class',
'Core:AttributeApplicationLanguage' => 'User language',
'Core:AttributeApplicationLanguage+' => 'Language and country (EN US)',
'Core:AttributeFinalClass' => 'Class (auto)',
'Core:AttributeFinalClass+' => 'Real class of the object (automatically created by the core)',
'Core:AttributePassword' => 'Password',
'Core:AttributePassword+' => 'Password of an external device',
'Core:AttributeEncryptedString' => 'Encrypted string',
'Core:AttributeEncryptedString+' => 'String encrypted with a local key',
'Core:AttributeText' => 'Text',
'Core:AttributeText+' => 'Multiline character string',
'Core:AttributeHTML' => 'HTML',
'Core:AttributeHTML+' => 'HTML string',
'Core:AttributeEmailAddress' => 'Email address',
'Core:AttributeEmailAddress+' => 'Email address',
'Core:AttributeIPAddress' => 'IP address',
'Core:AttributeIPAddress+' => 'IP address',
'Core:AttributeOQL' => 'OQL',
'Core:AttributeOQL+' => 'Object Query Langage expression',
'Core:AttributeEnum' => 'Enum',
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
'Core:AttributeTemplateString' => 'Template string',
'Core:AttributeTemplateString+' => 'String containing placeholders',
'Core:AttributeTemplateText' => 'Template text',
'Core:AttributeTemplateText+' => 'Text containing placeholders',
'Core:AttributeTemplateHTML' => 'Template HTML',
'Core:AttributeTemplateHTML+' => 'HTML containing placeholders',
'Core:AttributeWikiText' => 'Wiki article',
'Core:AttributeWikiText+' => 'Wiki formatted text',
'Core:AttributeDateTime' => 'Date/time',
'Core:AttributeDateTime+' => 'Date and time (year-month-day hh:mm:ss)',
'Core:AttributeDate' => 'Date',
'Core:AttributeDate+' => 'Date (year-month-day)',
'Core:AttributeDeadline' => 'Deadline',
'Core:AttributeDeadline+' => 'Date, displayed relatively to the current time',
'Core:AttributeExternalKey' => 'External key',
'Core:AttributeExternalKey+' => 'External (or foreign) key',
'Core:AttributeExternalField' => 'External field',
'Core:AttributeExternalField+' => 'Field mapped to an external key',
'Core:AttributeURL' => 'URL',
'Core:AttributeURL+' => 'Absolute or relative URL as a text string',
'Core:AttributeBlob' => 'Blob',
'Core:AttributeBlob+' => 'Any binary content (document)',
'Core:AttributeOneWayPassword' => 'One way password',
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
'Core:AttributeTable' => 'Table',
'Core:AttributeTable+' => 'Indexed array having two dimensions',
'Core:AttributePropertySet' => 'Properties',
'Core:AttributePropertySet+' => 'List of untyped properties (name and value)',
));
//////////////////////////////////////////////////////////////////////
// Classes in 'core/cmdb'
@@ -203,7 +108,6 @@ Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', array(
'Change:ObjectCreated' => 'Object created',
'Change:ObjectDeleted' => 'Object deleted',
'Change:ObjectModified' => 'Object modified',
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s set to %2$s (previous value: %3$s)',
'Change:Text_AppendedTo_AttName' => '%1$s appended to %2$s',
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modified, previous value: %2$s',

View File

@@ -336,7 +336,6 @@ Dict::Add('EN US', 'English', 'English', array(
'UI:Button:Cancel' => 'Cancel',
'UI:Button:Apply' => 'Apply',
'UI:Button:Back' => ' << Back ',
'UI:Button:Restart' => ' |<< Restart ',
'UI:Button:Next' => ' Next >> ',
'UI:Button:Finish' => ' Finish ',
'UI:Button:DoImport' => ' Run the Import ! ',
@@ -399,21 +398,12 @@ Dict::Add('EN US', 'English', 'English', array(
'UI:History:LastModified_On_By' => 'Last modified on %1$s by %2$s.',
'UI:HistoryTab' => 'History',
'UI:NotificationsTab' => 'Notifications',
'UI:History:BulkImports' => 'History',
'UI:History:BulkImports+' => 'List of CSV imports (last first)',
'UI:History:BulkImportDetails' => 'Changes resulting from the CSV import performed on %1$s (by %2$s)',
'UI:History:Date' => 'Date',
'UI:History:Date+' => 'Date of the change',
'UI:History:User' => 'User',
'UI:History:User+' => 'User who made the change',
'UI:History:Changes' => 'Changes',
'UI:History:Changes+' => 'Changes made to the object',
'UI:History:StatsCreations' => 'Created',
'UI:History:StatsCreations+' => 'Count of objects created',
'UI:History:StatsModifs' => 'Modified',
'UI:History:StatsModifs+' => 'Count of objects modified',
'UI:History:StatsDeletes' => 'Deleted',
'UI:History:StatsDeletes+' => 'Count of objects deleted',
'UI:Loading' => 'Loading...',
'UI:Menu:Actions' => 'Actions',
'UI:Menu:New' => 'New...',
@@ -456,8 +446,6 @@ Dict::Add('EN US', 'English', 'English', array(
'UI:LogOff:ThankYou' => 'Thank you for using iTop',
'UI:LogOff:ClickHereToLoginAgain' => 'Click here to login again...',
'UI:ChangePwdMenu' => 'Change Password...',
'UI:AccessRO-All' => 'iTop is read-only',
'UI:AccessRO-Users' => 'iTop is read-only for end-users',
'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match !',
'UI:Button:Login' => 'Enter iTop',
'UI:Login:Error:AccessRestricted' => 'iTop access is restricted. Please, contact an iTop administrator.',
@@ -473,7 +461,6 @@ Dict::Add('EN US', 'English', 'English', array(
'UI:CSVImport:idField' => 'id (Primary Key)',
'UI:Title:BulkImport' => 'iTop - Bulk import',
'UI:Title:BulkImport+' => 'CSV Import Wizard',
'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Synchronization of %1$d objects of class %2$s',
'UI:CSVImport:ClassesSelectOne' => '-- select one --',
'UI:CSVImport:ErrorExtendedAttCode' => 'Internal error: "%1$s" is an incorrect code because "%2$s" is NOT an external key of the class "%3$s"',
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objects(s) will stay unchanged.',
@@ -855,7 +842,6 @@ When associated with a trigger, each action is given an "order" number, specifyi
'UI:DisplayThisMessageAtStartup' => 'Display this message at startup',
'UI:RelationshipGraph' => 'Graphical view',
'UI:RelationshipList' => 'List',
'UI:OperationCancelled' => 'Operation Cancelled',
'Portal:Title' => 'iTop user portal',
'Portal:Refresh' => 'Refresh',
@@ -875,10 +861,7 @@ When associated with a trigger, each action is given an "order" number, specifyi
'Portal:Button:CloseTicket' => 'Close this ticket',
'Portal:EnterYourCommentsOnTicket' => 'Enter your comments about the resolution of this ticket:',
'Portal:ErrorNoContactForThisUser' => 'Error: the current user is not associated with a Contact/Person. Please contact your administrator.',
'Portal:Attachments' => 'Attachments',
'Portal:AddAttachment' => ' Add Attachment ',
'Portal:RemoveAttachment' => ' Remove Attachment ',
'Portal:Attachment_No_To_Ticket_Name' => 'Attachment #%1$d to %2$s (%3$s)',
'Enum:Undefined' => 'Undefined',
));

View File

@@ -29,102 +29,6 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('ES CR', 'English', 'English', array(
'Core:AttributeLinkedSet' => 'Array of objects',
'Core:AttributeLinkedSet+' => 'Any kind of objects [subclass] of the same class',
'Core:AttributeLinkedSetIndirect' => 'Array of objects (N-N)',
'Core:AttributeLinkedSetIndirect+' => 'Any kind of objects [subclass] of the same class',
'Core:AttributeInteger' => 'Integer',
'Core:AttributeInteger+' => 'Numeric value (could be negative)',
'Core:AttributeDecimal' => 'Decimal',
'Core:AttributeDecimal+' => 'Decimal value (could be negative)',
'Core:AttributeBoolean' => 'Boolean',
'Core:AttributeBoolean+' => 'Boolean',
'Core:AttributeString' => 'String',
'Core:AttributeString+' => 'Alphanumeric string',
'Core:AttributeClass' => 'Class',
'Core:AttributeClass+' => 'Class',
'Core:AttributeApplicationLanguage' => 'User language',
'Core:AttributeApplicationLanguage+' => 'Language and country (EN US)',
'Core:AttributeFinalClass' => 'Class (auto)',
'Core:AttributeFinalClass+' => 'Real class of the object (automatically created by the core)',
'Core:AttributePassword' => 'Password',
'Core:AttributePassword+' => 'Password of an external device',
'Core:AttributeEncryptedString' => 'Encrypted string',
'Core:AttributeEncryptedString+' => 'String encrypted with a local key',
'Core:AttributeText' => 'Text',
'Core:AttributeText+' => 'Multiline character string',
'Core:AttributeHTML' => 'HTML',
'Core:AttributeHTML+' => 'HTML string',
'Core:AttributeEmailAddress' => 'Email address',
'Core:AttributeEmailAddress+' => 'Email address',
'Core:AttributeIPAddress' => 'IP address',
'Core:AttributeIPAddress+' => 'IP address',
'Core:AttributeOQL' => 'OQL',
'Core:AttributeOQL+' => 'Object Query Langage expression',
'Core:AttributeEnum' => 'Enum',
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
'Core:AttributeTemplateString' => 'Template string',
'Core:AttributeTemplateString+' => 'String containing placeholders',
'Core:AttributeTemplateText' => 'Template text',
'Core:AttributeTemplateText+' => 'Text containing placeholders',
'Core:AttributeTemplateHTML' => 'Template HTML',
'Core:AttributeTemplateHTML+' => 'HTML containing placeholders',
'Core:AttributeWikiText' => 'Wiki article',
'Core:AttributeWikiText+' => 'Wiki formatted text',
'Core:AttributeDateTime' => 'Date/time',
'Core:AttributeDateTime+' => 'Date and time (year-month-day hh:mm:ss)',
'Core:AttributeDate' => 'Date',
'Core:AttributeDate+' => 'Date (year-month-day)',
'Core:AttributeDeadline' => 'Deadline',
'Core:AttributeDeadline+' => 'Date, displayed relatively to the current time',
'Core:AttributeExternalKey' => 'External key',
'Core:AttributeExternalKey+' => 'External (or foreign) key',
'Core:AttributeExternalField' => 'External field',
'Core:AttributeExternalField+' => 'Field mapped from an external key',
'Core:AttributeURL' => 'URL',
'Core:AttributeURL+' => 'Absolute or relative URL as a text string',
'Core:AttributeBlob' => 'Blob',
'Core:AttributeBlob+' => 'Any binary content (document)',
'Core:AttributeOneWayPassword' => 'One way password',
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
'Core:AttributeTable' => 'Table',
'Core:AttributeTable+' => 'Indexed array having two dimensions',
'Core:AttributePropertySet' => 'Properties',
'Core:AttributePropertySet+' => 'List of untyped properties (name and value)',
));
//
// Class: CMDBChange
//

View File

@@ -304,498 +304,494 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Menu:WelcomeMenuPage+' => 'Bienvenido a iTop',
'UI:WelcomeMenu:Title' => 'Bienvenido a iTop',
'UI:WelcomeMenu:LeftBlock' => '<p>iTop es un completo; portal IT funcional basado en código abierto (OpenSource).</p>
'UI:WelcomeMenu:LeftBlock' => '<p>iTop es un completo; portal IT funcioanl basado en código abierto (OpenSource).</p>
<ul>Incluye:
<li>Una CMDB competa (Configuration management database) para documentar y manejar el inverntario de TI..</li>
<li>Un módul de gestión de incidentes, para llevar la trazabilidad y comunicar los eventos que estan afectando IT.</li>
<li>Un módulo de gestion de cambio para planear y llevar la trazabilidad de cambios hechos al ambiente de TI.</li>
<li>Un módulo de gestion de cambio para planear y llevar la trazabilidad hechos al ambiente de TI.</li>
<li>Una base de conocimiento para acelerar la correción de incidentes.</li>
<li>Un moódulo de Cortes/Caídas para documentar todas las caídas planeadas o no y notificar a los contactods del caso.</li>
<li>Tableros de controles para rapidamente tener visión general del ambiente TI..</li>
</ul>
<p>Todos los modulos pueden ser configurados, paso a paso, individual e independientemente de los otros.</p>',
<p>All the modules can be setup, step by step, indepently of each other.</p>',
'UI:WelcomeMenu:RightBlock' => '<p>iTop esta orientada a los proveedores de servicios, le permite a los Ingenieros de TI administrar facilmente multiples clientes y organizaciones.
<ul>iTop, provee un conjunto de funciones de procesos de negocio que:
<li>Mejora Enhances IT management effectiveness</li>
<li>Dirige el desempeño de la operaciones de TI</li>
<li>Incrementa la satisfaccion del cliente y provee a los ejecutivos con detalles del desempeño del negocio.</li>
'UI:WelcomeMenu:RightBlock' => '<p>iTop is service provider oriented, it allows IT engineers to manage easily multiple customers or organizations.
<ul>iTop, delivers a feature-rich set of business processes that:
<li>Enhances IT management effectiveness</li>
<li>Drives IT operations performance</li>
<li>Improves customer satisfaction and provides executives with insights into business performance.</li>
</ul>
</p>
<p>iTop es completamente abierto para ser integrado con su actual infraestructura de Gestion de TI.</p>
<p>iTop is completely opened to be integrated within your current IT Management infrastructure.</p>
<p>
<ul>Adoptar esta nueva generacion de portales de operaciones de TI le ayudara a:
<li>Mejorar gestion de entornos de TI mas y mas complejos.</li>
<li>Implementar los procesos de ITIL a su propio ritmo.</li>
<li>Administrar el bien mas importante de su TI: Documentacion.</li>
<ul>Adopting this new generation of IT Operational portal will help you to:
<li>Better manage a more and more complex IT environment.</li>
<li>Implement ITIL processes at your own pace.</li>
<li>Manage the most important asset of your IT: Documentation.</li>
</ul>
</p>',
'UI:WelcomeMenu:MyCalls' => 'Mis solicitudes',
'UI:WelcomeMenu:MyIncidents' => 'Incidentes asignados a mi',
'UI:AllOrganizations' => ' Todas las Organizaciones',
'UI:YourSearch' => 'Su busqueda',
'UI:LoggedAsMessage' => 'Conectado como %1$s',
'UI:LoggedAsMessage+Admin' => 'Conectado como %1$s (Administrator)',
'UI:Button:Logoff' => 'Cerrar sesion',
'UI:Button:GlobalSearch' => 'Buscar',
'UI:Button:Search' => ' Buscar ',
'UI:Button:Query' => ' Consulta ',
'UI:WelcomeMenu:MyCalls' => 'My requests',
'UI:WelcomeMenu:MyIncidents' => 'Incidents assigned to me',
'UI:AllOrganizations' => ' All Organizations ',
'UI:YourSearch' => 'Your Search',
'UI:LoggedAsMessage' => 'Logged in as %1$s',
'UI:LoggedAsMessage+Admin' => 'Logged in as %1$s (Administrator)',
'UI:Button:Logoff' => 'Log off',
'UI:Button:GlobalSearch' => 'Search',
'UI:Button:Search' => ' Search ',
'UI:Button:Query' => ' Query ',
'UI:Button:Ok' => 'Ok',
'UI:Button:Cancel' => 'Cancelar',
'UI:Button:Apply' => 'Aplicar',
'UI:Button:Back' => ' << Anterior ',
'UI:Button:Next' => ' Siguiente >> ',
'UI:Button:Finish' => ' Finalizar ',
'UI:Button:DoImport' => ' Importar los datos ! ',
'UI:Button:Done' => ' Listo ',
'UI:Button:SimulateImport' => ' Simular la Importacion ',
'UI:Button:Test' => 'Probar!',
'UI:Button:Evaluate' => ' Evaluar ',
'UI:Button:AddObject' => ' Agregar... ',
'UI:Button:BrowseObjects' => ' Examinar... ',
'UI:Button:Add' => ' agregar ',
'UI:Button:AddToList' => ' << Agregar ',
'UI:Button:RemoveFromList' => ' Remover >> ',
'UI:Button:FilterList' => ' Filtrar... ',
'UI:Button:Create' => ' Crear ',
'UI:Button:Delete' => ' Borrar! ',
'UI:Button:ChangePassword' => ' Cambiar Contraseña',
'UI:Button:ResetPassword' => ' Restablecer Contraseña',
'UI:Button:Cancel' => 'Cancel',
'UI:Button:Apply' => 'Apply',
'UI:Button:Back' => ' << Back ',
'UI:Button:Next' => ' Next >> ',
'UI:Button:Finish' => ' Finish ',
'UI:Button:DoImport' => ' Run the Import ! ',
'UI:Button:Done' => ' Done ',
'UI:Button:SimulateImport' => ' Simulate the Import ',
'UI:Button:Test' => 'Test!',
'UI:Button:Evaluate' => ' Evaluate ',
'UI:Button:AddObject' => ' Add... ',
'UI:Button:BrowseObjects' => ' Browse... ',
'UI:Button:Add' => ' Add ',
'UI:Button:AddToList' => ' << Add ',
'UI:Button:RemoveFromList' => ' Remove >> ',
'UI:Button:FilterList' => ' Filter... ',
'UI:Button:Create' => ' Create ',
'UI:Button:Delete' => ' Delete ! ',
'UI:Button:ChangePassword' => ' Change Password ',
'UI:Button:ResetPassword' => ' Reset Password ',
'UI:SearchToggle' => 'Buscar',
'UI:SearchToggle' => 'Search',
'UI:ClickToCreateNew' => 'Crear un nuevo %1$s',
'UI:SearchFor_Class' => 'Buscar %1$s objetos',
'UI:NoObjectToDisplay' => 'Ningún objeto para visualizar.',
'UI:Error:MandatoryTemplateParameter_object_id' => 'El parametro object_id es obligatorio cuando link_attr es especificado. Verifique la definicion de la plantilla de visualizacion.',
'UI:Error:MandatoryTemplateParameter_target_attr' => 'El parametro target_attr es obligatorio cuando link_attr es especificado. Verifique la definicion de la plantilla de visualizacion.',
'UI:Error:MandatoryTemplateParameter_group_by' => 'El parametro group_by es obligatorio. Verifique la definicion de la plantilla de visualizacion.',
'UI:Error:InvalidGroupByFields' => 'La lista de campos para agrupar por: "%1$s" es invalida.',
'UI:Error:UnsupportedStyleOfBlock' => 'Error: Estilo de bloque no soportado: "%1$s".',
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Definicio de vinculo incorrecto: la clase de objeto a administrar : %1$s no fue encontrada como clave externa en la clase %2$s',
'UI:Error:Object_Class_Id_NotFound' => 'No se encontro el objeto: %1$s:%2$d.',
'UI:Error:WizardCircularReferenceInDependencies' => 'Error: Verifique el modelo de datos, Existen referencias cisculares en la dependencias entre los campos.',
'UI:Error:UploadedFileTooBig' => 'archivo cargado es muy grande. (tamaño maximo permitido es de %1$s. Verifique su configuracion de PHP para upload_max_filesize.',
'UI:Error:UploadedFileTruncated.' => 'El archivo cargado ha sido truncado!',
'UI:Error:NoTmpDir' => 'El directorio temporal no ha sido definido.',
'UI:Error:CannotWriteToTmp_Dir' => 'No fue posible escribir el archivo temporal al disco. upload_tmp_dir = "%1$s".',
'UI:Error:UploadStoppedByExtension_FileName' => 'Carga de archivo interrumpida por la extension. (Nombre de archivo original = "%1$s").',
'UI:Error:UploadFailedUnknownCause_Code' => 'Carga de archivo fallida, causa desconocida. (Codigo de error = "%1$s").',
'UI:Error:MandatoryTemplateParameter_object_id' => 'Parameter object_id is mandatory when link_attr is specified. Check the definition of the display template.',
'UI:Error:MandatoryTemplateParameter_target_attr' => 'Parameter target_attr is mandatory when link_attr is specified. Check the definition of the display template.',
'UI:Error:MandatoryTemplateParameter_group_by' => 'Parameter group_by is mandatory. Check the definition of the display template.',
'UI:Error:InvalidGroupByFields' => 'Invalid list of fields to group by: "%1$s".',
'UI:Error:UnsupportedStyleOfBlock' => 'Error: unsupported style of block: "%1$s".',
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Incorrect link definition: the class of objects to manage: %1$s was not found as an external key in the class %2$s',
'UI:Error:Object_Class_Id_NotFound' => 'Object: %1$s:%2$d not found.',
'UI:Error:WizardCircularReferenceInDependencies' => 'Error: Circular reference in the dependencies between the fields, check the data model.',
'UI:Error:UploadedFileTooBig' => 'Uploaded file is too big. (Max allowed size is %1$s. Check you PHP configuration for upload_max_filesize and post_max_size.',
'UI:Error:UploadedFileTruncated.' => 'Uploaded file has been truncated !',
'UI:Error:NoTmpDir' => 'The temporary directory is not defined.',
'UI:Error:CannotWriteToTmp_Dir' => 'Unable to write the temporary file to the disk. upload_tmp_dir = "%1$s".',
'UI:Error:UploadStoppedByExtension_FileName' => 'Upload stopped by extension. (Original file name = "%1$s").',
'UI:Error:UploadFailedUnknownCause_Code' => 'File upload failed, unknown cause. (Error code = "%1$s").',
'UI:Error:1ParametersMissing' => 'Error: El siguiente parametro debe ser especificado para esta operacion: %1$s.',
'UI:Error:2ParametersMissing' => 'Error: Los siguientes parametros deben ser especificados para esta operacion: %1$s and %2$s.',
'UI:Error:3ParametersMissing' => 'Error: Los siguientes parametros deben ser especificados para esta operacion: %1$s, %2$s and %3$s.',
'UI:Error:4ParametersMissing' => 'Error: Los siguientes parametros deben ser especificados para esta operacion: %1$s, %2$s, %3$s and %4$s.',
'UI:Error:IncorrectOQLQuery_Message' => 'Error: Consulta OQL incorrecta: %1$s',
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Se ha producido un error al ejecutar la consulta: %1$s',
'UI:Error:ObjectAlreadyUpdated' => 'Error: el objeta ha sido previamente actualizado.',
'UI:Error:ObjectCannotBeUpdated' => 'Error: el objeto no puede ser actualizado.',
'UI:Error:ObjectsAlreadyDeleted' => 'Error: los objetos ya han sido borrados!',
'UI:Error:BulkDeleteNotAllowedOn_Class' => 'No esta autorizado a borrar un lote de de objetos de la clase %1$s',
'UI:Error:DeleteNotAllowedOn_Class' => 'No esta autorizado a borrar objetos del la clase %1$s',
'UI:Error:BulkModifyNotAllowedOn_Class' => 'No esta autorizado a actualizar un lote de de objetos de la clase %1$s',
'UI:Error:ObjectAlreadyCloned' => 'Error: el objeto ha sido previamente duplicado!',
'UI:Error:ObjectAlreadyCreated' => 'Error: el objeto ha sido previamente creado!',
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Error: estimulo invalido "%1$s" en objeto %2$s en estado "%3$s".',
'UI:Error:1ParametersMissing' => 'Error: the following parameter must be specified for this operation: %1$s.',
'UI:Error:2ParametersMissing' => 'Error: the following parameters must be specified for this operation: %1$s and %2$s.',
'UI:Error:3ParametersMissing' => 'Error: the following parameters must be specified for this operation: %1$s, %2$s and %3$s.',
'UI:Error:4ParametersMissing' => 'Error: the following parameters must be specified for this operation: %1$s, %2$s, %3$s and %4$s.',
'UI:Error:IncorrectOQLQuery_Message' => 'Error: incorrect OQL query: %1$s',
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'An error occured while running the query: %1$s',
'UI:Error:ObjectAlreadyUpdated' => 'Error: the object has already been updated.',
'UI:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated.',
'UI:Error:ObjectsAlreadyDeleted' => 'Error: objects have already been deleted!',
'UI:Error:BulkDeleteNotAllowedOn_Class' => 'You are not allowed to perform a bulk delete of objects of class %1$s',
'UI:Error:DeleteNotAllowedOn_Class' => 'You are not allowed to delete objects of class %1$s',
'UI:Error:BulkModifyNotAllowedOn_Class' => 'You are not allowed to perform a bulk update of objects of class %1$s',
'UI:Error:ObjectAlreadyCloned' => 'Error: the object has already been cloned!',
'UI:Error:ObjectAlreadyCreated' => 'Error: the object has already been created!',
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Error: invalid stimulus "%1$s" on object %2$s in state "%3$s".',
'UI:GroupBy:Count' => 'Cuenta',
'UI:GroupBy:Count+' => 'Numero de elementoso',
'UI:CountOfObjects' => '%1$d objetos cumplen criterio.',
'UI_CountOfObjectsShort' => '%1$d objetos.',
'UI:NoObject_Class_ToDisplay' => 'No hay %1$s para mostrar',
'UI:History:LastModified_On_By' => 'Ultima modificacion el %1$s por %2$s.',
'UI:HistoryTab' => 'Historia',
'UI:History:Date' => 'Fecha',
'UI:History:Date+' => 'Fecha del Cambio',
'UI:History:User' => 'Usuario',
'UI:History:User+' => 'Usuario que hizo el cambio',
'UI:History:Changes' => 'Cambios',
'UI:History:Changes+' => 'Chambios hechos al objeto',
'UI:Loading' => 'Cargando...',
'UI:Menu:Actions' => 'Acciones',
'UI:Menu:New' => 'Nuevo...',
'UI:History:StatsCreations' => 'Created',
'UI:History:StatsCreations+' => 'Count of objects created',
'UI:History:StatsModifs' => 'Modified',
'UI:History:StatsModifs+' => 'Count of objects modified',
'UI:History:StatsDeletes' => 'Deleted',
'UI:History:StatsDeletes+' => 'Count of objects deleted',
'UI:GroupBy:Count' => 'Count',
'UI:GroupBy:Count+' => 'Number of elements',
'UI:CountOfObjects' => '%1$d objects matching the criteria.',
'UI_CountOfObjectsShort' => '%1$d objects.',
'UI:NoObject_Class_ToDisplay' => 'No %1$s to display',
'UI:History:LastModified_On_By' => 'Last modified on %1$s by %2$s.',
'UI:HistoryTab' => 'History',
'UI:History:Date' => 'Date',
'UI:History:Date+' => 'Date of the change',
'UI:History:User' => 'User',
'UI:History:User+' => 'User who made the change',
'UI:History:Changes' => 'Changes',
'UI:History:Changes+' => 'Changes made to the object',
'UI:Loading' => 'Loading...',
'UI:Menu:Actions' => 'Actions',
'UI:Menu:New' => 'New...',
'UI:Menu:Add' => 'Add...',
'UI:Menu:Manage' => 'Manage...',
'UI:Menu:EMail' => 'eMail',
'UI:Menu:CSVExport' => 'exportar a CSV',
'UI:Menu:Modify' => 'Modificar...',
'UI:Menu:Delete' => 'Borrar...',
'UI:Menu:Manage' => 'Administrar...',
'UI:Menu:BulkDelete' => 'Borrar...',
'UI:UndefinedObject' => 'indefinido',
'UI:Document:OpenInNewWindow:Download' => 'abrir en nueva ventana: %1$s, Descargar: %2$s',
'UI:SelectAllToggle+' => 'Seleccionar / Deseleccionar Todo',
'UI:TruncatedResults' => 'Mostrando %1$d objetos de %2$d',
'UI:DisplayAll' => 'Mostrar todo',
'UI:CountOfResults' => '%1$d objeto(s)',
'UI:ChangesLogTitle' => 'Registro de cambios (%1$d):',
'UI:EmptyChangesLogTitle' => 'Registro de cambios esta vacio',
'UI:Menu:CSVExport' => 'CSV Export',
'UI:Menu:Modify' => 'Modify...',
'UI:Menu:Delete' => 'Delete...',
'UI:Menu:Manage' => 'Manage...',
'UI:Menu:BulkDelete' => 'Delete...',
'UI:UndefinedObject' => 'undefined',
'UI:Document:OpenInNewWindow:Download' => 'Open in new window: %1$s, Download: %2$s',
'UI:SelectAllToggle+' => 'Select / Deselect All',
'UI:TruncatedResults' => '%1$d objects displayed out of %2$d',
'UI:DisplayAll' => 'Display All',
'UI:CountOfResults' => '%1$d object(s)',
'UI:ChangesLogTitle' => 'Changes log (%1$d):',
'UI:EmptyChangesLogTitle' => 'Changes log is empty',
'UI:SearchFor_Class_Objects' => 'Buscar %1$s objetos',
'UI:OQLQueryBuilderTitle' => 'Constructor de consultas OQL',
'UI:OQLQueryTab' => 'Consulta OQL',
'UI:SimpleSearchTab' => 'Busqueda simple',
'UI:Details+' => 'Detalles',
'UI:SearchValue:Any' => '* Cualquiera *',
'UI:SearchValue:Mixed' => '* mezclado *',
'UI:SelectOne' => '-- Seleccione uno --',
'UI:Login:Welcome' => 'Bienvenido a iTop!',
'UI:Login:IncorrectLoginPassword' => 'Usuario/Contraseña incorrecto, por favor intente otra vez.',
'UI:Login:IdentifyYourself' => 'Identifiquese antes de continuar',
'UI:Login:UserNamePrompt' => 'Nombre de Usuario',
'UI:Login:PasswordPrompt' => 'Contraseña',
'UI:Login:ChangeYourPassword' => 'Cambien su Contraseña',
'UI:Login:OldPasswordPrompt' => 'Contraseña Anterior',
'UI:Login:NewPasswordPrompt' => 'Contraseña Nueva',
'UI:Login:RetypeNewPasswordPrompt' => 'Reintroduzca Nueva contraseña',
'UI:Login:IncorrectOldPassword' => 'Error: la contraseña anterior es incorrecta',
'UI:LogOffMenu' => 'Cerrar sesion',
'UI:ChangePwdMenu' => 'Cambiar Contraseña...',
'UI:AccessRO-All' => 'iTop is read-only',
'UI:AccessRO-Users' => 'iTop is read-only for end-users',
'UI:Login:Error:AccessRestricted' => 'El acceso a iTop esta restringido. Por favor contacte al administrador de iTop.',
'UI:Login:Error:AccessAdmin' => 'Acceso restringido a usuarios con privilegio de administrador. Por favor contacte al administrador de iTop.',
'UI:CSVImport:MappingSelectOne' => '-- seleccione uno --',
'UI:CSVImport:MappingNotApplicable' => '-- ignore este campo --',
'UI:CSVImport:NoData' => 'Conjunto de datos vacio..., pro favor provea alguna data!',
'UI:Title:DataPreview' => 'Vista previa de datos',
'UI:CSVImport:ErrorOnlyOneColumn' => 'Error: La data solo contiene una columna. Selecciono el separador de campos adecuado?',
'UI:CSVImport:FieldName' => 'Campo %1$d',
'UI:CSVImport:DataLine1' => 'Linea de datos 1',
'UI:CSVImport:DataLine2' => 'Linea de datos 2',
'UI:CSVImport:idField' => 'id (Clave primaria)',
'UI:Title:BulkImport' => 'iTop - Importacion por lotes',
'UI:Title:BulkImport+' => 'Asistente de importar CSV',
'UI:CSVImport:ClassesSelectOne' => '-- seleccione uno --',
'UI:CSVImport:ErrorExtendedAttCode' => 'error interno: "%1$s" es un codigo incorrecto debido a que "%2$s" NO es una clave externa de la clase "%3$s"',
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objeto(s) permanecera sin cambio.',
'UI:CSVImport:ObjectsWillBeModified' => '%1$d objeto(s) sera modificado.',
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d objeto(s) sera agregado.',
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d objeto(s) tendra error.',
'UI:OQLQueryBuilderTitle' => 'OQL Query Builder',
'UI:OQLQueryTab' => 'OQL Query',
'UI:SimpleSearchTab' => 'Simple Search',
'UI:Details+' => 'Details',
'UI:SearchValue:Any' => '* Any *',
'UI:SearchValue:Mixed' => '* mixed *',
'UI:SelectOne' => '-- select one --',
'UI:Login:Welcome' => 'Welcome to iTop!',
'UI:Login:IncorrectLoginPassword' => 'Incorrect login/password, please try again.',
'UI:Login:IdentifyYourself' => 'Identify yourself before continuing',
'UI:Login:UserNamePrompt' => 'User Name',
'UI:Login:PasswordPrompt' => 'Password',
'UI:Login:ChangeYourPassword' => 'Change Your Password',
'UI:Login:OldPasswordPrompt' => 'Old password',
'UI:Login:NewPasswordPrompt' => 'New password',
'UI:Login:RetypeNewPasswordPrompt' => 'Retype new password',
'UI:Login:IncorrectOldPassword' => 'Error: the old password is incorrect',
'UI:LogOffMenu' => 'Log off',
'UI:ChangePwdMenu' => 'Change Password...',
'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match !',
'UI:Button:Login' => 'Enter iTop',
'UI:Login:Error:AccessRestricted' => 'iTop access is restricted. Please, contact an iTop administrator.',
'UI:Login:Error:AccessAdmin' => 'Access restricted to people having administrator privileges. Please, contact an iTop administrator.',
'UI:CSVImport:MappingSelectOne' => '-- select one --',
'UI:CSVImport:MappingNotApplicable' => '-- ignore this field --',
'UI:CSVImport:NoData' => 'Empty data set..., please provide some data!',
'UI:Title:DataPreview' => 'Data Preview',
'UI:CSVImport:ErrorOnlyOneColumn' => 'Error: The data contains only one column. Did you select the appropriate separator character?',
'UI:CSVImport:FieldName' => 'Field %1$d',
'UI:CSVImport:DataLine1' => 'Data Line 1',
'UI:CSVImport:DataLine2' => 'Data Line 2',
'UI:CSVImport:idField' => 'id (Primary Key)',
'UI:Title:BulkImport' => 'iTop - Bulk import',
'UI:Title:BulkImport+' => 'CSV Import Wizard',
'UI:CSVImport:ClassesSelectOne' => '-- select one --',
'UI:CSVImport:ErrorExtendedAttCode' => 'Internal error: "%1$s" is an incorrect code because "%2$s" is NOT an external key of the class "%3$s"',
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objects(s) will stay unchanged.',
'UI:CSVImport:ObjectsWillBeModified' => '%1$d objects(s) will be modified.',
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d objects(s) will be added.',
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d objects(s) will have errors.',
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d objects(s) remained unchanged.',
'UI:CSVImport:ObjectsWereModified' => '%1$d objeto(s) sera modificado.',
'UI:CSVImport:ObjectsWereAdded' => '%1$d objeto(s) fue agregado.',
'UI:CSVImport:ObjectsHadErrors' => '%1$d objeto(s) tuvo errores.',
'UI:Title:CSVImportStep2' => 'Paso 2 de 5: opciones de datos CSV',
'UI:Title:CSVImportStep3' => 'Paso 3 de 5: mapeo de datos',
'UI:Title:CSVImportStep4' => 'Paso 4 de 5: simular la importacion',
'UI:Title:CSVImportStep5' => 'Paso 5 de 5: importacion completada',
'UI:CSVImport:LinesNotImported' => 'Lineas que no pudieron ser cargadas:',
'UI:CSVImport:LinesNotImported+' => 'Las siguientes lineas no pudieron ser importadas porque contienen errores',
'UI:CSVImport:SeparatorComma+' => ', (coma)',
'UI:CSVImport:SeparatorSemicolon+' => '; (punto y coma)',
'UI:CSVImport:SeparatorTab+' => 'tabulador',
'UI:CSVImport:SeparatorOther' => 'otro:',
'UI:CSVImport:QualifierDoubleQuote+' => '" (comilla doble)',
'UI:CSVImport:QualifierSimpleQuote+' => '\' (comilla simple)',
'UI:CSVImport:QualifierOther' => 'otro:',
'UI:CSVImport:TreatFirstLineAsHeader' => 'Use la primera linea como encabezado de columna(nombre de columnas))',
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Omitir %1$s linea(s) al inicio de el archivo',
'UI:CSVImport:CSVDataPreview' => 'Vista previa de los datos CSV',
'UI:CSVImport:SelectFile' => 'Seleccione el archivo a importar:',
'UI:CSVImport:Tab:LoadFromFile' => 'Cargar desde archivo',
'UI:CSVImport:Tab:CopyPaste' => 'Copiar y pegar data',
'UI:CSVImport:Tab:Templates' => 'Plantillas',
'UI:CSVImport:PasteData' => 'Pegue la data a importar:',
'UI:CSVImport:PickClassForTemplate' => 'seleccione la plantilla a descargar: ',
'UI:CSVImport:SeparatorCharacter' => 'Caracter separador:',
'UI:CSVImport:TextQualifierCharacter' => 'Caracter para calificar como texto',
'UI:CSVImport:CommentsAndHeader' => 'Comentarios y encabezado',
'UI:CSVImport:SelectClass' => 'Seleccione la clase a importar:',
'UI:CSVImport:AdvancedMode' => 'Modo avanzado',
'UI:CSVImport:AdvancedMode+' => 'En modo avanzado el "id" (clave primaria) de los objetos puede ser usado para actualizar y renombrar objetos.' .
'Sin embargo, la columna "id" (si esta presente) solo puede ser usado como criterio de busqueda y no puede ser combinado con ningun otro criterio de busqueda.',
'UI:CSVImport:SelectAClassFirst' => 'Para configurar el mapeo, primero seleccione un clase.',
'UI:CSVImport:HeaderFields' => 'Campos',
'UI:CSVImport:HeaderMappings' => 'Mapeo',
'UI:CSVImport:HeaderSearch' => 'Buscar?',
'UI:CSVImport:AlertIncompleteMapping' => 'Por favor seleccione un mapeo para cada categoria.',
'UI:CSVImport:AlertNoSearchCriteria' => 'Por favor seleccione al menos un criterio de busqueda',
'UI:CSVImport:ObjectsWereModified' => '%1$d objects(s) were modified.',
'UI:CSVImport:ObjectsWereAdded' => '%1$d objects(s) were added.',
'UI:CSVImport:ObjectsHadErrors' => '%1$d objects(s) had errors.',
'UI:Title:CSVImportStep2' => 'Step 2 of 5: CSV data options',
'UI:Title:CSVImportStep3' => 'Step 3 of 5: Data mapping',
'UI:Title:CSVImportStep4' => 'Step 4 of 5: Import simulation',
'UI:Title:CSVImportStep5' => 'Step 5 of 5: Import completed',
'UI:CSVImport:LinesNotImported' => 'Lines that could not be loaded:',
'UI:CSVImport:LinesNotImported+' => 'The following lines have not been imported because they contain errors',
'UI:CSVImport:SeparatorComma+' => ', (comma)',
'UI:CSVImport:SeparatorSemicolon+' => '; (semicolon)',
'UI:CSVImport:SeparatorTab+' => 'tab',
'UI:CSVImport:SeparatorOther' => 'other:',
'UI:CSVImport:QualifierDoubleQuote+' => '" (double quote)',
'UI:CSVImport:QualifierSimpleQuote+' => '\' (simple quote)',
'UI:CSVImport:QualifierOther' => 'other:',
'UI:CSVImport:TreatFirstLineAsHeader' => 'Treat the first line as a header (column names)',
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Skip %1$s line(s) at the beginning of the file',
'UI:CSVImport:CSVDataPreview' => 'CSV Data Preview',
'UI:CSVImport:SelectFile' => 'Select the file to import:',
'UI:CSVImport:Tab:LoadFromFile' => 'Load from a file',
'UI:CSVImport:Tab:CopyPaste' => 'Copy and paste data',
'UI:CSVImport:Tab:Templates' => 'Templates',
'UI:CSVImport:PasteData' => 'Paste the data to import:',
'UI:CSVImport:PickClassForTemplate' => 'Pick the template to download: ',
'UI:CSVImport:SeparatorCharacter' => 'Separator character:',
'UI:CSVImport:TextQualifierCharacter' => 'Text qualifier character',
'UI:CSVImport:CommentsAndHeader' => 'Comments and header',
'UI:CSVImport:SelectClass' => 'Select the class to import:',
'UI:CSVImport:AdvancedMode' => 'Advanced mode',
'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' => 'To configure the mapping, select a class first.',
'UI:CSVImport:HeaderFields' => 'Fields',
'UI:CSVImport:HeaderMappings' => 'Mappings',
'UI:CSVImport:HeaderSearch' => 'Search?',
'UI:CSVImport:AlertIncompleteMapping' => 'Please select a mapping for every field.',
'UI:CSVImport:AlertNoSearchCriteria' => 'Please select at least one search criteria',
'UI:UniversalSearchTitle' => 'iTop - Busqueda Universal',
'UI:UniversalSearchTitle' => 'iTop - Universal Search',
'UI:UniversalSearch:Error' => 'Error: %1$s',
'UI:UniversalSearch:LabelSelectTheClass' => 'Seleccione la clase a buscar: ',
'UI:UniversalSearch:LabelSelectTheClass' => 'Select the class to search: ',
'UI:Audit:Title' => 'iTop - Auditoria a CMDB',
'UI:Audit:InteractiveAudit' => 'Auditoria Interactiva',
'UI:Audit:HeaderAuditRule' => 'Reglas de Auditoria',
'UI:Audit:HeaderNbObjects' => '# Objetos',
'UI:Audit:HeaderNbErrors' => '# Errores',
'UI:Audit:Title' => 'iTop - CMDB Audit',
'UI:Audit:InteractiveAudit' => 'Interactive Audit',
'UI:Audit:HeaderAuditRule' => 'Audit Rule',
'UI:Audit:HeaderNbObjects' => '# Objects',
'UI:Audit:HeaderNbErrors' => '# Errors',
'UI:Audit:PercentageOk' => '% Ok',
'UI:RunQuery:Title' => 'iTop - Evaluacion de consultas OQL',
'UI:RunQuery:QueryExamples' => 'Explorador de Consultas',
'UI:RunQuery:HeaderPurpose' => 'Proposito',
'UI:RunQuery:HeaderPurpose+' => 'Explicacion acerca de la consulta',
'UI:RunQuery:HeaderOQLExpression' => 'Expresion OQL',
'UI:RunQuery:HeaderOQLExpression+' => 'La consulta en syntaxis OQL',
'UI:RunQuery:ExpressionToEvaluate' => 'Expresion a evaluar: ',
'UI:RunQuery:MoreInfo' => 'Mas informacion acerca de la consulta: ',
'UI:RunQuery:DevelopedQuery' => 'Expresion de consulta rediseñada: ',
'UI:RunQuery:SerializedFilter' => 'Filtro de serializacion: ',
'UI:RunQuery:Error' => 'Ha ocurrido un error al ejecutar la consulta: %1$s',
'UI:RunQuery:Title' => 'iTop - OQL Query Evaluation',
'UI:RunQuery:QueryExamples' => 'Query Examples',
'UI:RunQuery:HeaderPurpose' => 'Purpose',
'UI:RunQuery:HeaderPurpose+' => 'Explanation about the query',
'UI:RunQuery:HeaderOQLExpression' => 'OQL Expression',
'UI:RunQuery:HeaderOQLExpression+' => 'The query in OQL syntax',
'UI:RunQuery:ExpressionToEvaluate' => 'Expression to evaluate: ',
'UI:RunQuery:MoreInfo' => 'More information about the query: ',
'UI:RunQuery:DevelopedQuery' => 'Redevelopped query expression: ',
'UI:RunQuery:SerializedFilter' => 'Serialized filter: ',
'UI:RunQuery:Error' => 'An error occured while running the query: %1$s',
'UI:Schema:Title' => 'Esquema de objetos iTop',
'UI:Schema:CategoryMenuItem' => 'Categoria <b>%1$s</b>',
'UI:Schema:Relationships' => 'Relaciones',
'UI:Schema:AbstractClass' => 'Clase abstracta: ningun objeto de esta clase puede ser representado.',
'UI:Schema:NonAbstractClass' => 'Clase no abstracta: objetos de esta clase pueden ser representados.',
'UI:Schema:ClassHierarchyTitle' => 'Jerarquia de clases',
'UI:Schema:AllClasses' => 'Todas las clases',
'UI:Schema:ExternalKey_To' => 'clave externa a %1$s',
'UI:Schema:Columns_Description' => 'Columnas: <em>%1$s</em>',
'UI:Schema:Default_Description' => 'Predeterminar: "%1$s"',
'UI:Schema:NullAllowed' => 'Permite Null',
'UI:Schema:NullNotAllowed' => 'NO permite Null',
'UI:Schema:Attributes' => 'Atributos',
'UI:Schema:AttributeCode' => 'Codigo de Atributo',
'UI:Schema:AttributeCode+' => 'Codigo interno del atributo',
'UI:Schema:Label' => 'Etiqueta',
'UI:Schema:Label+' => 'Etiqueta del atributo',
'UI:Schema:Type' => 'Tipo',
'UI:Schema:Title' => 'iTop objects schema',
'UI:Schema:CategoryMenuItem' => 'Category <b>%1$s</b>',
'UI:Schema:Relationships' => 'Relationships',
'UI:Schema:AbstractClass' => 'Abstract class: no object from this class can be instantiated.',
'UI:Schema:NonAbstractClass' => 'Non abstract class: objects from this class can be instantiated.',
'UI:Schema:ClassHierarchyTitle' => 'Class hierarchy',
'UI:Schema:AllClasses' => 'All classes',
'UI:Schema:ExternalKey_To' => 'External key to %1$s',
'UI:Schema:Columns_Description' => 'Columns: <em>%1$s</em>',
'UI:Schema:Default_Description' => 'Default: "%1$s"',
'UI:Schema:NullAllowed' => 'Null Allowed',
'UI:Schema:NullNotAllowed' => 'Null NOT Allowed',
'UI:Schema:Attributes' => 'Attributes',
'UI:Schema:AttributeCode' => 'Attribute Code',
'UI:Schema:AttributeCode+' => 'Internal code of the attribute',
'UI:Schema:Label' => 'Label',
'UI:Schema:Label+' => 'Label of the attribute',
'UI:Schema:Type' => 'Type',
'UI:Schema:Type+' => 'Tipo de dato del atributo',
'UI:Schema:Origin' => 'Origen',
'UI:Schema:Origin+' => 'La clase base en donde esta definido este atributo',
'UI:Schema:Description' => 'Descripcion',
'UI:Schema:Description+' => 'Descripcion del atributo',
'UI:Schema:AllowedValues' => 'Valores permitidos',
'UI:Schema:AllowedValues+' => 'Restricciones en los posibles valores para este atributo',
'UI:Schema:MoreInfo' => 'Mas informacion',
'UI:Schema:MoreInfo+' => 'Mas informacion acerca del campo definido en la base de datos',
'UI:Schema:SearchCriteria' => 'Criterio de busqueda',
'UI:Schema:FilterCode' => 'Codigo de filtro',
'UI:Schema:FilterCode+' => 'Codigo de este criterio de busqueda',
'UI:Schema:FilterDescription' => 'Descripcion',
'UI:Schema:FilterDescription+' => 'Descripcion de este criterio de busqueda',
'UI:Schema:AvailOperators' => 'Operadores disponibles',
'UI:Schema:AvailOperators+' => 'Operadores posibles para este criterio de busqueda',
'UI:Schema:ChildClasses' => 'Clases menores',
'UI:Schema:ReferencingClasses' => 'Clases de referencia',
'UI:Schema:RelatedClasses' => 'Clases relacionadas',
'UI:Schema:LifeCycle' => 'Ciclo de vida',
'UI:Schema:Triggers' => 'Gatillos',
'UI:Schema:Relation_Code_Description' => 'Relacion <em>%1$s</em> (%2$s)',
'UI:Schema:RelationDown_Description' => 'Abajo: %1$s',
'UI:Schema:RelationUp_Description' => 'Arriba: %1$s',
'UI:Schema:RelationPropagates' => '%1$s: propagar a %2$d niveles, consulta: %3$s',
'UI:Schema:RelationDoesNotPropagate' => '%1$s: no se propaga(%2$d nivel), consulta: %3$s',
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s esta referenciado por la clase %2$s a travez de el campo %3$s',
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s esta vinculado a %2$s a travez de %3$s::<em>%4$s</em>',
'UI:Schema:Links:1-n' => 'Clases apuntando a %1$s (1:n enlaces):',
'UI:Schema:Links:n-n' => 'Clases apuntando a %1$s (n:n enlaces):',
'UI:Schema:Links:All' => 'Grafico de todos los casos relacionados',
'UI:Schema:NoLifeCyle' => 'No hay ciclo de vida definido para esta clase.',
'UI:Schema:LifeCycleTransitions' => 'Transiciones',
'UI:Schema:LifeCyleAttributeOptions' => 'Opciones del atributo',
'UI:Schema:LifeCycleHiddenAttribute' => 'Oculto',
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Solo-lectrura',
'UI:Schema:LifeCycleMandatoryAttribute' => 'Mandatorio',
'UI:Schema:LifeCycleAttributeMustChange' => 'Debe cambiar',
'UI:Schema:LifeCycleAttributeMustPrompt' => 'Se le pedira al usuario que cambie el valor',
'UI:Schema:LifeCycleEmptyList' => 'lista vacia',
'UI:Schema:Type+' => 'Data type of the attribute',
'UI:Schema:Origin' => 'Origin',
'UI:Schema:Origin+' => 'The base class in which this attribute is defined',
'UI:Schema:Description' => 'Description',
'UI:Schema:Description+' => 'Description of the attribute',
'UI:Schema:AllowedValues' => 'Allowed values',
'UI:Schema:AllowedValues+' => 'Restrictions on the possible values for this attribute',
'UI:Schema:MoreInfo' => 'More info',
'UI:Schema:MoreInfo+' => 'More information about the field defined in the database',
'UI:Schema:SearchCriteria' => 'Search criteria',
'UI:Schema:FilterCode' => 'Filter code',
'UI:Schema:FilterCode+' => 'Code of this search criteria',
'UI:Schema:FilterDescription' => 'Description',
'UI:Schema:FilterDescription+' => 'Description of this search criteria',
'UI:Schema:AvailOperators' => 'Available operators',
'UI:Schema:AvailOperators+' => 'Possible operators for this search criteria',
'UI:Schema:ChildClasses' => 'Child classes',
'UI:Schema:ReferencingClasses' => 'Referencing classes',
'UI:Schema:RelatedClasses' => 'Related classes',
'UI:Schema:LifeCycle' => 'Life cycle',
'UI:Schema:Triggers' => 'Triggers',
'UI:Schema:Relation_Code_Description' => 'Relation <em>%1$s</em> (%2$s)',
'UI:Schema:RelationDown_Description' => 'Down: %1$s',
'UI:Schema:RelationUp_Description' => 'Up: %1$s',
'UI:Schema:RelationPropagates' => '%1$s: propagate to %2$d levels, query: %3$s',
'UI:Schema:RelationDoesNotPropagate' => '%1$s: does not propagates (%2$d levels), query: %3$s',
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s is referenced by the class %2$s via the field %3$s',
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s is linked to %2$s via %3$s::<em>%4$s</em>',
'UI:Schema:Links:1-n' => 'Classes pointing to %1$s (1:n links):',
'UI:Schema:Links:n-n' => 'Classes linked to %1$s (n:n links):',
'UI:Schema:Links:All' => 'Graph of all related classes',
'UI:Schema:NoLifeCyle' => 'There is no life cycle defined for this class.',
'UI:Schema:LifeCycleTransitions' => 'Transitions',
'UI:Schema:LifeCyleAttributeOptions' => 'Attribute options',
'UI:Schema:LifeCycleHiddenAttribute' => 'Hidden',
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Read-only',
'UI:Schema:LifeCycleMandatoryAttribute' => 'Mandatory',
'UI:Schema:LifeCycleAttributeMustChange' => 'Must change',
'UI:Schema:LifeCycleAttributeMustPrompt' => 'User will be prompted to change the value',
'UI:Schema:LifeCycleEmptyList' => 'empty list',
'UI:LinksWidget:Autocomplete+' => 'Escriba los primeros 3 caracteres...',
'UI:Combo:SelectValue' => '--- seleccione un valor ---',
'UI:Label:SelectedObjects' => 'Objetos seleccionados: ',
'UI:Label:AvailableObjects' => 'Objetos disponibles: ',
'UI:Link_Class_Attributes' => '%1$s atributos',
'UI:SelectAllToggle+' => 'Seleccionar todo / Deseleccionar todo',
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Agregar %1$s objetos vinculados con %2$s: %3$s',
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Administrar %1$s objetos vinculados con %2$s: %3$s',
'UI:AddLinkedObjectsOf_Class' => 'Agregar %1$ss...',
'UI:RemoveLinkedObjectsOf_Class' => 'Eliminar los objetos seleccionados',
'UI:Message:EmptyList:UseAdd' => 'La lista esta vaica, use el boton Agregar... para agregar elementos.',
'UI:Message:EmptyList:UseSearchForm' => 'Use la forma arriba para buscar objetos a ser agregados.',
'UI:LinksWidget:Autocomplete+' => 'Type the first 3 characters...',
'UI:Combo:SelectValue' => '--- select a value ---',
'UI:Label:SelectedObjects' => 'Selected objects: ',
'UI:Label:AvailableObjects' => 'Available objects: ',
'UI:Link_Class_Attributes' => '%1$s attributes',
'UI:SelectAllToggle+' => 'Select All / Deselect All',
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Add %1$s objects linked with %2$s: %3$s',
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Manage %1$s objects linked with %2$s: %3$s',
'UI:AddLinkedObjectsOf_Class' => 'Add %1$ss...',
'UI:RemoveLinkedObjectsOf_Class' => 'Remove selected objects',
'UI:Message:EmptyList:UseAdd' => 'The list is empty, use the "Add..." button to add elements.',
'UI:Message:EmptyList:UseSearchForm' => 'Use the search form above to search for objects to be added.',
'UI:Wizard:FinalStepTitle' => 'Paso final: Confirmacion',
'UI:Title:DeletionOf_Object' => 'Borrado de %1$s',
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Borrado por lote de %1$d objetos de la clase %2$s',
'UI:Delete:NotAllowedToDelete' => 'No esta autorizado para borrar este objeto',
'UI:Delete:NotAllowedToUpdate_Fields' => 'No esta autorizado para actualizar el siguiente campo(s): %1$s',
'UI:Error:NotEnoughRightsToDelete' => 'Este objeto no pudo ser borrado porque el usuario actual no posee suficientes permisos',
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Este objeto no pudo ser borrado porque algunas operaciones manuales deben ser ejecutadas antes de eso',
'UI:Archive_User_OnBehalfOf_User' => '%1$s en nombre de %2$s',
'UI:Delete:AutomaticallyDeleted' => 'Borrado automaticamente',
'UI:Delete:AutomaticResetOf_Fields' => 'reinicio automatico de campo(s): %1$s',
'UI:Delete:CleaningUpRefencesTo_Object' => 'Limpiando todas las referencias a %1$s...',
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Limpiando todas las referencias a %1$d objetos de la clase %2$s...',
'UI:Delete:Done+' => 'Lo que se hizo...',
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s borrado.',
'UI:Delete:ConfirmDeletionOf_Name' => 'Borrado de %1$s',
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Borrado de %1$d objetos de al clase %2$s',
'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Beberia ser eliminado automaticamente, pero usted no esta autorizado para hacerlo',
'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Debe ser borrado manualmente - pero usted no esta autorizado para borrar este objeto, por favor contacte al administrador de la aplicacion',
'UI:Delete:WillBeDeletedAutomatically' => 'Sera borrado automaticamente',
'UI:Delete:MustBeDeletedManually' => 'Debe ser borrado manualmente',
'UI:Delete:CannotUpdateBecause_Issue' => 'Debe ser actualizado automaticamente, pero: %1$s',
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'sera actualizado automaticamente (reset: %1$s)',
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d objetos/vinculos estan referenciando %2$s',
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objetos/vinculos estan referenciando algunos de los objetos a ser borrados',
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'Para asegurar la integridad de la Base de Datos, cualquier referencia debera ser completamente eliminada',
'UI:Delete:Consequence+' => 'Lo que se hara',
'UI:Delete:SorryDeletionNotAllowed' => 'Disculpe, usted no esta autorizado a eliminar este objeto, vea la explciacion detallada abajo',
'UI:Delete:PleaseDoTheManualOperations' => 'Por favor ejecute las operaciones manuales antes de eliminar este objeto',
'UI:Delect:Confirm_Object' => 'Por favor confirme que quiere borrar %1$s.',
'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Port favor confirme que quiere eliminar los siguientes %1$d objeto de la clase %2$s.',
'UI:WelcomeToITop' => 'Bienvenido a iTop',
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s detalles',
'UI:Wizard:FinalStepTitle' => 'Final step: confirmation',
'UI:Title:DeletionOf_Object' => 'Deletion of %1$s',
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Bulk deletion of %1$d objects of class %2$s',
'UI:Delete:NotAllowedToDelete' => 'You are not allowed to delete this object',
'UI:Delete:NotAllowedToUpdate_Fields' => 'You are not allowed to update the following field(s): %1$s',
'UI:Error:NotEnoughRightsToDelete' => 'This object could not be deleted because the current user do not have sufficient rights',
'UI:Error:CannotDeleteBecauseOfDepencies' => 'This object could not be deleted because some manual operations must be performed prior to that',
'UI:Archive_User_OnBehalfOf_User' => '%1$s on behalf of %2$s',
'UI:Delete:AutomaticallyDeleted' => 'automatically deleted',
'UI:Delete:AutomaticResetOf_Fields' => 'automatic reset of field(s): %1$s',
'UI:Delete:CleaningUpRefencesTo_Object' => 'Cleaning up all references to %1$s...',
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Cleaning up all references to %1$d objects of class %2$s...',
'UI:Delete:Done+' => 'What was done...',
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s deleted.',
'UI:Delete:ConfirmDeletionOf_Name' => 'Deletion of %1$s',
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Deletion of %1$d objects of class %2$s',
'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Should be automaticaly deleted, but you are not allowed to do so',
'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Must be deleted manually - but you are not allowed to delete this object, please contact your application admin',
'UI:Delete:WillBeDeletedAutomatically' => 'Will be automaticaly deleted',
'UI:Delete:MustBeDeletedManually' => 'Must be deleted manually',
'UI:Delete:CannotUpdateBecause_Issue' => 'Should be automatically updated, but: %1$s',
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'will be automaticaly updated (reset: %1$s)',
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d objects/links are referencing %2$s',
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objects/links are referencing some of the objects to be deleted',
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'To ensure Database integrity, any reference should be further eliminated',
'UI:Delete:Consequence+' => 'What will be done',
'UI:Delete:SorryDeletionNotAllowed' => 'Sorry, you are not allowed to delete this object, see the detailed explanations above',
'UI:Delete:PleaseDoTheManualOperations' => 'Please perform the manual operations listed above prior to requesting the deletion of this object',
'UI:Delect:Confirm_Object' => 'Please confirm that you want to delete %1$s.',
'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Please confirm that you want to delete the following %1$d objects of class %2$s.',
'UI:WelcomeToITop' => 'Welcome to iTop',
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s details',
'UI:ErrorPageTitle' => 'iTop - Error',
'UI:ObjectDoesNotExist' => 'Disculpe, este objeto no existe (o no esta autorizado para verlo).',
'UI:SearchResultsPageTitle' => 'iTop - Resultados de la Busqueda',
'UI:Search:NoSearch' => 'Nada para buscar',
'UI:FullTextSearchTitle_Text' => 'Resultados para "%1$s":',
'UI:Search:Count_ObjectsOf_Class_Found' => '%1$d objeto(s) de la clase %2$s encontrado(s).',
'UI:Search:NoObjectFound' => 'No se encontraron objetos.',
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s modificacion',
'UI:ModificationTitle_Class_Object' => 'Modificacion de %1$s: <span class=\"hilite\">%2$s</span>',
'UI:ClonePageTitle_Object_Class' => 'iTop - Duplicar %1$s - %2$s modificacion',
'UI:CloneTitle_Class_Object' => 'Duplicado de %1$s: <span class=\"hilite\">%2$s</span>',
'UI:CreationPageTitle_Class' => 'iTop - Creacion de un nuevo %1$s ',
'UI:CreationTitle_Class' => 'Creacion de un nuevo %1$s',
'UI:SelectTheTypeOf_Class_ToCreate' => 'Seleccione el tipo de %1$s a crear:',
'UI:Class_Object_NotUpdated' => 'No se detectaron cambios, %1$s (%2$s) <strong>no</strong> fue modificado.',
'UI:Class_Object_Updated' => '%1$s (%2$s) actualizado.',
'UI:BulkDeletePageTitle' => 'iTop - Eliminar por lote',
'UI:BulkDeleteTitle' => 'Seleccione los objetos que desea eliminar:',
'UI:PageTitle:ObjectCreated' => 'Objeto de iTop creado.',
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s creado.',
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Aplicando %1$s en el objeto: %2$s en estado %3$s al estado deseado: %4$s.',
'UI:ObjectCouldNotBeWritten' => 'el objeto no pudo ser escrito: %1$s',
'UI:PageTitle:FatalError' => 'iTop - Error Fatal',
'UI:FatalErrorMessage' => 'Error fatal, iTop no puede continuar.',
'UI:SystemIntrusion' => 'Acceso denegado. Esta tratando de ejecutar una operacion no permitida para usted.',
'UI:ObjectDoesNotExist' => 'Sorry, this object does not exist (or you are not allowed to view it).',
'UI:SearchResultsPageTitle' => 'iTop - Search Results',
'UI:Search:NoSearch' => 'Nothing to search for',
'UI:FullTextSearchTitle_Text' => 'Results for "%1$s":',
'UI:Search:Count_ObjectsOf_Class_Found' => '%1$d object(s) of class %2$s found.',
'UI:Search:NoObjectFound' => 'No object found.',
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s modification',
'UI:ModificationTitle_Class_Object' => 'Modification of %1$s: <span class=\"hilite\">%2$s</span>',
'UI:ClonePageTitle_Object_Class' => 'iTop - Clone %1$s - %2$s modification',
'UI:CloneTitle_Class_Object' => 'Clone of %1$s: <span class=\"hilite\">%2$s</span>',
'UI:CreationPageTitle_Class' => 'iTop - Creation of a new %1$s ',
'UI:CreationTitle_Class' => 'Creation of a new %1$s',
'UI:SelectTheTypeOf_Class_ToCreate' => 'Select the type of %1$s to create:',
'UI:Class_Object_NotUpdated' => 'No change detected, %1$s (%2$s) has <strong>not</strong> been modified.',
'UI:Class_Object_Updated' => '%1$s (%2$s) updated.',
'UI:BulkDeletePageTitle' => 'iTop - Bulk Delete',
'UI:BulkDeleteTitle' => 'Select the objects you want to delete:',
'UI:PageTitle:ObjectCreated' => 'iTop Object Created.',
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s created.',
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Applying %1$s on object: %2$s in state %3$s to target state: %4$s.',
'UI:ObjectCouldNotBeWritten' => 'The object could not be written: %1$s',
'UI:PageTitle:FatalError' => 'iTop - Fatal Error',
'UI:FatalErrorMessage' => 'Fatal error, iTop cannot continue.',
'UI:SystemIntrusion' => 'Access denied. You have trying to perform an operation that is not allowed for you.',
'UI:Error_Details' => 'Error: %1$s.',
'UI:PageTitle:ClassProjections' => 'Administracion de usuarios iTop - proyecciones de clases',
'UI:PageTitle:ProfileProjections' => 'Administracion de usuarios iTop - proyecciones de perfil',
'UI:UserManagement:Class' => 'Clase',
'UI:UserManagement:Class+' => 'Clase de objetos',
'UI:UserManagement:ProjectedObject' => 'Objeto',
'UI:UserManagement:ProjectedObject+' => 'Objeto proyectado',
'UI:UserManagement:AnyObject' => '* cualquiera *',
'UI:UserManagement:User' => 'Usuario',
'UI:UserManagement:User+' => 'Usuario implicado en la proyeccion',
'UI:UserManagement:Profile' => 'Perfil',
'UI:UserManagement:Profile+' => 'Perfil en el cual se especifico la proyeccion',
'UI:UserManagement:Action:Read' => 'Leer',
'UI:UserManagement:Action:Read+' => 'Leer/Mostrar objetos',
'UI:UserManagement:Action:Modify' => 'Modificar',
'UI:UserManagement:Action:Modify+' => 'Crear y editar (modificar) objetos',
'UI:UserManagement:Action:Delete' => 'Eliminar',
'UI:UserManagement:Action:Delete+' => 'Eliminar objetos',
'UI:UserManagement:Action:BulkRead' => 'Lectura por lote (Exportar)',
'UI:UserManagement:Action:BulkRead+' => 'Listar objetos o exportar masivamente',
'UI:UserManagement:Action:BulkModify' => 'Modificacion masiva',
'UI:UserManagement:Action:BulkModify+' => 'Crear/Editar masivamente (importar CSV)',
'UI:UserManagement:Action:BulkDelete' => 'eliminacion masiva',
'UI:UserManagement:Action:BulkDelete+' => 'eliminacion masiva de objetos',
'UI:PageTitle:ClassProjections' => 'iTop user management - class projections',
'UI:PageTitle:ProfileProjections' => 'iTop user management - profile projections',
'UI:UserManagement:Class' => 'Class',
'UI:UserManagement:Class+' => 'Class of objects',
'UI:UserManagement:ProjectedObject' => 'Object',
'UI:UserManagement:ProjectedObject+' => 'Projected object',
'UI:UserManagement:AnyObject' => '* any *',
'UI:UserManagement:User' => 'User',
'UI:UserManagement:User+' => 'User involved in the projection',
'UI:UserManagement:Profile' => 'Profile',
'UI:UserManagement:Profile+' => 'Profile in which the projection is specified',
'UI:UserManagement:Action:Read' => 'Read',
'UI:UserManagement:Action:Read+' => 'Read/display objects',
'UI:UserManagement:Action:Modify' => 'Modify',
'UI:UserManagement:Action:Modify+' => 'Create and edit (modify) objects',
'UI:UserManagement:Action:Delete' => 'Delete',
'UI:UserManagement:Action:Delete+' => 'Delete objects',
'UI:UserManagement:Action:BulkRead' => 'Bulk Read (Export)',
'UI:UserManagement:Action:BulkRead+' => 'List objects or export massively',
'UI:UserManagement:Action:BulkModify' => 'Bulk Modify',
'UI:UserManagement:Action:BulkModify+' => 'Massively create/edit (CSV import)',
'UI:UserManagement:Action:BulkDelete' => 'Bulk Delete',
'UI:UserManagement:Action:BulkDelete+' => 'Massively delete objects',
'UI:UserManagement:Action:Stimuli' => 'Stimuli',
'UI:UserManagement:Action:Stimuli+' => 'Acciones (compound) permitidas',
'UI:UserManagement:Action' => 'Accion',
'UI:UserManagement:Action+' => 'Accion ejecutada por el usuario',
'UI:UserManagement:TitleActions' => 'Acciones',
'UI:UserManagement:Permission' => 'Permisos',
'UI:UserManagement:Permission+' => 'Permisos de usuario',
'UI:UserManagement:Attributes' => 'Atributos',
'UI:UserManagement:ActionAllowed:Yes' => 'Si',
'UI:UserManagement:Action:Stimuli+' => 'Allowed (compound) actions',
'UI:UserManagement:Action' => 'Action',
'UI:UserManagement:Action+' => 'Action performed by the user',
'UI:UserManagement:TitleActions' => 'Actions',
'UI:UserManagement:Permission' => 'Permission',
'UI:UserManagement:Permission+' => 'User\'s permissions',
'UI:UserManagement:Attributes' => 'Attributes',
'UI:UserManagement:ActionAllowed:Yes' => 'Yes',
'UI:UserManagement:ActionAllowed:No' => 'No',
'UI:UserManagement:AdminProfile+' => 'Los administradores tienen acceso total de lectura/escritura para todos los objetos en la base de datos.',
'UI:UserManagement:AdminProfile+' => 'Administrators have full read/write access to all objects in the database.',
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
'UI:UserManagement:NoLifeCycleApplicable+' => 'No se ha definido ciclo de vida para esta clase',
'UI:UserManagement:GrantMatrix' => 'Matriz de acceso',
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Vinculo entre %1$s y %2$s',
'UI:UserManagement:NoLifeCycleApplicable+' => 'No lifecycle has been defined for this class',
'UI:UserManagement:GrantMatrix' => 'Grant Matrix',
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Link between %1$s and %2$s',
'Menu:AdminTools' => 'Herramientas Administrativas',
'Menu:AdminTools+' => 'Herramientas de administracion',
'Menu:AdminTools?' => 'Herramientas accesibles soloa usuariso con perfil de administrador',
'Menu:AdminTools' => 'Admin tools',
'Menu:AdminTools+' => 'Administration tools',
'Menu:AdminTools?' => 'Tools accessible only to users having the administrator profile',
'UI:ChangeManagementMenu' => 'Control de Cambios',
'UI:ChangeManagementMenu+' => 'Control de Cambios',
'UI:ChangeManagementMenu:Title' => 'Sumario de cambios',
'UI-ChangeManagementMenu-ChangesByType' => 'Cambios por tipo',
'UI-ChangeManagementMenu-ChangesByStatus' => 'Cambios por estado',
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Cambios por grupo de trabajo',
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Cambios no asignados aun',
'UI:ChangeManagementMenu' => 'Change Management',
'UI:ChangeManagementMenu+' => 'Change Management',
'UI:ChangeManagementMenu:Title' => 'Changes Overview',
'UI-ChangeManagementMenu-ChangesByType' => 'Changes by type',
'UI-ChangeManagementMenu-ChangesByStatus' => 'Changes by status',
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Changes by workgroup',
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Changes not yet assigned',
'UI:ConfigurationItemsMenu'=> 'Elementos de configuracion',
'UI:ConfigurationItemsMenu+'=> 'Todos los dispositivos',
'UI:ConfigurationItemsMenu:Title' => 'Sumario de Elementos de Configuracion',
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Servidores por criticidad',
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PCs por criticidad',
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Dispositivos de red por criticidad',
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Aplicaciones por criticidad',
'UI:ConfigurationItemsMenu'=> 'Configuration Items',
'UI:ConfigurationItemsMenu+'=> 'All Devices',
'UI:ConfigurationItemsMenu:Title' => 'Configuration Items Overview',
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Servers by criticity',
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PCs by criticity',
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Network devices by criticity',
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Applications by criticity',
'UI:ConfigurationManagementMenu' => 'Gestion de la Configuracion',
'UI:ConfigurationManagementMenu+' => 'Gestion de la Configuracion',
'UI:ConfigurationManagementMenu:Title' => 'Sumario de Infrastructura',
'UI-ConfigurationManagementMenu-InfraByType' => 'Objetos de infrastructura por tipo',
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Objetos de infraestructura por estatus',
'UI:ConfigurationManagementMenu' => 'Configuration Management',
'UI:ConfigurationManagementMenu+' => 'Configuration Management',
'UI:ConfigurationManagementMenu:Title' => 'Infrastructure Overview',
'UI-ConfigurationManagementMenu-InfraByType' => 'Infrastructure objects by type',
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Infrastructure objects by status',
'UI:ConfigMgmtMenuOverview:Title' => 'Panel de control for Gestion de la Configuracion',
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Elementos de la configuracion por estado',
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'elementos de configuracion por tipo',
'UI:ConfigMgmtMenuOverview:Title' => 'Dashboard for Configuration Management',
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Configuration Items by status',
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Configuration Items by type',
'UI:RequestMgmtMenuOverview:Title' => 'Panel de control for Gestion de Solicitudes',
'UI-RequestManagementOverview-RequestByService' => 'Solicitudes de usuario por servicio',
'UI-RequestManagementOverview-RequestByPriority' => 'Solicitudes de usuario por prioridad',
'UI-RequestManagementOverview-RequestUnassigned' => 'Solicitudes de usuario sin asignar a un agente',
'UI:RequestMgmtMenuOverview:Title' => 'Dashboard for Request Management',
'UI-RequestManagementOverview-RequestByService' => 'User Requests by service',
'UI-RequestManagementOverview-RequestByPriority' => 'User Requests by priority',
'UI-RequestManagementOverview-RequestUnassigned' => 'User Requests not yet assigned to an agent',
'UI:IncidentMgmtMenuOverview:Title' => 'Panel de control for Gestion de Incidentes',
'UI-IncidentManagementOverview-IncidentByService' => 'Incidentes por servicio',
'UI-IncidentManagementOverview-IncidentByPriority' => 'Incidentes por prioridad',
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Incidentes no asignados a un agente',
'UI:IncidentMgmtMenuOverview:Title' => 'Dashboard for Incident Management',
'UI-IncidentManagementOverview-IncidentByService' => 'Incidents by service',
'UI-IncidentManagementOverview-IncidentByPriority' => 'Incident by priority',
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Incidents not yet assigned to an agent',
'UI:ChangeMgmtMenuOverview:Title' => 'Panel de control for Control de Cambios',
'UI-ChangeManagementOverview-ChangeByType' => 'Cambios por tipo',
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Cambios no asignados a un agente',
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Interrupciones de servicios debida a cambios',
'UI:ChangeMgmtMenuOverview:Title' => 'Dashboard for Change Management',
'UI-ChangeManagementOverview-ChangeByType' => 'Changes by type',
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Changes not yet assigned to an agent',
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Outages due to changes',
'UI:ServiceMgmtMenuOverview:Title' => 'Panel de control for Gestion de Servicios',
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Contratos de usuario a ser renovados en 30 dias',
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'contratos de proveedores a ser renovados en 30 dias',
'UI:ServiceMgmtMenuOverview:Title' => 'Dashboard for Service Management',
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Customer contracts to be renewed in 30 days',
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Provider contracts to be renewed in 30 days',
'UI:ContactsMenu' => 'Contactos',
'UI:ContactsMenu+' => 'Contactos',
'UI:ContactsMenu:Title' => 'Sumario de Contactos',
'UI-ContactsMenu-ContactsByLocation' => 'Contactos por ubicacion',
'UI-ContactsMenu-ContactsByType' => 'Contactos por tipo',
'UI-ContactsMenu-ContactsByStatus' => 'Contactos por estado',
'UI:ContactsMenu' => 'Contacts',
'UI:ContactsMenu+' => 'Contacts',
'UI:ContactsMenu:Title' => 'Contacts Overview',
'UI-ContactsMenu-ContactsByLocation' => 'Contacts by location',
'UI-ContactsMenu-ContactsByType' => 'Contacts by type',
'UI-ContactsMenu-ContactsByStatus' => 'Contacts by status',
'Menu:CSVImportMenu' => 'Importar CSV',
'Menu:CSVImportMenu+' => 'Creacion o actualizacion masiva',
'Menu:CSVImportMenu' => 'CSV import',
'Menu:CSVImportMenu+' => 'Bulk creation or update',
'Menu:DataModelMenu' => 'Modelo de Datos',
'Menu:DataModelMenu+' => 'Sumario del Modelo de Datos',
'Menu:DataModelMenu' => 'Data Model',
'Menu:DataModelMenu+' => 'Overview of the Data Model',
'Menu:ExportMenu' => 'Exportar',
'Menu:ExportMenu+' => 'Exportar los resultados de cualquier consulta eb HTML, CSV o XML',
'Menu:ExportMenu' => 'Export',
'Menu:ExportMenu+' => 'Export the results of any query in HTML, CSV or XML',
'Menu:NotificationsMenu' => 'Notificaciones',
'Menu:NotificationsMenu+' => 'Configuracion de las Notificaciones',
'UI:NotificationsMenu:Title' => 'Configuracion de las <span class="hilite">Notificaciones</span>',
'UI:NotificationsMenu:Help' => 'Ayuda',
'UI:NotificationsMenu:HelpContent' => '<p>En iTop las notificaciones son completamente personalizables. Estan basadas en dos conjuntos de objetos: <i>Gatuillos y acciones</i>.</p>
<p><i><b>Gatillos</b></i> definen cuando una notificacion debe ser ejecutada. existen 3 tipos de gatillos para cubrir las 3 diferentes fases del ciclo de vida de un objeto:
'Menu:NotificationsMenu' => 'Notifications',
'Menu:NotificationsMenu+' => 'Configuration of the Notifications',
'UI:NotificationsMenu:Title' => 'Configuration of the <span class="hilite">Notifications</span>',
'UI:NotificationsMenu:Help' => 'Help',
'UI:NotificationsMenu:HelpContent' => '<p>In iTop the notifications are fully customizable. They are based on two sets of objects: <i>triggers and actions</i>.</p>
<p><i><b>Triggers</b></i> define when a notification will be executed. There are 3 types of triggers for covering 3 differents phases of an object life cycle:
<ol>
<li>los gatillos "OnCreate" son ejecutados cuando un objeto de la clase especificada es creado</li>
<li>los gatillos "OnStateEnter" son ejecutados antes de que un determinado objeto entre un estado especificado (viniendo de otro estado)</li>
<li>los gatillos "OnStateLeave" son ejecutados cuando un objeto de clase determinada deja un estado especificado</li>
<li>the "OnCreate" triggers get executed when an object of the specified class is created</li>
<li>the "OnStateEnter" triggers get executed before an object of the given class enters a specified state (coming from another state)</li>
<li>the "OnStateLeave" triggers get executed when an object of the given class is leaving a specified state</li>
</ol>
</p>
<p>
<i><b>Acciones</b></i> definen las acciones a ser ejecutadas cuando los gatillos se disparan, por ahora el unico tipo de accion consiste en enviar un mensaje de correo.
Tales acciones tambien definen la plantilla a ser usada para enviar el correo asi como otros parametros del mensaje como receptor, importancia, etc.
<i><b>Actions</b></i> define the actions to be performed when the triggers execute. For now there is only one kind of action consisting in sending an email message.
Such actions also define the template to be used for sending the email as well as the other parameters of the message like the recipients, importance, etc.
</p>
<p>Una pagina especial: <a href="../setup/email.test.php" target="_blank">email.test.php</a> esta disponible para pruebar y diagnosticar su configuracion de correo de PHP.</p>
<p>Para ser ejecutadas, las acciones deben estar asociadas con los gatillos.
Cuando se asocien con un gatillo, cada accion recibe un numero de "orden", esto especifica en que orden se ejecutaran las acciones.</p>',
<p>A special page: <a href="../setup/email.test.php" target="_blank">email.test.php</a> is available for testing and troubleshooting your PHP mail configuration.</p>
<p>To be executed, actions must be associated to triggers.
When associated with a trigger, each action is given an "order" number, specifying in which order the actions are to be executed.</p>',
'UI:NotificationsMenu:Triggers' => 'Disparadores',
'UI:NotificationsMenu:AvailableTriggers' => 'Disparadores disponibles',
'UI:NotificationsMenu:AvailableTriggers' => 'Disparadores disponiblesAvailable triggers',
'UI:NotificationsMenu:OnCreate' => 'cuando un objeto es creado',
'UI:NotificationsMenu:OnStateEnter' => 'Cuando un objeto entra a un estado específico',
'UI:NotificationsMenu:OnStateLeave' => 'Cuando un objeto sale de un estado específico',
@@ -827,7 +823,7 @@ Cuando se asocien con un gatillo, cada accion recibe un numero de "orden", esto
'Menu:UserAccountsMenu:Title' => 'Cuentas de usuario',
'UI:iTopVersion:Short' => 'iTop versión %1$s',
'UI:iTopVersion:Long' => 'iTop versión %1$s-%2$s compilada en %3$s',
'UI:iTopVersion:Long' => 'iTop versión %1$s-%2$s built on %3$s',
'UI:PropertiesTab' => 'Propiedades',
'UI:OpenDocumentInNewWindow_' => 'Abra este documento en una ventana nueva: %1$s',
@@ -840,9 +836,9 @@ Cuando se asocien con un gatillo, cada accion recibe un numero de "orden", esto
'UI:Deadline_Hours_Minutes' => '%1$dh %2$dmin',
'UI:Deadline_Days_Hours_Minutes' => '%1$dd %2$dh %3$dmin',
'UI:Help' => 'Ayuda',
'UI:PasswordConfirm' => '(Confirmar)',
'UI:PasswordConfirm' => '(Confirm)',
'Enum:Undefined' => 'Indefinido',
'Enum:Undefined' => 'Undefined',
));
?>

View File

@@ -24,102 +24,6 @@
*/
Dict::Add('FR FR', 'English', 'English', array(
'Core:AttributeLinkedSet' => 'Objets liés (1-n)',
'Core:AttributeLinkedSet+' => 'Liste d\'objets d\'une classe donnée et pointant sur l\'objet courant',
'Core:AttributeLinkedSetIndirect' => 'Objets liés (1-n)',
'Core:AttributeLinkedSetIndirect+' => 'Liste d\'objets d\'une classe donnée et liés à l\'objet courant via une classe intermédiaire',
'Core:AttributeInteger' => 'Nombre entier',
'Core:AttributeInteger+' => 'Valeur numérique entière',
'Core:AttributeDecimal' => 'Nombre décimal',
'Core:AttributeDecimal+' => 'Valeur numérique décimale',
'Core:AttributeBoolean' => 'Booléen',
'Core:AttributeBoolean+' => 'Booléen',
'Core:AttributeString' => 'Chaîne de caractères',
'Core:AttributeString+' => 'Chaîne de caractères (limitée à une ligne)',
'Core:AttributeClass' => 'Classe',
'Core:AttributeClass+' => 'Classe d\'objets',
'Core:AttributeApplicationLanguage' => 'Langue',
'Core:AttributeApplicationLanguage+' => 'Codes langue et pays (EN US)',
'Core:AttributeFinalClass' => 'Classe',
'Core:AttributeFinalClass+' => 'Classe réelle de l\'objet (attribut créé automatiquement)',
'Core:AttributePassword' => 'Mot de passe',
'Core:AttributePassword+' => 'Mot de passe qui peut être lu en clair',
'Core:AttributeEncryptedString' => 'Chaîne encryptée',
'Core:AttributeEncryptedString+' => 'Chaîne encryptée avec une clé locale',
'Core:AttributeText' => 'Texte',
'Core:AttributeText+' => 'Chaîne de caractères de plusieurs lignes',
'Core:AttributeHTML' => 'HTML',
'Core:AttributeHTML+' => 'Texte formatté en HTML',
'Core:AttributeEmailAddress' => 'Adresse électronique',
'Core:AttributeEmailAddress+' => 'Adresse électronique (xxxx@yyy.zzz)',
'Core:AttributeIPAddress' => 'Adresse IP',
'Core:AttributeIPAddress+' => 'Adresse IP',
'Core:AttributeOQL' => 'Expression OQL',
'Core:AttributeOQL+' => 'Expression formattée en "Object Query Language"',
'Core:AttributeEnum' => 'Enumération',
'Core:AttributeEnum+' => 'Valeur choisie parmi un liste de chaîne de caractères',
'Core:AttributeTemplateString' => 'Modèle de chaîne de caractères',
'Core:AttributeTemplateString+' => 'Chaîne de caractères d\'une ligne, contenant des espaces réservés pour des données iTop',
'Core:AttributeTemplateText' => 'Modèle de texte',
'Core:AttributeTemplateText+' => 'Texte contenant des espaces réservés pour des données iTop',
'Core:AttributeTemplateHTML' => 'Modèle HTML',
'Core:AttributeTemplateHTML+' => 'HTML contenant des espaces réservés pour des données iTop',
'Core:AttributeWikiText' => 'Article Wiki',
'Core:AttributeWikiText+' => 'Texte formatté en Wiki',
'Core:AttributeDateTime' => 'Date/heure',
'Core:AttributeDateTime+' => 'Date et heure (année-mois-jour hh:mm:ss)',
'Core:AttributeDate' => 'Date',
'Core:AttributeDate+' => 'Date (année-mois-jour)',
'Core:AttributeDeadline' => 'Délai',
'Core:AttributeDeadline+' => 'Date/heure exprimée relativement à l\'heure courante',
'Core:AttributeExternalKey' => 'Clé externe',
'Core:AttributeExternalKey+' => 'Clé externe',
'Core:AttributeExternalField' => 'Attribut externe',
'Core:AttributeExternalField+' => 'Copie de la valeur d\'un attribut de l\'objet lié par une clé externe',
'Core:AttributeURL' => 'URL',
'Core:AttributeURL+' => 'URL absolue ou relative',
'Core:AttributeBlob' => 'Blob',
'Core:AttributeBlob+' => 'Contenu binaire (document)',
'Core:AttributeOneWayPassword' => 'Mot de passe "one way"',
'Core:AttributeOneWayPassword+' => 'Mot de passe qui peut être vérifié mais jamais lu en clair',
'Core:AttributeTable' => 'Table',
'Core:AttributeTable+' => 'Tableau à deux dimensions',
'Core:AttributePropertySet' => 'Propriétés',
'Core:AttributePropertySet+' => 'Liste de propriétés (nom et valeur) non typées',
));
//////////////////////////////////////////////////////////////////////
// Classes in 'core/cmdb'
//////////////////////////////////////////////////////////////////////
@@ -204,7 +108,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', array(
'Change:ObjectCreated' => 'Elément créé',
'Change:ObjectDeleted' => 'Elément effacé',
'Change:ObjectModified' => 'Elément modifié',
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s modifié en %2$s (ancienne valeur: %3$s)',
'Change:Text_AppendedTo_AttName' => '%1$s ajouté à %2$s',
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modifié, ancienne valeur: %2$s',

View File

@@ -338,7 +338,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
'UI:Button:Cancel' => 'Annuler',
'UI:Button:Apply' => 'Appliquer',
'UI:Button:Back' => ' << Retour ',
'UI:Button:Restart' => ' |<< Recommencer ',
'UI:Button:Next' => ' Suite >> ',
'UI:Button:Finish' => ' Terminer ',
'UI:Button:DoImport' => ' Lancer l\'import ! ',
@@ -400,21 +399,12 @@ Dict::Add('FR FR', 'French', 'Français', array(
'UI:History:LastModified_On_By' => 'Dernière modification par %2$s le %1$s.',
'UI:HistoryTab' => 'Historique',
'UI:NotificationsTab' => 'Notifications',
'UI:History:BulkImports' => 'Historique',
'UI:History:BulkImports+' => 'Liste des imports CSV (le dernier est en haut de la liste)',
'UI:History:BulkImportDetails' => 'Changements résultant de l\'import CSV du %1$s (auteur: %2$s)',
'UI:History:Date' => 'Date',
'UI:History:Date+' => 'Date de modification',
'UI:History:User' => 'Utilisateur',
'UI:History:User+' => 'Utilisateur qui a fait la modification',
'UI:History:Changes' => 'Changements',
'UI:History:Changes+' => 'Changements sur cet objet',
'UI:History:StatsCreations' => 'Créés',
'UI:History:StatsCreations+' => 'Nombre d\'objets créés',
'UI:History:StatsModifs' => 'Modifiés',
'UI:History:StatsModifs+' => 'Nombre d\'objets modifiés',
'UI:History:StatsDeletes' => 'Effacés',
'UI:History:StatsDeletes+' => 'Nombre d\'objets effacés',
'UI:Loading' => 'Chargement...',
'UI:Menu:Actions' => 'Actions',
'UI:Menu:New' => 'Créer...',
@@ -457,8 +447,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
'UI:LogOff:ThankYou' => 'Merci d\'avoir utilisé iTop',
'UI:LogOff:ClickHereToLoginAgain' => 'Cliquez ici pour vous reconnecter...',
'UI:ChangePwdMenu' => 'Changer de mot de passe...',
'UI:AccessRO-All' => 'iTop est en lecture seule',
'UI:AccessRO-Users' => 'iTop est en lecture seule pour les utilisateurs finaux',
'UI:Login:RetypePwdDoesNotMatch' => 'Les deux saisies du nouveau mot de passe ne sont pas identiques !',
'UI:Button:Login' => 'Entrer dans iTop',
'UI:Login:Error:AccessRestricted' => 'L\'accès à iTop est soumis à autorisation. Merci de contacter votre administrateur iTop.',
@@ -474,7 +462,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
'UI:CSVImport:idField' => 'id (Clef primaire)',
'UI:Title:BulkImport' => 'iTop - Import massif',
'UI:Title:BulkImport+' => 'Assistant d\'import CSV',
'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Synchronisation de %1$d éléments de type %2$s',
'UI:CSVImport:ClassesSelectOne' => '-- choisir une valeur --',
'UI:CSVImport:ErrorExtendedAttCode' => 'Erreur interne: "%1$s" n\'est pas une code correct car "%2$s" n\'est pas une clef externe de la classe "%3$s"',
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objets(s) resteront inchangés.',
@@ -864,7 +851,6 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé
'UI:DisplayThisMessageAtStartup' => 'Afficher ce message au démarrage',
'UI:RelationshipGraph' => 'Vue graphique',
'UI:RelationshipList' => 'Liste',
'UI:OperationCancelled' => 'Opération Annulée',
'Portal:Title' => 'Portail utilisateur iTop',
'Portal:Refresh' => 'Rafraîchir',
@@ -884,10 +870,6 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé
'Portal:Button:CloseTicket' => 'Clôre cette requête',
'Portal:EnterYourCommentsOnTicket' => 'Vos commentaires à propos du traitement de cette requête:',
'Portal:ErrorNoContactForThisUser' => 'Erreur: l\'utilisateur courant n\'est pas associé à une Personne/Contact. Contactez votre administrateur.',
'Portal:Attachments' => 'Pièces jointes',
'Portal:AddAttachment' => ' Ajouter une pièce jointe ',
'Portal:RemoveAttachment' => ' Enlever la pièce jointe ',
'Portal:Attachment_No_To_Ticket_Name' => 'Pièce jointe #%1$d à %2$s (%3$s)',
'Enum:Undefined' => 'Non défini',
));

View File

@@ -24,102 +24,6 @@
*/
Dict::Add('PT BR', 'English', 'English', array(
'Core:AttributeLinkedSet' => 'Array of objects',
'Core:AttributeLinkedSet+' => 'Any kind of objects [subclass] of the same class',
'Core:AttributeLinkedSetIndirect' => 'Array of objects (N-N)',
'Core:AttributeLinkedSetIndirect+' => 'Any kind of objects [subclass] of the same class',
'Core:AttributeInteger' => 'Integer',
'Core:AttributeInteger+' => 'Numeric value (could be negative)',
'Core:AttributeDecimal' => 'Decimal',
'Core:AttributeDecimal+' => 'Decimal value (could be negative)',
'Core:AttributeBoolean' => 'Boolean',
'Core:AttributeBoolean+' => 'Boolean',
'Core:AttributeString' => 'String',
'Core:AttributeString+' => 'Alphanumeric string',
'Core:AttributeClass' => 'Class',
'Core:AttributeClass+' => 'Class',
'Core:AttributeApplicationLanguage' => 'User language',
'Core:AttributeApplicationLanguage+' => 'Language and country (EN US)',
'Core:AttributeFinalClass' => 'Class (auto)',
'Core:AttributeFinalClass+' => 'Real class of the object (automatically created by the core)',
'Core:AttributePassword' => 'Password',
'Core:AttributePassword+' => 'Password of an external device',
'Core:AttributeEncryptedString' => 'Encrypted string',
'Core:AttributeEncryptedString+' => 'String encrypted with a local key',
'Core:AttributeText' => 'Text',
'Core:AttributeText+' => 'Multiline character string',
'Core:AttributeHTML' => 'HTML',
'Core:AttributeHTML+' => 'HTML string',
'Core:AttributeEmailAddress' => 'Email address',
'Core:AttributeEmailAddress+' => 'Email address',
'Core:AttributeIPAddress' => 'IP address',
'Core:AttributeIPAddress+' => 'IP address',
'Core:AttributeOQL' => 'OQL',
'Core:AttributeOQL+' => 'Object Query Langage expression',
'Core:AttributeEnum' => 'Enum',
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
'Core:AttributeTemplateString' => 'Template string',
'Core:AttributeTemplateString+' => 'String containing placeholders',
'Core:AttributeTemplateText' => 'Template text',
'Core:AttributeTemplateText+' => 'Text containing placeholders',
'Core:AttributeTemplateHTML' => 'Template HTML',
'Core:AttributeTemplateHTML+' => 'HTML containing placeholders',
'Core:AttributeWikiText' => 'Wiki article',
'Core:AttributeWikiText+' => 'Wiki formatted text',
'Core:AttributeDateTime' => 'Date/time',
'Core:AttributeDateTime+' => 'Date and time (year-month-day hh:mm:ss)',
'Core:AttributeDate' => 'Date',
'Core:AttributeDate+' => 'Date (year-month-day)',
'Core:AttributeDeadline' => 'Deadline',
'Core:AttributeDeadline+' => 'Date, displayed relatively to the current time',
'Core:AttributeExternalKey' => 'External key',
'Core:AttributeExternalKey+' => 'External (or foreign) key',
'Core:AttributeExternalField' => 'External field',
'Core:AttributeExternalField+' => 'Field mapped from an external key',
'Core:AttributeURL' => 'URL',
'Core:AttributeURL+' => 'Absolute or relative URL as a text string',
'Core:AttributeBlob' => 'Blob',
'Core:AttributeBlob+' => 'Any binary content (document)',
'Core:AttributeOneWayPassword' => 'One way password',
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
'Core:AttributeTable' => 'Table',
'Core:AttributeTable+' => 'Indexed array having two dimensions',
'Core:AttributePropertySet' => 'Properties',
'Core:AttributePropertySet+' => 'List of untyped properties (name and value)',
));
//////////////////////////////////////////////////////////////////////
// Classes in 'core/cmdb'
//////////////////////////////////////////////////////////////////////

View File

@@ -408,19 +408,12 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:NoObject_Class_ToDisplay' => 'Nenhum %1$s para mostrar',
'UI:History:LastModified_On_By' => 'Ultima modificacao de %1$s por %2$s.',
'UI:HistoryTab' => 'Historico',
'UI:History:BulkImports' => 'History',
'UI:History:BulkImports+' => 'List of CSV imports (last first)',
'UI:History:BulkImportDetails' => 'Changes resulting from the CSV import performed on %1$s (by %2$s)',
'UI:History:Date' => 'Data',
'UI:History:Date+' => 'Data da alteração',
'UI:History:User' => 'Usuario',
'UI:History:User+' => 'Usuario que fez alteração',
'UI:History:Changes' => 'Alterações',
'UI:History:Changes+' => 'Alterações feita no objeto',
'UI:History:StatsModifs' => 'Modified',
'UI:History:StatsModifs+' => 'Count of objects modified',
'UI:History:StatsDeletes' => 'Deleted',
'UI:History:StatsDeletes+' => 'Count of objects deleted',
'UI:Loading' => 'Carregando...',
'UI:Menu:Actions' => 'Ações',
'UI:Menu:New' => 'Novo...',
@@ -460,8 +453,6 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:Login:IncorrectOldPassword' => 'Erro: senha incorreta',
'UI:LogOffMenu' => 'Sair',
'UI:ChangePwdMenu' => 'Alterar senha...',
'UI:AccessRO-All' => 'iTop is read-only',
'UI:AccessRO-Users' => 'iTop is read-only for end-users',
'UI:Login:RetypePwdDoesNotMatch' => 'A nova senha nao confere!',
'UI:Button:Login' => 'Enter iTop',
'UI:Login:Error:AccessRestricted' => 'iTop accesso restrito. Por favor, contate o suporte.',

View File

@@ -1,385 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Localized data
*
* @author Vladimir Shilov <shilow@ukr.net>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
//////////////////////////////////////////////////////////////////////
// Classes in 'core/cmdb'
//////////////////////////////////////////////////////////////////////
//
//
// Class: CMDBChange
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:CMDBChange' => 'Изменение',
'Class:CMDBChange+' => 'Отслеживание изменений',
'Class:CMDBChange/Attribute:date' => 'дата',
'Class:CMDBChange/Attribute:date+' => 'дата и время регистрации изменений',
'Class:CMDBChange/Attribute:userinfo' => 'разная информация',
'Class:CMDBChange/Attribute:userinfo+' => 'изменение определённые -вызвавшим-',
));
//
// Class: CMDBChangeOp
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:CMDBChangeOp' => 'Операция изменения',
'Class:CMDBChangeOp+' => 'Отслеживание операции изменения',
'Class:CMDBChangeOp/Attribute:change' => 'изменение',
'Class:CMDBChangeOp/Attribute:change+' => 'изменение',
'Class:CMDBChangeOp/Attribute:date' => 'дата',
'Class:CMDBChangeOp/Attribute:date+' => 'дата и время изменения',
'Class:CMDBChangeOp/Attribute:userinfo' => 'пользователь',
'Class:CMDBChangeOp/Attribute:userinfo+' => 'кто сделал изменение',
'Class:CMDBChangeOp/Attribute:objclass' => 'класс объекта',
'Class:CMDBChangeOp/Attribute:objclass+' => 'класс объекта',
'Class:CMDBChangeOp/Attribute:objkey' => 'id объекта',
'Class:CMDBChangeOp/Attribute:objkey+' => 'id объекта',
'Class:CMDBChangeOp/Attribute:finalclass' => 'тип',
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
));
//
// Class: CMDBChangeOpCreate
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:CMDBChangeOpCreate' => 'создание объекта',
'Class:CMDBChangeOpCreate+' => 'Отслеживание создания объекта',
));
//
// Class: CMDBChangeOpDelete
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:CMDBChangeOpDelete' => 'удаление объекта',
'Class:CMDBChangeOpDelete+' => 'Отслеживание удаления объекта',
));
//
// Class: CMDBChangeOpSetAttribute
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:CMDBChangeOpSetAttribute' => 'изменение объекта',
'Class:CMDBChangeOpSetAttribute+' => 'Отслеживание изменения объекта',
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Атрибут',
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => 'код изменённого свойства',
));
//
// Class: CMDBChangeOpSetAttributeScalar
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:CMDBChangeOpSetAttributeScalar' => 'изменение свойства',
'Class:CMDBChangeOpSetAttributeScalar+' => 'Отслеживание изменения скалярного свойства объекта',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Предыдущее значение',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => 'предыдущее значение атрибута',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'Новое значение',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => 'новое значение атрибута',
));
// Used by CMDBChangeOp... & derived classes
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Change:ObjectCreated' => 'Объект создан',
'Change:ObjectDeleted' => 'Объект удалён',
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s установлено в %2$s (предыдущее значение: %3$s)',
'Change:Text_AppendedTo_AttName' => '%1$s добавлено к %2$s',
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s изменено, предыдущее значение: %2$s',
'Change:AttName_Changed' => '%1$s изменено',
));
//
// Class: CMDBChangeOpSetAttributeBlob
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:CMDBChangeOpSetAttributeBlob' => 'изменение данных',
'Class:CMDBChangeOpSetAttributeBlob+' => 'отслеживание изменения данных',
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Предыдущие данные',
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => 'предыдущее содержимое атрибута',
));
//
// Class: CMDBChangeOpSetAttributeText
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:CMDBChangeOpSetAttributeText' => 'изменение текста',
'Class:CMDBChangeOpSetAttributeText+' => 'отслеживание изменения текста',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Предыдущие данные',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => 'предыдущее содержимое атрибута',
));
//
// Class: Event
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:Event' => 'Журнал событий',
'Class:Event+' => 'Внутренние событие приложения',
'Class:Event/Attribute:message' => 'сообщение',
'Class:Event/Attribute:message+' => 'короткое описание собітия',
'Class:Event/Attribute:date' => 'дата',
'Class:Event/Attribute:date+' => 'дата и время регистрации изменений',
'Class:Event/Attribute:userinfo' => 'информация о пользователе',
'Class:Event/Attribute:userinfo+' => 'идентификация пользователя, действия которого вызвали это событие',
'Class:Event/Attribute:finalclass' => 'тип',
'Class:Event/Attribute:finalclass+' => '',
));
//
// Class: EventNotification
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:EventNotification' => 'Уведомление о событии',
'Class:EventNotification+' => 'Отслеживание отосланных уведомлений',
'Class:EventNotification/Attribute:trigger_id' => 'Триггер',
'Class:EventNotification/Attribute:trigger_id+' => 'учётная запись пользователя',
'Class:EventNotification/Attribute:action_id' => 'пользователь',
'Class:EventNotification/Attribute:action_id+' => 'учётная запись пользователя',
'Class:EventNotification/Attribute:object_id' => 'id объекта',
'Class:EventNotification/Attribute:object_id+' => 'id объекта (класс заданный тригером ?)',
));
//
// Class: EventNotificationEmail
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:EventNotificationEmail' => 'Отправка сообщений на e-mail',
'Class:EventNotificationEmail+' => 'Отслеживание отправленных писем',
'Class:EventNotificationEmail/Attribute:to' => 'Кому',
'Class:EventNotificationEmail/Attribute:to+' => 'Кому',
'Class:EventNotificationEmail/Attribute:cc' => 'Копия',
'Class:EventNotificationEmail/Attribute:cc+' => 'Копия',
'Class:EventNotificationEmail/Attribute:bcc' => 'Скрытая копия',
'Class:EventNotificationEmail/Attribute:bcc+' => 'Скрытая копия',
'Class:EventNotificationEmail/Attribute:from' => 'От',
'Class:EventNotificationEmail/Attribute:from+' => 'Отправитель сообщения',
'Class:EventNotificationEmail/Attribute:subject' => 'Тема',
'Class:EventNotificationEmail/Attribute:subject+' => 'Тема',
'Class:EventNotificationEmail/Attribute:body' => 'Тело',
'Class:EventNotificationEmail/Attribute:body+' => 'Тело',
));
//
// Class: EventIssue
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:EventIssue' => 'Выпуск события',
'Class:EventIssue+' => 'Отслеживание выпуска (warning, error, др.)',
'Class:EventIssue/Attribute:issue' => 'Выпуск',
'Class:EventIssue/Attribute:issue+' => 'Что произошло',
'Class:EventIssue/Attribute:impact' => 'Воздействие',
'Class:EventIssue/Attribute:impact+' => 'Последствия',
'Class:EventIssue/Attribute:page' => 'Страница',
'Class:EventIssue/Attribute:page+' => 'Точка входа HTTP',
'Class:EventIssue/Attribute:arguments_post' => 'Отправленные аргументы',
'Class:EventIssue/Attribute:arguments_post+' => 'Аргументы HTTP POST',
'Class:EventIssue/Attribute:arguments_get' => 'Аргументы URL',
'Class:EventIssue/Attribute:arguments_get+' => 'Аргументы HTTP GET',
'Class:EventIssue/Attribute:callstack' => 'Стек?вызовов',
'Class:EventIssue/Attribute:callstack+' => 'Стек вызовов',
'Class:EventIssue/Attribute:data' => 'Данные',
'Class:EventIssue/Attribute:data+' => 'Подробнее',
));
//
// Class: EventWebService
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:EventWebService' => 'События Web сервиса',
'Class:EventWebService+' => 'Trace of an web service call',
'Class:EventWebService/Attribute:verb' => 'Verb',
'Class:EventWebService/Attribute:verb+' => 'Название операции',
'Class:EventWebService/Attribute:result' => 'Результат',
'Class:EventWebService/Attribute:result+' => 'Overall success/failure',
'Class:EventWebService/Attribute:log_info' => 'Info log',
'Class:EventWebService/Attribute:log_info+' => 'Result info log',
'Class:EventWebService/Attribute:log_warning' => 'Warning log',
'Class:EventWebService/Attribute:log_warning+' => 'Result warning log',
'Class:EventWebService/Attribute:log_error' => 'Error log',
'Class:EventWebService/Attribute:log_error+' => 'Result error log',
'Class:EventWebService/Attribute:data' => 'Данные',
'Class:EventWebService/Attribute:data+' => 'Result data',
));
//
// Class: Action
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:Action' => 'Заказное действие',
'Class:Action+' => 'Действие определённое пользователем',
'Class:Action/Attribute:name' => 'Имя',
'Class:Action/Attribute:name+' => '',
'Class:Action/Attribute:description' => 'Описание',
'Class:Action/Attribute:description+' => '',
'Class:Action/Attribute:status' => 'Статус',
'Class:Action/Attribute:status+' => 'В производстве или ?',
'Class:Action/Attribute:status/Value:test' => 'Проходит проверку',
'Class:Action/Attribute:status/Value:test+' => 'Проходит проверку',
'Class:Action/Attribute:status/Value:enabled' => 'В производстве',
'Class:Action/Attribute:status/Value:enabled+' => 'В производстве',
'Class:Action/Attribute:status/Value:disabled' => 'Неактивный',
'Class:Action/Attribute:status/Value:disabled+' => 'Неактивный',
'Class:Action/Attribute:trigger_list' => 'Связанные триггеры',
'Class:Action/Attribute:trigger_list+' => 'Триггеры привызанные к этому действию',
'Class:Action/Attribute:finalclass' => 'Тип',
'Class:Action/Attribute:finalclass+' => '',
));
//
// Class: ActionNotification
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:ActionNotification' => 'Уведомление',
'Class:ActionNotification+' => 'Уведомление (выдержка)',
));
//
// Class: ActionEmail
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:ActionEmail' => 'Уведомление по e-mail',
'Class:ActionEmail+' => '',
'Class:ActionEmail/Attribute:test_recipient' => 'Проверка получателя',
'Class:ActionEmail/Attribute:test_recipient+' => 'Назначение если статус "Test"',
'Class:ActionEmail/Attribute:from' => 'От',
'Class:ActionEmail/Attribute:from+' => 'Будет отослано в заголовке e-mail',
'Class:ActionEmail/Attribute:reply_to' => 'Ответить на',
'Class:ActionEmail/Attribute:reply_to+' => 'Будет отослано в заголовке e-mail',
'Class:ActionEmail/Attribute:to' => 'Кому',
'Class:ActionEmail/Attribute:to+' => 'Получатель e-mail',
'Class:ActionEmail/Attribute:cc' => 'Копия',
'Class:ActionEmail/Attribute:cc+' => 'Копия',
'Class:ActionEmail/Attribute:bcc' => 'Скр. копия',
'Class:ActionEmail/Attribute:bcc+' => 'Скрытая копия',
'Class:ActionEmail/Attribute:subject' => 'тема',
'Class:ActionEmail/Attribute:subject+' => 'Заголовок письма',
'Class:ActionEmail/Attribute:body' => 'тело',
'Class:ActionEmail/Attribute:body+' => 'Содержимое письма',
'Class:ActionEmail/Attribute:importance' => 'значение',
'Class:ActionEmail/Attribute:importance+' => 'Флаг значения',
'Class:ActionEmail/Attribute:importance/Value:low' => 'низкий',
'Class:ActionEmail/Attribute:importance/Value:low+' => 'низкий',
'Class:ActionEmail/Attribute:importance/Value:normal' => 'нормальный',
'Class:ActionEmail/Attribute:importance/Value:normal+' => 'нормальный',
'Class:ActionEmail/Attribute:importance/Value:high' => 'высокий',
'Class:ActionEmail/Attribute:importance/Value:high+' => 'высокий',
));
//
// Class: Trigger
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:Trigger' => 'Триггер',
'Class:Trigger+' => 'Заказной триггер события',
'Class:Trigger/Attribute:description' => 'Описание',
'Class:Trigger/Attribute:description+' => 'однострочное описание',
'Class:Trigger/Attribute:action_list' => 'Действия триггера',
'Class:Trigger/Attribute:action_list+' => 'Действия, выполняемые при активации триггера',
'Class:Trigger/Attribute:finalclass' => 'Тип',
'Class:Trigger/Attribute:finalclass+' => '',
));
//
// Class: TriggerOnObject
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:TriggerOnObject' => 'Триггер (в зависимости класс)',
'Class:TriggerOnObject+' => 'Триггер по даному классу объектов',
'Class:TriggerOnObject/Attribute:target_class' => 'Целевой класс',
'Class:TriggerOnObject/Attribute:target_class+' => '',
));
//
// Class: TriggerOnStateChange
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:TriggerOnStateChange' => 'Триггер (на изменение состояния)',
'Class:TriggerOnStateChange+' => 'Триггер на изменение состояния объекта',
'Class:TriggerOnStateChange/Attribute:state' => 'Статус',
'Class:TriggerOnStateChange/Attribute:state+' => '',
));
//
// Class: TriggerOnStateEnter
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:TriggerOnStateEnter' => 'Триггер (на начало состояния)',
'Class:TriggerOnStateEnter+' => 'Триггер на изменению состояния объекта - начало',
));
//
// Class: TriggerOnStateLeave
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:TriggerOnStateLeave' => 'Триггер (на окончание состояния)',
'Class:TriggerOnStateLeave+' => 'Триггер на изменению состояния объекта - окончание',
));
//
// Class: TriggerOnObjectCreate
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:TriggerOnObjectCreate' => 'Триггер (на создание объекта)',
'Class:TriggerOnObjectCreate+' => 'Триггер на создание объекта [дочерний класс] данного класса',
));
//
// Class: lnkTriggerAction
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:lnkTriggerAction' => 'Действие/Триггер',
'Class:lnkTriggerAction+' => 'Связь между триггером и действий',
'Class:lnkTriggerAction/Attribute:action_id' => 'Действие',
'Class:lnkTriggerAction/Attribute:action_id+' => 'Выполняемое действие',
'Class:lnkTriggerAction/Attribute:action_name' => 'Действие',
'Class:lnkTriggerAction/Attribute:action_name+' => '',
'Class:lnkTriggerAction/Attribute:trigger_id' => 'Триггер',
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
'Class:lnkTriggerAction/Attribute:trigger_name' => 'Триггер',
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
'Class:lnkTriggerAction/Attribute:order' => 'Порядок',
'Class:lnkTriggerAction/Attribute:order+' => 'Порядок выполнения действий',
));
?>

View File

@@ -1,870 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Localized data
*
* @author Vladimir Shilov <shilow@ukr.net>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
//////////////////////////////////////////////////////////////////////
// Classes in 'gui'
//////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////
// Classes in 'application'
//////////////////////////////////////////////////////////////////////
//
//
// Class: AuditCategory
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:AuditCategory' => 'Категория аудита',
'Class:AuditCategory+' => 'Раздел внутри общего аудита',
'Class:AuditCategory/Attribute:name' => 'Название категории',
'Class:AuditCategory/Attribute:name+' => 'Краткое название для этой категории',
'Class:AuditCategory/Attribute:description' => 'Описание категории аудита',
'Class:AuditCategory/Attribute:description+' => 'Полное описание категории аудита',
'Class:AuditCategory/Attribute:definition_set' => 'Набор определений',
'Class:AuditCategory/Attribute:definition_set+' => 'OQL выражение, определяющее набор объектов для проверки',
'Class:AuditCategory/Attribute:rules_list' => 'Правила аудита',
'Class:AuditCategory/Attribute:rules_list+' => 'Правила аудита для этой категории',
));
//
// Class: AuditRule
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:AuditRule' => 'Правило аудита',
'Class:AuditRule+' => 'Правило для проверки данной категории аудита',
'Class:AuditRule/Attribute:name' => 'Название правила',
'Class:AuditRule/Attribute:name+' => 'Краткое название этого правила',
'Class:AuditRule/Attribute:description' => 'Описание правила аудита',
'Class:AuditRule/Attribute:description+' => 'Полное описание этого правила аудита',
'Class:AuditRule/Attribute:query' => 'Запрос на исполнение',
'Class:AuditRule/Attribute:query+' => 'OQL выражение на исполнение',
'Class:AuditRule/Attribute:valid_flag' => 'Действительные объекты?',
'Class:AuditRule/Attribute:valid_flag+' => 'Истина, если правило возвращает действительный объект, иначе ложь',
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'истина',
'Class:AuditRule/Attribute:valid_flag/Value:true+' => 'истина',
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'ложь',
'Class:AuditRule/Attribute:valid_flag/Value:false+' => 'ложь',
'Class:AuditRule/Attribute:category_id' => 'Категория',
'Class:AuditRule/Attribute:category_id+' => 'Категория этого правила',
'Class:AuditRule/Attribute:category_name' => 'Категория',
'Class:AuditRule/Attribute:category_name+' => 'Название категории для этого правила',
));
//////////////////////////////////////////////////////////////////////
// Classes in 'addon/userrights'
//////////////////////////////////////////////////////////////////////
//
//
// Class: User
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:User' => 'Пользователь',
'Class:User+' => 'Пользовательский логин',
'Class:User/Attribute:finalclass' => 'Тип счёта',
'Class:User/Attribute:finalclass+' => '',
'Class:User/Attribute:contactid' => 'Контакт (человек)',
'Class:User/Attribute:contactid+' => 'Личные данные из бизнес-данных',
'Class:User/Attribute:last_name' => 'Фамилия',
'Class:User/Attribute:last_name+' => 'Фамилия соответсвующего контакта',
'Class:User/Attribute:first_name' => 'Имя',
'Class:User/Attribute:first_name+' => 'Имя соответсвующего контакта',
'Class:User/Attribute:email' => 'e-mail',
'Class:User/Attribute:email+' => 'e-mail соответсвующего контакта',
'Class:User/Attribute:login' => 'Логин',
'Class:User/Attribute:login+' => 'строка идентификации пользователя',
'Class:User/Attribute:language' => 'Язык',
'Class:User/Attribute:language+' => 'язык пользователя',
'Class:User/Attribute:language/Value:RU RU' => 'Русский',
'Class:User/Attribute:language/Value:RU RU+' => 'Русский (Россия)',
'Class:User/Attribute:language/Value:EN US' => 'English',
'Class:User/Attribute:language/Value:EN US+' => 'English (U.S.)',
'Class:User/Attribute:language/Value:FR FR' => 'French',
'Class:User/Attribute:language/Value:FR FR+' => 'French (France)',
'Class:User/Attribute:profile_list' => 'Профили',
'Class:User/Attribute:profile_list+' => 'Роли, предоставление прав этому человеку',
'Class:User/Attribute:allowed_org_list' => 'Разрешённые организации',
'Class:User/Attribute:allowed_org_list+' => 'Конечный пользователь имеет право видеть данные, принадлежащие к следующим организациям. Если ни одна организация не указан, нет никаких ограничений.',
'Class:User/Error:LoginMustBeUnique' => 'Логин должен быть уникальным - "%1s" уже используется.',
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'По крайней мере, один профиль должен быть отнесен к этому пользователю.',
));
//
// Class: URP_Profiles
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:URP_Profiles' => 'Профиль',
'Class:URP_Profiles+' => 'Пользовательский профиль',
'Class:URP_Profiles/Attribute:name' => 'Название',
'Class:URP_Profiles/Attribute:name+' => 'метка',
'Class:URP_Profiles/Attribute:description' => 'Описание',
'Class:URP_Profiles/Attribute:description+' => 'однострочное описание',
'Class:URP_Profiles/Attribute:user_list' => 'Пользователи',
'Class:URP_Profiles/Attribute:user_list+' => 'лица, имеющие эту роль',
));
//
// Class: URP_Dimensions
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:URP_Dimensions' => 'размерность',
'Class:URP_Dimensions+' => 'применение размерности (определение силосов)',
'Class:URP_Dimensions/Attribute:name' => 'Название',
'Class:URP_Dimensions/Attribute:name+' => 'метка',
'Class:URP_Dimensions/Attribute:description' => 'Описание',
'Class:URP_Dimensions/Attribute:description+' => 'краткое описание',
'Class:URP_Dimensions/Attribute:type' => 'Тип',
'Class:URP_Dimensions/Attribute:type+' => 'имя класса или типа данных (проекционный блок)',
));
//
// Class: URP_UserProfile
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:URP_UserProfile' => 'Пользователь в профиль',
'Class:URP_UserProfile+' => 'профили пользователей',
'Class:URP_UserProfile/Attribute:userid' => 'Пользователь',
'Class:URP_UserProfile/Attribute:userid+' => 'учетная запись пользователя',
'Class:URP_UserProfile/Attribute:userlogin' => 'Логин',
'Class:URP_UserProfile/Attribute:userlogin+' => 'Логин пользователя',
'Class:URP_UserProfile/Attribute:profileid' => 'Профиль',
'Class:URP_UserProfile/Attribute:profileid+' => 'использование профиля',
'Class:URP_UserProfile/Attribute:profile' => 'Профиль',
'Class:URP_UserProfile/Attribute:profile+' => 'Название профиля',
'Class:URP_UserProfile/Attribute:reason' => 'Причина',
'Class:URP_UserProfile/Attribute:reason+' => 'объяснение, почему этому человеку назначена эта роль',
));
//
// Class: URP_UserOrg
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:URP_UserOrg' => 'Организации пользователя',
'Class:URP_UserOrg+' => 'Разрешённые организации',
'Class:URP_UserOrg/Attribute:userid' => 'Пользователь',
'Class:URP_UserOrg/Attribute:userid+' => 'учетная запись пользователя',
'Class:URP_UserOrg/Attribute:userlogin' => 'Логин',
'Class:URP_UserOrg/Attribute:userlogin+' => 'Логин пользователя',
'Class:URP_UserOrg/Attribute:allowed_org_id' => 'Организация',
'Class:URP_UserOrg/Attribute:allowed_org_id+' => 'Разрешённая организация',
'Class:URP_UserOrg/Attribute:allowed_org_name' => 'Организация',
'Class:URP_UserOrg/Attribute:allowed_org_name+' => 'Разрешённая организация',
'Class:URP_UserOrg/Attribute:reason' => 'Причина',
'Class:URP_UserOrg/Attribute:reason+' => 'объяснение, почему этот человек имеет право видеть данные, принадлежащие к этой организации',
));
//
// Class: URP_ProfileProjection
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:URP_ProfileProjection' => 'проэктирование профилей',
'Class:URP_ProfileProjection+' => 'проэктирование профилей',
'Class:URP_ProfileProjection/Attribute:dimensionid' => 'Размерность',
'Class:URP_ProfileProjection/Attribute:dimensionid+' => 'применение размерности',
'Class:URP_ProfileProjection/Attribute:dimension' => 'Размерность',
'Class:URP_ProfileProjection/Attribute:dimension+' => 'применение размерности',
'Class:URP_ProfileProjection/Attribute:profileid' => 'Профиль',
'Class:URP_ProfileProjection/Attribute:profileid+' => 'использование профиля',
'Class:URP_ProfileProjection/Attribute:profile' => 'Профиль',
'Class:URP_ProfileProjection/Attribute:profile+' => 'Название профиля',
'Class:URP_ProfileProjection/Attribute:value' => 'Значение выражения',
'Class:URP_ProfileProjection/Attribute:value+' => 'OQL выражение (используя $user) | константа | | +атрибут кода',
'Class:URP_ProfileProjection/Attribute:attribute' => 'Атрибут',
'Class:URP_ProfileProjection/Attribute:attribute+' => 'Целевой атрибут кода (необязательный)',
));
//
// Class: URP_ClassProjection
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:URP_ClassProjection' => 'прожктирование классов',
'Class:URP_ClassProjection+' => 'прожктирование классов',
'Class:URP_ClassProjection/Attribute:dimensionid' => 'Размерность',
'Class:URP_ClassProjection/Attribute:dimensionid+' => 'применение размерности',
'Class:URP_ClassProjection/Attribute:dimension' => 'Размерность',
'Class:URP_ClassProjection/Attribute:dimension+' => 'применение размерности',
'Class:URP_ClassProjection/Attribute:class' => 'Класс',
'Class:URP_ClassProjection/Attribute:class+' => 'Целевой класс',
'Class:URP_ClassProjection/Attribute:value' => 'Значение выражения',
'Class:URP_ClassProjection/Attribute:value+' => 'OQL выражение (используя $this) | константа | | +атрибут кода',
'Class:URP_ClassProjection/Attribute:attribute' => 'Атрибут',
'Class:URP_ClassProjection/Attribute:attribute+' => 'Целевой атрибут кода (необязательный)',
));
//
// Class: URP_ActionGrant
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:URP_ActionGrant' => 'действие разрешений',
'Class:URP_ActionGrant+' => 'разрешения на классы',
'Class:URP_ActionGrant/Attribute:profileid' => 'Профиль',
'Class:URP_ActionGrant/Attribute:profileid+' => 'использование профиля',
'Class:URP_ActionGrant/Attribute:profile' => 'Профиль',
'Class:URP_ActionGrant/Attribute:profile+' => 'использование профиля',
'Class:URP_ActionGrant/Attribute:class' => 'Класс',
'Class:URP_ActionGrant/Attribute:class+' => 'Целевой класс',
'Class:URP_ActionGrant/Attribute:permission' => 'Разрешения',
'Class:URP_ActionGrant/Attribute:permission+' => 'разрешено или нет?',
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'да',
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => 'да',
'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'нет',
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => 'нет',
'Class:URP_ActionGrant/Attribute:action' => 'Действие',
'Class:URP_ActionGrant/Attribute:action+' => 'действие выполняемое на данном классе',
));
//
// Class: URP_StimulusGrant
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:URP_StimulusGrant' => 'разрешения стимулов',
'Class:URP_StimulusGrant+' => 'разрешения на стимулы в жизненном цикле объекта',
'Class:URP_StimulusGrant/Attribute:profileid' => 'Профиль',
'Class:URP_StimulusGrant/Attribute:profileid+' => 'использование профиля',
'Class:URP_StimulusGrant/Attribute:profile' => 'Профиль',
'Class:URP_StimulusGrant/Attribute:profile+' => 'использование профиля',
'Class:URP_StimulusGrant/Attribute:class' => 'Класс',
'Class:URP_StimulusGrant/Attribute:class+' => 'Целевой класс',
'Class:URP_StimulusGrant/Attribute:permission' => 'Разрешения',
'Class:URP_StimulusGrant/Attribute:permission+' => 'разрешено или нет?',
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'да',
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => 'да',
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'нет',
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => 'нет',
'Class:URP_StimulusGrant/Attribute:stimulus' => 'Стимулы',
'Class:URP_StimulusGrant/Attribute:stimulus+' => 'код стимулов',
));
//
// Class: URP_AttributeGrant
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:URP_AttributeGrant' => 'разрешения атрибутов',
'Class:URP_AttributeGrant+' => 'разрешения на уровне атрибутов',
'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'Действие предоставления',
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => 'действие предоставления',
'Class:URP_AttributeGrant/Attribute:attcode' => 'Атрибут',
'Class:URP_AttributeGrant/Attribute:attcode+' => 'Код атрибута',
));
//
// String from the User Interface: menu, messages, buttons, etc...
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Menu:WelcomeMenu' => 'Добро пожаловать',
'Menu:WelcomeMenu+' => 'Добро пожаловать в iTop',
'Menu:WelcomeMenuPage' => 'Добро пожаловать',
'Menu:WelcomeMenuPage+' => 'Добро пожаловать в iTop',
'UI:WelcomeMenu:Title' => 'Добро пожаловать в iTop',
'UI:WelcomeMenu:LeftBlock' => '<p>iTop is a complete, OpenSource, IT Operational Portal.</p>
<ul>Он включает:
<li>A complete CMDB (Configuration management database) to document and manage the IT inventory.</li>
<li>Модуль управления инцидентами для отслеживания и общения по вопросам IT.</li>
<li>Модуль управления изменениями для планирования и отслеживания изменений в IT.</li>
<li>База данных известных ошибок для ускорения устранения инцидентов.</li>
<li>Модуль простоев для документирования всех запланированных простоев и оповещения соответстсвующих контактов.</li>
<li>Панели для быстрого обзора IT.</li>
</ul>
<p>Все модули могут быть настроены, шаг за шагом, независмо друг от друга.</p>',
'UI:WelcomeMenu:RightBlock' => '<p>iTop ориентирован на предоставления сервисов, он позволяет IT специалистам легко управляться с несколькими заказчиками или организациями.
<ul>iTop обеспечивает многофункциональный набор бизнес-процессов, которые:
<li>Повышает эффективность управления IT</li>
<li>Повышает производительность IT-операция</li>
<li>Улучшает удовлетворенность клиентов и обеспечивает понимание бизнес-процессов.</li>
</ul>
</p>
<p>iTop полностью открыт для интеграции в рамках текущего управления ИТ-инфраструктурой.</p>
<p>
<ul>Внедрение ИТ-портала нового поколения поможет вам:
<li>Лучше управлять более и более сложными ИТ-окружениями.</li>
<li>Реализовывать процессы ITIL в ваем собственном темпе.</li>
<li>Управлять наиболее важнім активом ИТ: документацией.</li>
</ul>
</p>',
'UI:WelcomeMenu:AllOpenRequests' => 'Открытые запросы: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Мои запросы',
'UI:WelcomeMenu:OpenIncidents' => 'Открытые инциденты: %1$d',
'UI:WelcomeMenu:AllConfigItems' => 'Кофигурационные единицы: %1$d',
'UI:WelcomeMenu:MyIncidents' => 'Инциденты назначенные на меня',
'UI:AllOrganizations' => ' Все организации ',
'UI:YourSearch' => 'Ваш поиск',
'UI:LoggedAsMessage' => 'Вы вошли как %1$s',
'UI:LoggedAsMessage+Admin' => 'Вы вошли как %1$s (Администратор)',
'UI:Button:Logoff' => 'Выход',
'UI:Button:GlobalSearch' => 'Поиск',
'UI:Button:Search' => ' Поиск ',
'UI:Button:Query' => ' Запрос ',
'UI:Button:Ok' => 'Ok',
'UI:Button:Cancel' => 'Отмена',
'UI:Button:Apply' => 'Применить',
'UI:Button:Back' => ' << Назад ',
'UI:Button:Next' => ' Вперёд >> ',
'UI:Button:Finish' => ' Конец ',
'UI:Button:DoImport' => ' Выполнить импорт ! ',
'UI:Button:Done' => ' Сделать ',
'UI:Button:SimulateImport' => ' Эмулировать импорт ',
'UI:Button:Test' => 'Тестировать!',
'UI:Button:Evaluate' => ' Оценка ',
'UI:Button:AddObject' => ' Добавить... ',
'UI:Button:BrowseObjects' => ' Обзор... ',
'UI:Button:Add' => ' Добавить ',
'UI:Button:AddToList' => ' << Добавить ',
'UI:Button:RemoveFromList' => ' Удалить >> ',
'UI:Button:FilterList' => ' Фильтр... ',
'UI:Button:Create' => ' Создать ',
'UI:Button:Delete' => ' Удалить ! ',
'UI:Button:ChangePassword' => ' Сменить пароль ',
'UI:Button:ResetPassword' => ' Сбросить пароль ',
'UI:SearchToggle' => 'Поиск',
'UI:ClickToCreateNew' => 'Создать новый %1$s',
'UI:SearchFor_Class' => 'Поиск для %1$s объектов',
'UI:NoObjectToDisplay' => 'Нет объектов для отображения.',
'UI:Error:MandatoryTemplateParameter_object_id' => 'Параметр object_id является обязательным если указан link_attr. Проверьте определение отображения шаблона.',
'UI:Error:MandatoryTemplateParameter_target_attr' => 'Параметр object_id является обязательным если указан link_attr. Проверьте определение отображения шаблона',
'UI:Error:MandatoryTemplateParameter_group_by' => 'Параметр group_by является обязательным. Проверьте определение отображения шаблона.',
'UI:Error:InvalidGroupByFields' => 'Неверный список полей для группировки: "%1$s".',
'UI:Error:UnsupportedStyleOfBlock' => 'Ошибка: неподдерживаемый стиль блока: "%1$s".',
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Неправильное определение ссылки: класс объектов для управления: %1$s не был найден в качестве внешнего ключа в классе %2$s',
'UI:Error:Object_Class_Id_NotFound' => 'Объект: %1$s:%2$d не найден.',
'UI:Error:WizardCircularReferenceInDependencies' => 'Ошибка: Циклическая ссылка в зависимостях между полями, проверить модель данных.',
'UI:Error:UploadedFileTooBig' => 'Загружаемый файл слишком большой. (Максимально разрешённый размер %1$s). Проверьте в конфинурации PHP параметры upload_max_filesize и post_max_size.',
'UI:Error:UploadedFileTruncated.' => 'Загруженный файл был усечен !',
'UI:Error:NoTmpDir' => 'Временный каталог не определен.',
'UI:Error:CannotWriteToTmp_Dir' => ' Невозможно записать временный файл на диск. upload_tmp_dir = "%1$s".',
'UI:Error:UploadStoppedByExtension_FileName' => 'Загрузка остановлена по расширению. (Имя файла = "%1$s").',
'UI:Error:UploadFailedUnknownCause_Code' => 'Загрузка файла не удалась по неизвестной причине. (Код ошибки = "%1$s").',
'UI:Error:1ParametersMissing' => 'Ошибка: следующий параметр должен быть указан для этой операции: %1$s.',
'UI:Error:2ParametersMissing' => 'Ошибка: следующие параметры должен быть указан для этой операции: %1$s и %2$s.',
'UI:Error:3ParametersMissing' => 'Ошибка: следующие параметры должен быть указан для этой операции: %1$s, %2$s и %3$s.',
'UI:Error:4ParametersMissing' => 'Ошибка: следующие параметры должен быть указан для этой операции: %1$s, %2$s, %3$s и %4$s.',
'UI:Error:IncorrectOQLQuery_Message' => 'Ошибка: неправильній запрос OQL: %1$s',
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Ошибка при выполнении запроса: %1$s',
'UI:Error:ObjectAlreadyUpdated' => 'Ошибка: объект уже обновлён.',
'UI:Error:ObjectCannotBeUpdated' => 'Ошибка: объект не может быть обновлён.',
'UI:Error:ObjectsAlreadyDeleted' => 'Ошибка: объект уже удалён!',
'UI:Error:BulkDeleteNotAllowedOn_Class' => 'Вам не разрешено выполнять массовое удаления объектов класса %1$s',
'UI:Error:DeleteNotAllowedOn_Class' => 'Вы не можете удалять объекты класса %1$s',
'UI:Error:BulkModifyNotAllowedOn_Class' => 'Вам не разрешено выполнять массовое обновление объектов класса %1$s',
'UI:Error:ObjectAlreadyCloned' => 'Ошибка: объект уже клонирован!',
'UI:Error:ObjectAlreadyCreated' => 'Ошибка: объект уже создан!',
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Ошибка: недействительный стимул "%1$s" на объекте %2$s в состоянии "%3$s".',
'UI:GroupBy:Count' => 'Счётчик',
'UI:GroupBy:Count+' => 'Количество элементов',
'UI:CountOfObjects' => '%1$d объектов соответствует критериям.',
'UI_CountOfObjectsShort' => '%1$d объектов.',
'UI:NoObject_Class_ToDisplay' => 'Нечего отображать %1$s',
'UI:History:LastModified_On_By' => 'Последнее изменение %1$s by %2$s.',
'UI:HistoryTab' => 'История',
'UI:NotificationsTab' => 'Оповещения',
'UI:History:Date' => 'Дата',
'UI:History:Date+' => 'Дата изменения',
'UI:History:User' => 'Пользователь',
'UI:History:User+' => 'Пользователь сделавший изменение',
'UI:History:Changes' => 'Изменения',
'UI:History:Changes+' => 'Изменения, внесенные в объект',
'UI:Loading' => 'Загрузка...',
'UI:Menu:Actions' => 'Действия',
'UI:Menu:New' => 'Новый...',
'UI:Menu:Add' => 'Добавить...',
'UI:Menu:Manage' => 'Управление...',
'UI:Menu:EMail' => 'eMail',
'UI:Menu:CSVExport' => 'Экспорт CSV',
'UI:Menu:Modify' => 'Изменить...',
'UI:Menu:Delete' => 'Удалить...',
'UI:Menu:Manage' => 'Управление...',
'UI:Menu:BulkDelete' => 'Удалить...',
'UI:UndefinedObject' => 'неопределённый',
'UI:Document:OpenInNewWindow:Download' => 'Открыть в новом окне: %1$s, Загрузка: %2$s',
'UI:SelectAllToggle+' => 'Выбрать / Отменить всё',
'UI:TruncatedResults' => '%1$d объектов отображено из %2$d',
'UI:DisplayAll' => 'Показать всё',
'UI:CollapseList' => 'Свернуть',
'UI:CountOfResults' => '%1$d объект(ы)',
'UI:ChangesLogTitle' => 'Журнал изменений (%1$d):',
'UI:EmptyChangesLogTitle' => 'Журнал изменений пустой',
'UI:SearchFor_Class_Objects' => 'Поиск объекта %1$s',
'UI:OQLQueryBuilderTitle' => 'Коструктор запросов OQL',
'UI:OQLQueryTab' => 'Запрос OQL',
'UI:SimpleSearchTab' => 'Простой поиск',
'UI:Details+' => 'Подробности',
'UI:SearchValue:Any' => '* Любой *',
'UI:SearchValue:Mixed' => '* смешанный *',
'UI:SelectOne' => '-- выбрать один --',
'UI:Login:Welcome' => 'Добро пожаловать в iTop!',
'UI:Login:IncorrectLoginPassword' => 'Неправильный логин/пароль. Пожалуйста, попробуйте еще раз.',
'UI:Login:IdentifyYourself' => 'Представтесть, прежде чем продолжить',
'UI:Login:UserNamePrompt' => 'Имя пользователя',
'UI:Login:PasswordPrompt' => 'Пароль',
'UI:Login:ChangeYourPassword' => 'Изменение пароля',
'UI:Login:OldPasswordPrompt' => 'Старый пароль',
'UI:Login:NewPasswordPrompt' => 'Новый пароль',
'UI:Login:RetypeNewPasswordPrompt' => 'Повтор нового пароля',
'UI:Login:IncorrectOldPassword' => 'Ошибка: старый пароль неверный',
'UI:LogOffMenu' => 'Выход',
'UI:LogOff:ThankYou' => 'Спасибо за использование iTop',
'UI:LogOff:ClickHereToLoginAgain' => 'Нажмите здесь, чтобы снова войти...',
'UI:ChangePwdMenu' => 'Изменить пароль...',
'UI:Login:RetypePwdDoesNotMatch' => 'Новый пароль и повторный пароль не совпадают!',
'UI:Button:Login' => 'Введите iTop',
'UI:Login:Error:AccessRestricted' => 'Доступ к iTop ограничен. Пожалуйста, свяжитесь с администратором iTop.',
'UI:Login:Error:AccessAdmin' => 'Доступ ограничен для лиц с административными привилегиями. Пожалуйста, свяжитесь с администратором iTop.',
'UI:CSVImport:MappingSelectOne' => '-- выбрать один --',
'UI:CSVImport:MappingNotApplicable' => '-- игнорировать это поле --',
'UI:CSVImport:NoData' => 'Пустой набор данных..., пожалуйста введите что-нибудь!',
'UI:Title:DataPreview' => 'Предпросмотр данных',
'UI:CSVImport:ErrorOnlyOneColumn' => 'Ошибка: Данные содежат только одну колонку. Выбран правильный разделитель?',
'UI:CSVImport:FieldName' => 'Поле %1$d',
'UI:CSVImport:DataLine1' => 'Строка данных 1',
'UI:CSVImport:DataLine2' => 'Строка данных 2',
'UI:CSVImport:idField' => 'id (Первичный ключ)',
'UI:Title:BulkImport' => 'iTop - Пакетный импорт',
'UI:Title:BulkImport+' => 'Мастер импорта CSV',
'UI:CSVImport:ClassesSelectOne' => '-- выбрать один --',
'UI:CSVImport:ErrorExtendedAttCode' => 'Внутренняя ошибка: "%1$s" некорректный код потому, что "%2$s" НЕ являеться внешним ключём класса "%3$s"',
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d объект(ы) останеться неизменным.',
'UI:CSVImport:ObjectsWillBeModified' => '%1$d объект(ы) будет изменён.',
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d объект(ы) будет добавлен.',
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d объект(ы) будут ошибочны.',
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d объект(ы) остался неизменённым.',
'UI:CSVImport:ObjectsWereModified' => '%1$d объект(ы) изменён.',
'UI:CSVImport:ObjectsWereAdded' => '%1$d объект(ы) был добавлен.',
'UI:CSVImport:ObjectsHadErrors' => '%1$d объект(ы) содержит ошибки.',
'UI:Title:CSVImportStep2' => 'Step 2 of 5: Опции данных CSV',
'UI:Title:CSVImportStep3' => 'Step 3 of 5: Распределение данных',
'UI:Title:CSVImportStep4' => 'Step 4 of 5: Симуляция импорта',
'UI:Title:CSVImportStep5' => 'Step 5 of 5: Импорт завершён',
'UI:CSVImport:LinesNotImported' => 'Строки небыли загружены:',
'UI:CSVImport:LinesNotImported+' => 'Следующие строки не были импортированы, потому что они содержат ошибки',
'UI:CSVImport:SeparatorComma+' => ', (запятая)',
'UI:CSVImport:SeparatorSemicolon+' => '; (точка с запятой)',
'UI:CSVImport:SeparatorTab+' => 'табулятор',
'UI:CSVImport:SeparatorOther' => 'другое:',
'UI:CSVImport:QualifierDoubleQuote+' => '" (двойная кавычка)',
'UI:CSVImport:QualifierSimpleQuote+' => '\' (одинарная кавычка)',
'UI:CSVImport:QualifierOther' => 'другое:',
'UI:CSVImport:TreatFirstLineAsHeader' => 'Использовать первую строку как заголовок (названия столбцов)',
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Пропустить %1$s строк(у) от начала файла',
'UI:CSVImport:CSVDataPreview' => 'Предпросмотр данных CSV',
'UI:CSVImport:SelectFile' => 'Выбор файла для иморта:',
'UI:CSVImport:Tab:LoadFromFile' => 'Загрузить из файла',
'UI:CSVImport:Tab:CopyPaste' => 'Копировать и вставить данные',
'UI:CSVImport:Tab:Templates' => 'Шаблоны',
'UI:CSVImport:PasteData' => 'Вставить данные для импорта:',
'UI:CSVImport:PickClassForTemplate' => 'Выбор шаблона для загрузки: ',
'UI:CSVImport:SeparatorCharacter' => 'Символ разделителя:',
'UI:CSVImport:TextQualifierCharacter' => 'Символ экранирования текста',
'UI:CSVImport:CommentsAndHeader' => 'Коментарии и заголовок',
'UI:CSVImport:SelectClass' => 'Выбор класса импорта:',
'UI:CSVImport:AdvancedMode' => 'Расширенный режим',
'UI:CSVImport:AdvancedMode+' => 'В расширенном режиме "id" (первичный ключ) объекта может быть использован для обновления и переименования объектов.' .
'Однако колонка "id" (if present) может быть использовать только как критерий поиска и не модет быть совмещена с любым другим критерием поиска.',
'UI:CSVImport:SelectAClassFirst' => 'Для настройки рапределения, в первую очередь выберите класс.',
'UI:CSVImport:HeaderFields' => 'Поля',
'UI:CSVImport:HeaderMappings' => 'Распределение',
'UI:CSVImport:HeaderSearch' => 'Поиск?',
'UI:CSVImport:AlertIncompleteMapping' => 'Необходимо выбрать распределение для каждой ячейки.',
'UI:CSVImport:AlertNoSearchCriteria' => 'Необходимо выбрать, по крайней мере один критерий',
'UI:CSVImport:Encoding' => 'Кодировка символов',
'UI:UniversalSearchTitle' => 'iTop - Универсальный поиск',
'UI:UniversalSearch:Error' => 'Ошибка: %1$s',
'UI:UniversalSearch:LabelSelectTheClass' => 'Выбор класса для поиска: ',
'UI:Audit:Title' => 'iTop - Аудит CMDB',
'UI:Audit:InteractiveAudit' => 'Интерактивный аудит',
'UI:Audit:HeaderAuditRule' => 'Правило аудита',
'UI:Audit:HeaderNbObjects' => '# Объекты',
'UI:Audit:HeaderNbErrors' => '# Ошибки',
'UI:Audit:PercentageOk' => '% Ok',
'UI:RunQuery:Title' => 'iTop - Оценка запросов OQL',
'UI:RunQuery:QueryExamples' => 'Примеры запросов',
'UI:RunQuery:HeaderPurpose' => 'Цель',
'UI:RunQuery:HeaderPurpose+' => 'Объяснение запросов',
'UI:RunQuery:HeaderOQLExpression' => 'Выражение OQL',
'UI:RunQuery:HeaderOQLExpression+' => 'Запрос в синтаксисе OQL',
'UI:RunQuery:ExpressionToEvaluate' => 'Оценка віражения: ',
'UI:RunQuery:MoreInfo' => 'Подробная информация о запросе: ',
'UI:RunQuery:DevelopedQuery' => 'Переработанное выражение запроса: ',
'UI:RunQuery:SerializedFilter' => 'Сериализованные фильты: ',
'UI:RunQuery:Error' => 'Ошибка при выполнении запроса: %1$s',
'UI:Schema:Title' => 'iTop схема объектов',
'UI:Schema:CategoryMenuItem' => 'Категория <b>%1$s</b>',
'UI:Schema:Relationships' => 'Отношения',
'UI:Schema:AbstractClass' => 'Абстрактный класс: ни один объект из этого класса может быть создан.',
'UI:Schema:NonAbstractClass' => 'Не абстрактный класс: объекты этого класса могут быть созданы.',
'UI:Schema:ClassHierarchyTitle' => 'Иерархия классов',
'UI:Schema:AllClasses' => 'Все классы',
'UI:Schema:ExternalKey_To' => 'Внешний ключ %1$s',
'UI:Schema:Columns_Description' => 'Столбцы: <em>%1$s</em>',
'UI:Schema:Default_Description' => 'По умолчанию: "%1$s"',
'UI:Schema:NullAllowed' => 'Null разрешён',
'UI:Schema:NullNotAllowed' => 'Null НЕ разрешён',
'UI:Schema:Attributes' => 'Атрибуты',
'UI:Schema:AttributeCode' => 'Код атрибута',
'UI:Schema:AttributeCode+' => 'Внутренний код атрибута',
'UI:Schema:Label' => 'Метка',
'UI:Schema:Label+' => 'Метка атрибута',
'UI:Schema:Type' => 'Тип',
'UI:Schema:Type+' => 'Тип данных атрибута',
'UI:Schema:Origin' => 'Происхождение',
'UI:Schema:Origin+' => 'Базовый класс, в котором этот атрибут определен',
'UI:Schema:Description' => 'Описание',
'UI:Schema:Description+' => 'Описание атрибута',
'UI:Schema:AllowedValues' => 'Допустимые значения',
'UI:Schema:AllowedValues+' => 'Ограничения на возможные значения для этого атрибута',
'UI:Schema:MoreInfo' => 'Подробнее',
'UI:Schema:MoreInfo+' => 'Более подробная информация о поле, определённом в базе данных',
'UI:Schema:SearchCriteria' => 'Критерий поиска',
'UI:Schema:FilterCode' => 'Код фильтра',
'UI:Schema:FilterCode+' => 'Код критерия поиска',
'UI:Schema:FilterDescription' => 'Описание',
'UI:Schema:FilterDescription+' => 'Описание еритерия поиска',
'UI:Schema:AvailOperators' => 'Доступные операторы',
'UI:Schema:AvailOperators+' => 'Возможные операторы для этого критерия поиска',
'UI:Schema:ChildClasses' => 'Дочерние классы',
'UI:Schema:ReferencingClasses' => 'Привязки классов',
'UI:Schema:RelatedClasses' => 'Зависимые классы',
'UI:Schema:LifeCycle' => 'Жизненный цикл',
'UI:Schema:Triggers' => 'Триггеры',
'UI:Schema:Relation_Code_Description' => 'Зависимость <em>%1$s</em> (%2$s)',
'UI:Schema:RelationDown_Description' => 'Вниз: %1$s',
'UI:Schema:RelationUp_Description' => 'Вверх: %1$s',
'UI:Schema:RelationPropagates' => '%1$s: распространяется на %2$d уровней, запрос: %3$s',
'UI:Schema:RelationDoesNotPropagate' => '%1$s: не распространяется (%2$d уровней), запрос: %3$s',
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s связан с классом %2$s через поле %3$s',
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s связан с %2$s через %3$s::<em>%4$s</em>',
'UI:Schema:Links:1-n' => 'Классы, указывающие на %1$s (1:n ссылки):',
'UI:Schema:Links:n-n' => 'Классы связаны с %1$s (n:n сслыки):',
'UI:Schema:Links:All' => 'График всех связанных классов',
'UI:Schema:NoLifeCyle' => 'Не определён жизненный цикл для этих классов.',
'UI:Schema:LifeCycleTransitions' => 'Переходы',
'UI:Schema:LifeCyleAttributeOptions' => 'Варианты атрибутов',
'UI:Schema:LifeCycleHiddenAttribute' => 'Скрытый',
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Только для чтения',
'UI:Schema:LifeCycleMandatoryAttribute' => 'Обязательный',
'UI:Schema:LifeCycleAttributeMustChange' => 'Необходимо изменить',
'UI:Schema:LifeCycleAttributeMustPrompt' => 'Пользователю будет предложено изменить значение',
'UI:Schema:LifeCycleEmptyList' => 'пустой список',
'UI:LinksWidget:Autocomplete+' => 'Введите первые 3 символа...',
'UI:Combo:SelectValue' => '--- выбор значения ---',
'UI:Label:SelectedObjects' => 'Выбранные объекты: ',
'UI:Label:AvailableObjects' => 'Доступные объекты: ',
'UI:Link_Class_Attributes' => '%1$s атрибуты',
'UI:SelectAllToggle+' => 'Выбрать всё / Отменить всё',
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Добавить %1$s объекты связанные с %2$s: %3$s',
'UI:AddObjectsOf_Class_LinkedWith_Class' => 'Добавть %1$s объекты для связи с %2$s',
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Управление %1$s объектами связанными с %2$s: %3$s',
'UI:AddLinkedObjectsOf_Class' => 'Добавить %1$ss...',
'UI:RemoveLinkedObjectsOf_Class' => 'Удалить выбранные объекты',
'UI:Message:EmptyList:UseAdd' => 'Список пуст, используй кнопку "Добавить ...", для добавения элементов.',
'UI:Message:EmptyList:UseSearchForm' => 'Используйте форму поиска выше для поиска объектов, которые будут добавлены.',
'UI:Wizard:FinalStepTitle' => 'Последний шаг: подтверждение',
'UI:Title:DeletionOf_Object' => 'Удаление %1$s',
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Пакетное удаление %1$d объектов класса %2$s',
'UI:Delete:NotAllowedToDelete' => 'Вы не можете удалить этот объект',
'UI:Delete:NotAllowedToUpdate_Fields' => 'Вы не можете обновить следующее(ие) поле(я): %1$s',
'UI:Error:NotEnoughRightsToDelete' => 'Этот объект не может быть удален, потому что текущий пользователь не имеет достаточных прав',
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Этот объект не может быть удален, потому что некоторые ручные операции должны быть выполнены до этого',
'UI:Archive_User_OnBehalfOf_User' => '%1$s от имени %2$s',
'UI:Delete:AutomaticallyDeleted' => 'автоматически удалён',
'UI:Delete:AutomaticResetOf_Fields' => 'автоматически сброшено поле(я): %1$s',
'UI:Delete:CleaningUpRefencesTo_Object' => 'Очищенны все ссылки(связи?) на %1$s...',
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Очищенны все ссылки(связи?) на %1$d объектов класса %2$s...',
'UI:Delete:Done+' => 'Что было сделано...',
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s удалено.',
'UI:Delete:ConfirmDeletionOf_Name' => 'Удаление %1$s',
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Удаление %1$d объектов класса %2$s',
'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Должно быть автоматичски удалено, но вы не можете это сделать',
'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Необходимо удалить вручную - но вы не можете удалить этот объект, свяжитесь с администратором вашего приложения',
'UI:Delete:WillBeDeletedAutomatically' => 'Будет удалено автоматически',
'UI:Delete:MustBeDeletedManually' => 'Необходимо удалить вручную',
'UI:Delete:CannotUpdateBecause_Issue' => 'Должно быть автоматически обновлено, но: %1$s',
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'будет автоматически обновлено (сброс: %1$s)',
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d объектов/связей ссылаются(связаны?) %2$s',
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d объектов/связей ссылаются на объекты, которые будут удалены',
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'Для обеспечения целостности базы данных, необходимо устранить все связи',
'UI:Delete:Consequence+' => 'Что будет сделано',
'UI:Delete:SorryDeletionNotAllowed' => 'К сожалению, вы не можете удалить этот объект, см. подробное объяснение выше',
'UI:Delete:PleaseDoTheManualOperations' => 'Необходимо выполнить указанные ручные операции до запроса на удаление этого объекта',
'UI:Delect:Confirm_Object' => 'Подтвердите удаление %1$s.',
'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Подтвердите удаление %1$d объектов класса %2$s.',
'UI:WelcomeToITop' => 'Добро пожаловать в iTop',
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s подробности',
'UI:ErrorPageTitle' => 'iTop - Ошибка',
'UI:ObjectDoesNotExist' => 'Извните, этот объект не существует (или вы не можете его видеть).',
'UI:SearchResultsPageTitle' => 'iTop - Результаты поиска',
'UI:Search:NoSearch' => 'Ничего не найдено',
'UI:FullTextSearchTitle_Text' => 'Результаты для "%1$s":',
'UI:Search:Count_ObjectsOf_Class_Found' => '%1$d объект(ы) класса %2$s найдено.',
'UI:Search:NoObjectFound' => 'Объекты не найдены.',
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s модификации',
'UI:ModificationTitle_Class_Object' => 'Модификации %1$s: <span class=\"hilite\">%2$s</span>',
'UI:ClonePageTitle_Object_Class' => 'iTop - Клон %1$s - %2$s модификация',
'UI:CloneTitle_Class_Object' => 'Клон %1$s: <span class=\"hilite\">%2$s</span>',
'UI:CreationPageTitle_Class' => 'iTop - Создание нового %1$s ',
'UI:CreationTitle_Class' => 'Создание нового %1$s',
'UI:SelectTheTypeOf_Class_ToCreate' => 'Выбор типа %1$s для создания:',
'UI:Class_Object_NotUpdated' => 'Изменений не обнаружено, %1$s (%2$s) <strong>не</strong> был изменён.',
'UI:Class_Object_Updated' => '%1$s (%2$s) обновлён.',
'UI:BulkDeletePageTitle' => 'iTop - Пакетное удаление',
'UI:BulkDeleteTitle' => 'Выбор объектов для удаления:',
'UI:PageTitle:ObjectCreated' => 'iTop Объект создан.',
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s создан.',
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Применение %1$s на объект: %2$s в состоянии %3$s для целевого класса: %4$s.',
'UI:ObjectCouldNotBeWritten' => 'Объект не может быть записан: %1$s',
'UI:PageTitle:FatalError' => 'iTop - Фатальная ошибка',
'UI:SystemIntrusion' => 'Доступ запрещён. Вы пытаетесь выполнить неразрешённую операцию.',
'UI:FatalErrorMessage' => 'Фатальная ошибка, iTop не может продолжать.',
'UI:Error_Details' => 'Ошибка: %1$s.',
'UI:PageTitle:ClassProjections' => 'iTop управление пользователями - проектирование классов',
'UI:PageTitle:ProfileProjections' => 'iTop управление пользователями - проектирование профилей',
'UI:UserManagement:Class' => 'Классs',
'UI:UserManagement:Class+' => 'Класс объектов',
'UI:UserManagement:ProjectedObject' => 'Объект',
'UI:UserManagement:ProjectedObject+' => 'Проектируемый объект',
'UI:UserManagement:AnyObject' => '* любой *',
'UI:UserManagement:User' => 'Пользователь',
'UI:UserManagement:User+' => 'Пользователь учавствует',
'UI:UserManagement:Profile' => 'Профиль',
'UI:UserManagement:Profile+' => 'Профиль, указанный в проектировании',
'UI:UserManagement:Action:Read' => 'Чтение',
'UI:UserManagement:Action:Read+' => 'Чтение/отображение объектов',
'UI:UserManagement:Action:Modify' => 'Modify',
'UI:UserManagement:Action:Modify+' => 'Создание и редактирование (изменение) объектов',
'UI:UserManagement:Action:Delete' => 'Удаление',
'UI:UserManagement:Action:Delete+' => 'Удаление объектов',
'UI:UserManagement:Action:BulkRead' => 'Пакетное чтение (Экспорт)',
'UI:UserManagement:Action:BulkRead+' => 'Список оъектов или массовый экспорт',
'UI:UserManagement:Action:BulkModify' => 'Пакетное изменение',
'UI:UserManagement:Action:BulkModify+' => 'Массовое создание/редактирование (импорт CSV)',
'UI:UserManagement:Action:BulkDelete' => 'Пакетное удаление',
'UI:UserManagement:Action:BulkDelete+' => 'Массовое удаление объектов',
'UI:UserManagement:Action:Stimuli' => 'Стимулы',
'UI:UserManagement:Action:Stimuli+' => 'Допустимые (составные) действия',
'UI:UserManagement:Action' => 'Действие',
'UI:UserManagement:Action+' => 'Действие, выполняемое пользователем',
'UI:UserManagement:TitleActions' => 'Действия',
'UI:UserManagement:Permission' => 'Разрешения',
'UI:UserManagement:Permission+' => 'Пользовательские разрешения',
'UI:UserManagement:Attributes' => 'Атрибуты',
'UI:UserManagement:ActionAllowed:Yes' => 'Да',
'UI:UserManagement:ActionAllowed:No' => 'Нет',
'UI:UserManagement:AdminProfile+' => 'Администраторы имеют полный доступ на чтение/запись всех объектов в базе данных.',
'UI:UserManagement:NoLifeCycleApplicable' => 'не определено',
'UI:UserManagement:NoLifeCycleApplicable+' => 'Не определён жизненній цикл для данного класса',
'UI:UserManagement:GrantMatrix' => 'Матрица разрешений',
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Связь между %1$s и %2$s',
'UI:UserManagement:LinkBetween_User_And_Org' => 'Связь между %1$s и %2$s',
'Menu:AdminTools' => 'Инструменты админа',
'Menu:AdminTools+' => 'Административные инструменты',
'Menu:AdminTools?' => 'Инструменты доступны только для пользователей, имеющих профиль администратора',
'UI:ChangeManagementMenu' => 'Управление изменениями',
'UI:ChangeManagementMenu+' => 'Управление изменениями',
'UI:ChangeManagementMenu:Title' => 'Обзор изменений',
'UI-ChangeManagementMenu-ChangesByType' => 'Изменения по типу',
'UI-ChangeManagementMenu-ChangesByStatus' => 'Изменения по статутсу',
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Изменения по рабочей группе',
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Не назначенные изменения',
'UI:ConfigurationItemsMenu'=> 'Элементы конфигурации',
'UI:ConfigurationItemsMenu+'=> 'Все устройства',
'UI:ConfigurationItemsMenu:Title' => 'Обзор элементов конфигурации',
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Серверы по критичности',
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'ПК по критичности',
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Сетевые устройства по критичности',
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Приложения по критичности',
'UI:ConfigurationManagementMenu' => 'Управление конфигурациями',
'UI:ConfigurationManagementMenu+' => 'Управление конфигурациями',
'UI:ConfigurationManagementMenu:Title' => 'Обзор инфраструктуры',
'UI-ConfigurationManagementMenu-InfraByType' => 'Объекты инфраструктуры по типу',
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Объекты инфраструктуры по статусу',
'UI:ConfigMgmtMenuOverview:Title' => 'Панель управления конфигурациями',
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Элементы конфигурации по статусу',
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Элементы конфигурации по типу',
'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:ChangeMgmtMenuOverview:Title' => 'Панель управления изменениями',
'UI-ChangeManagementOverview-ChangeByType' => 'Изменения по типу',
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Изменения не назначенные не на один агент',
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Отключения в связи с изменениями',
'UI:ServiceMgmtMenuOverview:Title' => 'Панель управления сервисами',
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Договора с клиентами, которые будут обновлены в течении 30 дней',
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Договора с поставщиками, которые будут обновлены в течении 30 дней',
'UI:ContactsMenu' => 'Договора',
'UI:ContactsMenu+' => 'Договора',
'UI:ContactsMenu:Title' => 'Обзор договоров',
'UI-ContactsMenu-ContactsByLocation' => 'Договора по размещению',
'UI-ContactsMenu-ContactsByType' => 'Договора по типу',
'UI-ContactsMenu-ContactsByStatus' => 'Договора по статусу',
'Menu:CSVImportMenu' => 'Импорт CSV',
'Menu:CSVImportMenu+' => 'Пакетное создание или обновление',
'Menu:DataModelMenu' => 'Модель данных',
'Menu:DataModelMenu+' => 'Обзор модели данных',
'Menu:ExportMenu' => 'Экспорт',
'Menu:ExportMenu+' => 'Экспорт результатов любого запроса в HTML, CSV или XML',
'Menu:NotificationsMenu' => 'Уведомления',
'Menu:NotificationsMenu+' => 'Конфигурация уведомлений',
'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 разных фазы жизненного цикла объекта:
<ol>
<li>the "OnCreate" триггеры сработают когда объект заданного класса будет создан</li>
<li>the "OnStateEnter" триггеры сработают перед тем как объект заданного класса войдёт в заданное состояние (выйдет из другого состояния)</li>
<li>the "OnStateLeave" триггеры сработают когда объекты заданного класса выйдут из заданного состояния</li>
</ol>
</p>
<p>
<i><b>Действия</b></i> определяют, какое действие будет выполнено при срабатывании триггера. Пока есть только одно действие, которое состоит в отправке сообщения на электронную почту.
Эти действия также определяют шаблон, который будет использован для отправки электронного сообщения, а также другие параметры сообщения, такие как получатель, важность и т.д.
</p>
<p>Специальная страница: <a href="../setup/email.test.php" target="_blank">email.test.php</a> доступна для тестирования и устранения неполадок в настройка почты в PHP.</p>
<p>Чтобы быть выполненными, действия необходимо ассоциировать с триггерами.
При ассоциации с триггером, каждое действие получает "порядковый" номер, который определяет порядок выполнения действий.</p>',
'UI:NotificationsMenu:Triggers' => 'Триггеры',
'UI:NotificationsMenu:AvailableTriggers' => 'Доступные триггеры',
'UI:NotificationsMenu:OnCreate' => 'При создании объекта',
'UI:NotificationsMenu:OnStateEnter' => 'При входе объекта в заданное состояние',
'UI:NotificationsMenu:OnStateLeave' => 'При выходе объекта из заданного состояния',
'UI:NotificationsMenu:Actions' => 'Действия',
'UI:NotificationsMenu:AvailableActions' => 'Доступные действия',
'Menu:AuditCategories' => 'Категории аудита',
'Menu:AuditCategories+' => 'Категории аудита',
'Menu:Notifications:Title' => 'Категории аудита',
'Menu:RunQueriesMenu' => 'Выполнение запросов',
'Menu:RunQueriesMenu+' => 'Выполнение любых запросов',
'Menu:DataAdministration' => 'Административные данные',
'Menu:DataAdministration+' => 'Административные данные',
'Menu:UniversalSearchMenu' => 'Универсальный поиск',
'Menu:UniversalSearchMenu+' => 'Поиск чего угодно...',
'Menu:ApplicationLogMenu' => 'Логгирование приложения',
'Menu:ApplicationLogMenu+' => 'Логгирование приложения',
'Menu:ApplicationLogMenu:Title' => 'Логгирование приложения',
'Menu:UserManagementMenu' => 'Управление пользователями',
'Menu:UserManagementMenu+' => 'Управление пользователями',
'Menu:ProfilesMenu' => 'Профили',
'Menu:ProfilesMenu+' => 'Профили',
'Menu:ProfilesMenu:Title' => 'Профили',
'Menu:UserAccountsMenu' => 'Учетные записи пользователей',
'Menu:UserAccountsMenu+' => 'Учетные записи пользователей',
'Menu:UserAccountsMenu:Title' => 'Учетные записи пользователей',
'UI:iTopVersion:Short' => 'iTop версия %1$s',
'UI:iTopVersion:Long' => 'iTop версия %1$s-%2$s основан на %3$s',
'UI:PropertiesTab' => 'Свойства',
'UI:OpenDocumentInNewWindow_' => 'Открыть этот документ в новом окне: %1$s',
'UI:DownloadDocument_' => 'Скачать этот документ: %1$s',
'UI:Document:NoPreview' => 'Не доступен предварительный просомтр для документов данного типа',
'UI:DeadlineMissedBy_duration' => 'Пропущен %1$s',
'UI:Deadline_LessThan1Min' => '< 1 мин',
'UI:Deadline_Minutes' => '%1$d мин',
'UI:Deadline_Hours_Minutes' => '%1$dч %2$dмин',
'UI:Deadline_Days_Hours_Minutes' => '%1$dд %2$dч %3$dмин',
'UI:Help' => 'Помощь',
'UI:PasswordConfirm' => '(Подтвердить)',
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Перед добавлением %1$s объектво, сохраните этот объект.',
'UI:DisplayThisMessageAtStartup' => 'Показать это сообщение при запуске',
'UI:RelationshipGraph' => 'Графический вид',
'UI:RelationshipList' => 'Список',
'Portal:Title' => 'Пользовательский iTop портал',
'Portal:Refresh' => 'Обновить',
'Portal:Back' => 'Назад',
'Portal:CreateNewRequest' => 'Создать новый запрос',
'Portal:ChangeMyPassword' => 'Изменить мой пароль',
'Portal:Disconnect' => 'Отключить',
'Portal:OpenRequests' => 'Мои открытые запросы',
'Portal:ResolvedRequests' => 'Мои решённые запросы',
'Portal:SelectService' => 'Выбери сервис из каталога:',
'Portal:PleaseSelectOneService' => 'Необходимо выбрать хотя-бы один сервис',
'Portal:SelectSubcategoryFrom_Service' => 'Выбери под-категорию для сервиса %1$s:',
'Portal:PleaseSelectAServiceSubCategory' => 'Необходимо выбрать одну под-категорию',
'Portal:DescriptionOfTheRequest' => 'Введи описание запроса:',
'Portal:TitleRequestDetailsFor_Request' => 'Подробности запроса %1$s:',
'Portal:NoOpenRequest' => 'Нет запросов в этой категории.',
'Portal:Button:CloseTicket' => 'Закрыть этот "тикет"',
'Portal:EnterYourCommentsOnTicket' => 'Введите ваши каментарии по решению этого "тикета":',
'Portal:ErrorNoContactForThisUser' => 'Ошибка: текющий пользователь не ассоциирован с Контактом/Человеком. Пожалуйста свяжитесь с вашим администратором.',
'Enum:Undefined' => 'Неопределён',
));
?>

View File

@@ -1,386 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Localized data
*
* @author Izzet Sirin <izzet.sirin@htr.com.tr>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
//////////////////////////////////////////////////////////////////////
// Classes in 'core/cmdb'
//////////////////////////////////////////////////////////////////////
//
//
// Class: CMDBChange
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:CMDBChange' => 'Değişiklik',
'Class:CMDBChange+' => 'Değişiklik izleme',
'Class:CMDBChange/Attribute:date' => 'tarih',
'Class:CMDBChange/Attribute:date+' => 'değişikliğin yapıldığı tarih',
'Class:CMDBChange/Attribute:userinfo' => 'diğer bilgiler',
'Class:CMDBChange/Attribute:userinfo+' => 'ilave bilgiler',
));
//
// Class: CMDBChangeOp
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:CMDBChangeOp' => 'Değişiklik işlemi',
'Class:CMDBChangeOp+' => 'Değişiklik izleme',
'Class:CMDBChangeOp/Attribute:change' => 'değişiklik',
'Class:CMDBChangeOp/Attribute:change+' => 'değişiklik',
'Class:CMDBChangeOp/Attribute:date' => 'tarih',
'Class:CMDBChangeOp/Attribute:date+' => 'değişikliğin yapıldığı zaman',
'Class:CMDBChangeOp/Attribute:userinfo' => 'kullanıcı',
'Class:CMDBChangeOp/Attribute:userinfo+' => 'değişikliğ yapan',
'Class:CMDBChangeOp/Attribute:objclass' => 'nesne sınıfı',
'Class:CMDBChangeOp/Attribute:objclass+' => 'nesne sınıfı',
'Class:CMDBChangeOp/Attribute:objkey' => 'nesne no',
'Class:CMDBChangeOp/Attribute:objkey+' => 'nesne no',
'Class:CMDBChangeOp/Attribute:finalclass' => 'tip',
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
));
//
// Class: CMDBChangeOpCreate
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:CMDBChangeOpCreate' => 'nesne yaratımı',
'Class:CMDBChangeOpCreate+' => 'Nesne Yaratım izleme',
));
//
// Class: CMDBChangeOpDelete
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:CMDBChangeOpDelete' => 'nesne silimi',
'Class:CMDBChangeOpDelete+' => 'Nesne silme izleme',
));
//
// Class: CMDBChangeOpSetAttribute
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:CMDBChangeOpSetAttribute' => 'nesne değişikliği',
'Class:CMDBChangeOpSetAttribute+' => 'Nesne değişiminin izlemesi',
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Özellik',
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => 'Değişen özelliğin kodu',
));
//
// Class: CMDBChangeOpSetAttributeScalar
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:CMDBChangeOpSetAttributeScalar' => 'özellik değişimi',
'Class:CMDBChangeOpSetAttributeScalar+' => 'Nesne özellik değişimi izleme',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Önceki değer',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => 'önceki değer',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'Yeni değer',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => 'yeni değer',
));
// Used by CMDBChangeOp... & derived classes
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Change:ObjectCreated' => 'Nesne yaratıldı',
'Change:ObjectDeleted' => 'Nesne silindi',
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s\'nin değeri %2$s olarak atandı (önceki değer: %3$s)',
'Change:Text_AppendedTo_AttName' => '%2$s\'ye %1$s eklendi',
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$\'nin değeri deiştirildi, önceki değer: %2$s',
'Change:AttName_Changed' => '%1$s değiştirildi',
));
//
// Class: CMDBChangeOpSetAttributeBlob
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:CMDBChangeOpSetAttributeBlob' => 'tarih değişimi',
'Class:CMDBChangeOpSetAttributeBlob+' => 'tarih değişim izleme',
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Önceki veri',
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => 'önceki değer',
));
//
// Class: CMDBChangeOpSetAttributeText
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:CMDBChangeOpSetAttributeText' => 'metin değişikliği',
'Class:CMDBChangeOpSetAttributeText+' => 'metin değişikliği izleme',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Önceki veri',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => 'önceki değer',
));
//
// Class: Event
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:Event' => 'Olay kaydı',
'Class:Event+' => 'Uygulama olayı',
'Class:Event/Attribute:message' => 'mesaj',
'Class:Event/Attribute:message+' => 'Olay tanımlama',
'Class:Event/Attribute:date' => 'tarih',
'Class:Event/Attribute:date+' => 'değişiklik tarihi',
'Class:Event/Attribute:userinfo' => 'kullanıcı bigileri',
'Class:Event/Attribute:userinfo+' => 'olay anındaki kullanıcı',
'Class:Event/Attribute:finalclass' => 'tip',
'Class:Event/Attribute:finalclass+' => '',
));
//
// Class: EventNotification
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:EventNotification' => 'Olay uyarımı',
'Class:EventNotification+' => 'Uyarının tarihçesi',
'Class:EventNotification/Attribute:trigger_id' => 'Uyarı tetikçisi',
'Class:EventNotification/Attribute:trigger_id+' => 'kullanıcı hesabı',
'Class:EventNotification/Attribute:action_id' => 'kullanıcı',
'Class:EventNotification/Attribute:action_id+' => 'kullanıcı hesabı',
'Class:EventNotification/Attribute:object_id' => 'Nesne belirleyicisi',
'Class:EventNotification/Attribute:object_id+' => 'nesne belirleyicisi (olayı tetikleyen nesne ?)',
));
//
// Class: EventNotificationEmail
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:EventNotificationEmail' => 'E-posta gönderim işlemi',
'Class:EventNotificationEmail+' => 'Gönderilen E-posta tarihçesi',
'Class:EventNotificationEmail/Attribute:to' => 'Kime',
'Class:EventNotificationEmail/Attribute:to+' => 'Kime',
'Class:EventNotificationEmail/Attribute:cc' => 'Kopya',
'Class:EventNotificationEmail/Attribute:cc+' => 'Kopya',
'Class:EventNotificationEmail/Attribute:bcc' => 'Gizli Kopya',
'Class:EventNotificationEmail/Attribute:bcc+' => 'Gizli Kopya',
'Class:EventNotificationEmail/Attribute:from' => 'Kimden',
'Class:EventNotificationEmail/Attribute:from+' => 'Mesajı gönderen',
'Class:EventNotificationEmail/Attribute:subject' => 'Konu',
'Class:EventNotificationEmail/Attribute:subject+' => 'Konu',
'Class:EventNotificationEmail/Attribute:body' => 'Mesaj',
'Class:EventNotificationEmail/Attribute:body+' => 'Mesaj',
));
//
// Class: EventIssue
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:EventIssue' => 'Olay ekle',
'Class:EventIssue+' => 'Olay tipi (uyarı, hata, vb.)',
'Class:EventIssue/Attribute:issue' => 'Konu',
'Class:EventIssue/Attribute:issue+' => 'Olan',
'Class:EventIssue/Attribute:impact' => 'Etkisi',
'Class:EventIssue/Attribute:impact+' => 'Sonuçları',
'Class:EventIssue/Attribute:page' => 'Sayfa',
'Class:EventIssue/Attribute:page+' => 'HTTP giriş noktası',
'Class:EventIssue/Attribute:arguments_post' => 'Verilen değişkenlerin değerleri',
'Class:EventIssue/Attribute:arguments_post+' => 'HTTP değişken değerleri',
'Class:EventIssue/Attribute:arguments_get' => 'URL POST değişken değerleri',
'Class:EventIssue/Attribute:arguments_get+' => 'HTTP GET değişken değerleri',
'Class:EventIssue/Attribute:callstack' => 'Çağrım sırası',
'Class:EventIssue/Attribute:callstack+' => 'Çağrım sırası',
'Class:EventIssue/Attribute:data' => 'Veri',
'Class:EventIssue/Attribute:data+' => 'Diğer bilgiler',
));
//
// Class: EventWebService
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:EventWebService' => 'Web service olayı',
'Class:EventWebService+' => 'web service çağrım sırası',
'Class:EventWebService/Attribute:verb' => 'Fiil',
'Class:EventWebService/Attribute:verb+' => 'Operasyonun adı',
'Class:EventWebService/Attribute:result' => 'Sonuç',
'Class:EventWebService/Attribute:result+' => 'Genel başarı/başarısızlık',
'Class:EventWebService/Attribute:log_info' => 'Bilgi kaydı',
'Class:EventWebService/Attribute:log_info+' => 'Sonuç bilgi kaydı',
'Class:EventWebService/Attribute:log_warning' => 'Uyarı kaydı',
'Class:EventWebService/Attribute:log_warning+' => 'Sonuç uyarı kaydı',
'Class:EventWebService/Attribute:log_error' => 'Hata kaydı',
'Class:EventWebService/Attribute:log_error+' => 'Sonuç hata kaydı',
'Class:EventWebService/Attribute:data' => 'Veri',
'Class:EventWebService/Attribute:data+' => 'Sonuç veri',
));
//
// Class: Action
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:Action' => 'Özel işlem',
'Class:Action+' => 'Kullanıcının tanımladığı işlemler',
'Class:Action/Attribute:name' => 'Adı',
'Class:Action/Attribute:name+' => '',
'Class:Action/Attribute:description' => 'Tanımlama',
'Class:Action/Attribute:description+' => '',
'Class:Action/Attribute:status' => 'Durum',
'Class:Action/Attribute:status+' => 'Kullanımda mı?',
'Class:Action/Attribute:status/Value:test' => 'Test aşamasında',
'Class:Action/Attribute:status/Value:test+' => 'Test aşamasında',
'Class:Action/Attribute:status/Value:enabled' => 'Kullanımda',
'Class:Action/Attribute:status/Value:enabled+' => 'Kullanımda',
'Class:Action/Attribute:status/Value:disabled' => 'Etkin değil',
'Class:Action/Attribute:status/Value:disabled+' => 'Etkin değil',
'Class:Action/Attribute:trigger_list' => 'İlgili tetikleyiciler',
'Class:Action/Attribute:trigger_list+' => 'İşleme bağlı tetikleyici',
'Class:Action/Attribute:finalclass' => 'Tip',
'Class:Action/Attribute:finalclass+' => '',
));
//
// Class: ActionNotification
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:ActionNotification' => 'Bildirim',
'Class:ActionNotification+' => 'Bildirim (soyut)',
));
//
// Class: ActionEmail
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:ActionEmail' => 'E-posta bildirimi',
'Class:ActionEmail+' => '',
'Class:ActionEmail/Attribute:test_recipient' => 'Test alıcısı',
'Class:ActionEmail/Attribute:test_recipient+' => 'Durumu "Test" olması durumundaki alıcı',
'Class:ActionEmail/Attribute:from' => 'Kimden',
'Class:ActionEmail/Attribute:from+' => 'e-posta başlığında gönderilecek',
'Class:ActionEmail/Attribute:reply_to' => 'Yanıtla',
'Class:ActionEmail/Attribute:reply_to+' => 'e-posta başlığında gönderilecek',
'Class:ActionEmail/Attribute:to' => 'Kime',
'Class:ActionEmail/Attribute:to+' => 'E-posta alıcısı',
'Class:ActionEmail/Attribute:cc' => 'Kopya',
'Class:ActionEmail/Attribute:cc+' => 'Kopya',
'Class:ActionEmail/Attribute:bcc' => 'gizli kopya',
'Class:ActionEmail/Attribute:bcc+' => 'Gizli alıcı',
'Class:ActionEmail/Attribute:subject' => 'konu',
'Class:ActionEmail/Attribute:subject+' => 'E-posta konusu',
'Class:ActionEmail/Attribute:body' => 'E-posta içeriği',
'Class:ActionEmail/Attribute:body+' => 'E-posta içeriği',
'Class:ActionEmail/Attribute:importance' => 'önem derecesi',
'Class:ActionEmail/Attribute:importance+' => 'önem derecesi',
'Class:ActionEmail/Attribute:importance/Value:low' => 'düşük',
'Class:ActionEmail/Attribute:importance/Value:low+' => 'düşük',
'Class:ActionEmail/Attribute:importance/Value:normal' => 'normal',
'Class:ActionEmail/Attribute:importance/Value:normal+' => 'normal',
'Class:ActionEmail/Attribute:importance/Value:high' => 'yüksek',
'Class:ActionEmail/Attribute:importance/Value:high+' => 'yüksek',
));
//
// Class: Trigger
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:Trigger' => 'Tetikleyici',
'Class:Trigger+' => 'Özel olay yürütücü',
'Class:Trigger/Attribute:description' => 'Tanımlama',
'Class:Trigger/Attribute:description+' => 'tek satır tanımlama',
'Class:Trigger/Attribute:action_list' => 'Tetiklenen işlemler',
'Class:Trigger/Attribute:action_list+' => 'Tetiklenen işlemler',
'Class:Trigger/Attribute:finalclass' => 'Tip',
'Class:Trigger/Attribute:finalclass+' => '',
));
//
// Class: TriggerOnObject
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:TriggerOnObject' => 'Tetiklenen (sınıf bağımlılığı)',
'Class:TriggerOnObject+' => 'Verilen sınıflar üzerinde işlemleri gerçekleştir',
'Class:TriggerOnObject/Attribute:target_class' => 'Hedef sınıf',
'Class:TriggerOnObject/Attribute:target_class+' => '',
));
//
// Class: TriggerOnStateChange
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:TriggerOnStateChange' => 'Tetiklenen (durum değişikliğinde)',
'Class:TriggerOnStateChange+' => 'Durum değişikliğinde tetiklenen işlemler',
'Class:TriggerOnStateChange/Attribute:state' => 'Durum',
'Class:TriggerOnStateChange/Attribute:state+' => '',
));
//
// Class: TriggerOnStateEnter
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:TriggerOnStateEnter' => 'Tetiklenen (duruma girişte)',
'Class:TriggerOnStateEnter+' => 'Durum değişikliğinde tetiklenen işlemler (duruma giriş)',
));
//
// Class: TriggerOnStateLeave
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:TriggerOnStateLeave' => 'Tetiklenen (durum çıkışında)',
'Class:TriggerOnStateLeave+' => 'Durum değişikliğinde tetiklenen işlemler (duruma çıkış)',
));
//
// Class: TriggerOnObjectCreate
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:TriggerOnObjectCreate' => 'Tetiklenen (nesne yaratımında)',
'Class:TriggerOnObjectCreate+' => 'Verilen sınıf tipi nesne yaratımında tetiklenen işlemler',
));
//
// Class: lnkTriggerAction
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:lnkTriggerAction' => 'İşlem/Tetikleme',
'Class:lnkTriggerAction+' => 'Tetikleme ve işlem arasındaki ilişki',
'Class:lnkTriggerAction/Attribute:action_id' => 'İşlem',
'Class:lnkTriggerAction/Attribute:action_id+' => 'Yapılacak işlem',
'Class:lnkTriggerAction/Attribute:action_name' => 'İşlem',
'Class:lnkTriggerAction/Attribute:action_name+' => '',
'Class:lnkTriggerAction/Attribute:trigger_id' => 'Tetikleme',
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
'Class:lnkTriggerAction/Attribute:trigger_name' => 'Tetikleme',
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
'Class:lnkTriggerAction/Attribute:order' => 'Order',
'Class:lnkTriggerAction/Attribute:order+' => 'İşlem uygulama sırası',
));
?>

View File

@@ -1,869 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Localized data
*
* @author Izzet Sirin <izzet.sirin@htr.com.tr>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
//////////////////////////////////////////////////////////////////////
// Classes in 'gui'
//////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////
// Classes in 'application'
//////////////////////////////////////////////////////////////////////
//
//
// Class: AuditCategory
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:AuditCategory' => 'Denetleme Kategorisi',
'Class:AuditCategory+' => 'Denetlemedeki kategori',
'Class:AuditCategory/Attribute:name' => 'Kategori Adı',
'Class:AuditCategory/Attribute:name+' => 'Kategornin kısa adı',
'Class:AuditCategory/Attribute:description' => 'Kategori tanımlaması',
'Class:AuditCategory/Attribute:description+' => 'Kategori tanımlaması',
'Class:AuditCategory/Attribute:definition_set' => 'Tanımlama seti',
'Class:AuditCategory/Attribute:definition_set+' => 'Denetlenecek nesneler için OQL ifadesi',
'Class:AuditCategory/Attribute:rules_list' => 'Denetlem kuralları',
'Class:AuditCategory/Attribute:rules_list+' => 'Kategori için denetleme kuralları',
));
//
// Class: AuditRule
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:AuditRule' => 'Denetleme Kuralı',
'Class:AuditRule+' => 'Denetleme Kategorisi kuralı',
'Class:AuditRule/Attribute:name' => 'Kural Adı',
'Class:AuditRule/Attribute:name+' => 'Kural Adı',
'Class:AuditRule/Attribute:description' => 'Kural tanımlaması',
'Class:AuditRule/Attribute:description+' => 'Kural tanımlaması',
'Class:AuditRule/Attribute:query' => 'Çalıştırılacak Sorgu',
'Class:AuditRule/Attribute:query+' => 'Çalıştırılcak OQL ifadesi',
'Class:AuditRule/Attribute:valid_flag' => 'Geçerli nesneler?',
'Class:AuditRule/Attribute:valid_flag+' => 'Kural geçerli nesne döndürüse doğru, diğer durumda yanlış',
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'doğru',
'Class:AuditRule/Attribute:valid_flag/Value:true+' => 'doğru',
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'yanlış',
'Class:AuditRule/Attribute:valid_flag/Value:false+' => 'yanlış',
'Class:AuditRule/Attribute:category_id' => 'Kategori',
'Class:AuditRule/Attribute:category_id+' => 'Kuralın kategorisi',
'Class:AuditRule/Attribute:category_name' => 'Kategori',
'Class:AuditRule/Attribute:category_name+' => 'Kural için kategori adı',
));
//////////////////////////////////////////////////////////////////////
// Classes in 'addon/userrights'
//////////////////////////////////////////////////////////////////////
//
//
// Class: User
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:User' => 'Kullanıcı',
'Class:User+' => 'Kullanıcı',
'Class:User/Attribute:finalclass' => 'Hesap tipi',
'Class:User/Attribute:finalclass+' => '',
'Class:User/Attribute:contactid' => 'İrtibat (kişi)',
'Class:User/Attribute:contactid+' => 'İrtibat detayları',
'Class:User/Attribute:last_name' => 'Soyadı',
'Class:User/Attribute:last_name+' => 'İrtibatın soyadı',
'Class:User/Attribute:first_name' => 'Adı',
'Class:User/Attribute:first_name+' => 'İrtibatın adı',
'Class:User/Attribute:email' => 'E-posta',
'Class:User/Attribute:email+' => 'Kişinin e-posta adresi',
'Class:User/Attribute:login' => 'Kullanıcı adı',
'Class:User/Attribute:login+' => 'Kullanıcı adı',
'Class:User/Attribute:language' => 'Dil',
'Class:User/Attribute:language+' => 'Dil',
'Class:User/Attribute:language/Value:EN US' => 'English',
'Class:User/Attribute:language/Value:EN US+' => 'English (U.S.)',
'Class:User/Attribute:language/Value:FR FR' => 'French',
'Class:User/Attribute:language/Value:FR FR+' => 'French (France)',
'Class:User/Attribute:language/Value:TR TR' => 'Turkish',
'Class:User/Attribute:language/Value:TR TR+' => 'Turkish (Turkey)',
'Class:User/Attribute:profile_list' => 'Profiller',
'Class:User/Attribute:profile_list+' => 'Kullanıcı rolü',
'Class:User/Attribute:allowed_org_list' => 'Erişim yetkisi verilen kurumlar',
'Class:User/Attribute:allowed_org_list+' => 'Kullanıcın erişime yetkili olduğu kurumlar. Kurum tanımlanmaz ise sınırlama olmaz.',
'Class:User/Error:LoginMustBeUnique' => 'Kullanıcı adı tekil olmalı - "%1s" mevcut bir kullanıcıya ait.',
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'En az bir profil kullanıcıya atanmalı',
));
//
// Class: URP_Profiles
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:URP_Profiles' => 'Profil',
'Class:URP_Profiles+' => 'Kullanıcı profili',
'Class:URP_Profiles/Attribute:name' => 'Adı',
'Class:URP_Profiles/Attribute:name+' => 'Profil adı',
'Class:URP_Profiles/Attribute:description' => 'Tanımlama',
'Class:URP_Profiles/Attribute:description+' => 'Profil tanımlama',
'Class:URP_Profiles/Attribute:user_list' => 'Kullanıcılar',
'Class:URP_Profiles/Attribute:user_list+' => 'bu rolü kullanan kullanıcılar',
));
//
// Class: URP_Dimensions
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:URP_Dimensions' => 'boyut',
'Class:URP_Dimensions+' => 'uygulama boyutları (silo kullanımları)',
'Class:URP_Dimensions/Attribute:name' => 'Adı',
'Class:URP_Dimensions/Attribute:name+' => 'Boyut adı',
'Class:URP_Dimensions/Attribute:description' => 'Tanımlama',
'Class:URP_Dimensions/Attribute:description+' => 'Tanımlama',
'Class:URP_Dimensions/Attribute:type' => 'Tip',
'Class:URP_Dimensions/Attribute:type+' => 'sınıf adı veya veri tipi (projection unit)',
));
//
// Class: URP_UserProfile
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:URP_UserProfile' => 'Kullanıcı Profili',
'Class:URP_UserProfile+' => 'Kullanıcı Profili',
'Class:URP_UserProfile/Attribute:userid' => 'Kullanıcı',
'Class:URP_UserProfile/Attribute:userid+' => 'Kullanıcı hesabı',
'Class:URP_UserProfile/Attribute:userlogin' => 'Kullanıcı adı',
'Class:URP_UserProfile/Attribute:userlogin+' => 'Kullanıcı hesabı',
'Class:URP_UserProfile/Attribute:profileid' => 'Profil',
'Class:URP_UserProfile/Attribute:profileid+' => 'Kullanıcı profili',
'Class:URP_UserProfile/Attribute:profile' => 'Profil',
'Class:URP_UserProfile/Attribute:profile+' => 'Profil adı',
'Class:URP_UserProfile/Attribute:reason' => 'Sebep',
'Class:URP_UserProfile/Attribute:reason+' => 'Kullanıcının bu rolü alma sebebini açıklayınız',
));
//
// Class: URP_UserOrg
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:URP_UserOrg' => 'Kullanıcı Kurumu',
'Class:URP_UserOrg+' => 'İzin verilen kurumlar',
'Class:URP_UserOrg/Attribute:userid' => 'Kullanıcı',
'Class:URP_UserOrg/Attribute:userid+' => 'Kullanıcı hesabı',
'Class:URP_UserOrg/Attribute:userlogin' => 'Kullanıcı',
'Class:URP_UserOrg/Attribute:userlogin+' => 'Kullanıcı hesabı',
'Class:URP_UserOrg/Attribute:allowed_org_id' => 'Kurum',
'Class:URP_UserOrg/Attribute:allowed_org_id+' => 'Erişim yetkisi kurumlar',
'Class:URP_UserOrg/Attribute:allowed_org_name' => 'Kurumu',
'Class:URP_UserOrg/Attribute:allowed_org_name+' => 'Erişim yetkisi verilen kurumlar',
'Class:URP_UserOrg/Attribute:reason' => 'Sebep',
'Class:URP_UserOrg/Attribute:reason+' => 'Kullanıcının bu rolü alma sebebini açıklayınız',
));
//
// Class: URP_ProfileProjection
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:URP_ProfileProjection' => 'profile_projection',
'Class:URP_ProfileProjection+' => 'profile projections',
'Class:URP_ProfileProjection/Attribute:dimensionid' => 'Boyut',
'Class:URP_ProfileProjection/Attribute:dimensionid+' => 'uygulama boyutu',
'Class:URP_ProfileProjection/Attribute:dimension' => 'Boyut',
'Class:URP_ProfileProjection/Attribute:dimension+' => 'uygulama boyutu',
'Class:URP_ProfileProjection/Attribute:profileid' => 'Profil',
'Class:URP_ProfileProjection/Attribute:profileid+' => 'profil kullanımı',
'Class:URP_ProfileProjection/Attribute:profile' => 'Profil',
'Class:URP_ProfileProjection/Attribute:profile+' => 'Profil adı',
'Class:URP_ProfileProjection/Attribute:value' => 'Değer ifadesi',
'Class:URP_ProfileProjection/Attribute:value+' => 'OQL ifadesi (kullanıcı $user) | sabit | | +özellik kodu',
'Class:URP_ProfileProjection/Attribute:attribute' => 'Attribute',
'Class:URP_ProfileProjection/Attribute:attribute+' => 'Hedef özellik kodu (opsiyonel)',
));
//
// Class: URP_ClassProjection
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:URP_ClassProjection' => 'sınıf projeksiyonu',
'Class:URP_ClassProjection+' => 'sınıf projeksiyonu',
'Class:URP_ClassProjection/Attribute:dimensionid' => 'Boyut',
'Class:URP_ClassProjection/Attribute:dimensionid+' => 'uygulama boyutu',
'Class:URP_ClassProjection/Attribute:dimension' => 'Boyut',
'Class:URP_ClassProjection/Attribute:dimension+' => 'uygulama boyutu',
'Class:URP_ClassProjection/Attribute:class' => 'Sınıf',
'Class:URP_ClassProjection/Attribute:class+' => 'Hedef sınıf',
'Class:URP_ClassProjection/Attribute:value' => 'Değer ifadesi',
'Class:URP_ClassProjection/Attribute:value+' => 'OQL ifadesi (kullanıcı $user) | sabit | | +özellik kodu',
'Class:URP_ClassProjection/Attribute:attribute' => 'Özellik',
'Class:URP_ClassProjection/Attribute:attribute+' => 'Hedef özellik kodu (opsiyonel)',
));
//
// Class: URP_ActionGrant
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:URP_ActionGrant' => 'işlem yetkileri',
'Class:URP_ActionGrant+' => 'sınıf üzerindeki yetkiler',
'Class:URP_ActionGrant/Attribute:profileid' => 'Profil',
'Class:URP_ActionGrant/Attribute:profileid+' => 'Kullanım profili',
'Class:URP_ActionGrant/Attribute:profile' => 'Profil',
'Class:URP_ActionGrant/Attribute:profile+' => 'Kullanım profili',
'Class:URP_ActionGrant/Attribute:class' => 'Sınıf',
'Class:URP_ActionGrant/Attribute:class+' => 'Hedef sınıf',
'Class:URP_ActionGrant/Attribute:permission' => 'Erişim yetkisi',
'Class:URP_ActionGrant/Attribute:permission+' => 'yetkili veya yetkisiz?',
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'evet',
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => 'evet',
'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'hayır',
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => 'hayır',
'Class:URP_ActionGrant/Attribute:action' => 'İşlem',
'Class:URP_ActionGrant/Attribute:action+' => 'verilen sınıf üzerinde uygulanacak işlemler',
));
//
// Class: URP_StimulusGrant
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:URP_StimulusGrant' => 'uyarı yetkileri',
'Class:URP_StimulusGrant+' => 'nesnenin yaşam döngüsündeki uyarı yetkileri',
'Class:URP_StimulusGrant/Attribute:profileid' => 'Profil',
'Class:URP_StimulusGrant/Attribute:profileid+' => 'Kullanım profili',
'Class:URP_StimulusGrant/Attribute:profile' => 'Profil',
'Class:URP_StimulusGrant/Attribute:profile+' => 'Kullanım profili',
'Class:URP_StimulusGrant/Attribute:class' => 'Sınıf',
'Class:URP_StimulusGrant/Attribute:class+' => 'Hedef sınıf',
'Class:URP_StimulusGrant/Attribute:permission' => 'Yetki',
'Class:URP_StimulusGrant/Attribute:permission+' => 'yetkili veya yetkisiz?',
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'evet',
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => 'evet',
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'hayır',
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => 'hayır',
'Class:URP_StimulusGrant/Attribute:stimulus' => 'Uyarı',
'Class:URP_StimulusGrant/Attribute:stimulus+' => 'uyarı kodu',
));
//
// Class: URP_AttributeGrant
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:URP_AttributeGrant' => 'özellik yetkisi',
'Class:URP_AttributeGrant+' => 'özellik seviyesinde yetki',
'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'İzin verilen işlem',
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => 'İşlem izni',
'Class:URP_AttributeGrant/Attribute:attcode' => 'Özellik',
'Class:URP_AttributeGrant/Attribute:attcode+' => 'Özellik kodu',
));
//
// String from the User Interface: menu, messages, buttons, etc...
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Menu:WelcomeMenu' => 'Hoşgeldiniz',
'Menu:WelcomeMenu+' => 'iTop\'a Hoşgeldiniz',
'Menu:WelcomeMenuPage' => 'Hoşgeldiniz',
'Menu:WelcomeMenuPage+' => 'iTop\'a Hoşgeldiniz',
'UI:WelcomeMenu:Title' => 'iTop\'a Hoşgeldiniz',
'UI:WelcomeMenu:LeftBlock' => '<p>iTop açık kaynak Bilişim İşlem Potalıdır.</p>
<ul>Kapsamı:
<li>Bilişim altyapısının tanımlandığı ve dokümante edildiği Konfigürasyon Yönetimi CMDB (Configuration management database)modülü.</li>
<li>Bilişim altyapısı ile ilgili tüm olayların takibi.</li>
<li>Bilişim altyapısının değişim yönetimi.</li>
<li>Bilinen hatalar bilgi kütüphanesi.</li>
<li>Planlı kesintilerin kayıt altına alınması ve ilgililerin uyarılması.</li>
<li>Özet gösterge ekranları</li>
</ul>
<p>Tüm modüller bağımsız olarak, adım adım kurulabilir.</p>',
'UI:WelcomeMenu:RightBlock' => '<p>iTop servis sağlayıcı maktığı ile hazırlanmış olup, birden fazla müşteri ve kuruma kolaylıkla hizmet vermeye imkan sağlar.
<ul>iTop, zengin iş süreçleri tanımlama imkanıyla:
<li>Bilişim yönetim etkinliğini</li>
<li>Operasyon performansını</li>
<li>Müşteri memnuniyetini ve yönetimin iş performansı hakkında bilgi sahibi olmasını sağlar.</li>
</ul>
</p>
<p>iTop mevcut Bilşim altyapınızla entegre edilmeye açıktır.</p>
<p>
<ul>Yeni nesil operasyonel Bilişim portalı :
<li>Bilişim ortamının daha iyi yönetilmesini.</li>
<li>ITIL süreçlerinin kendi başınıza uygulanmaya.</li>
<li>İşletmenin en önemli kaynağı olan dokümantasyonu yönetmesine imkan sağlar.</li>
</ul>
</p>',
'UI:WelcomeMenu:AllOpenRequests' => 'Açık istekler: %1$d',
'UI:WelcomeMenu:MyCalls' => 'İsteklerim',
'UI:WelcomeMenu:OpenIncidents' => 'Açık Arızalar: %1$d',
'UI:WelcomeMenu:AllConfigItems' => 'Konfigürasyon Kalemleri: %1$d',
'UI:WelcomeMenu:MyIncidents' => 'Bana atanan hatalar',
'UI:AllOrganizations' => ' Tüm Kurumlar ',
'UI:YourSearch' => 'Arama',
'UI:LoggedAsMessage' => '%1$s kullanıcısı ile bağlanıldı',
'UI:LoggedAsMessage+Admin' => '%1$s (Administrator) kullanıcısı ile bağlanıldı',
'UI:Button:Logoff' => ıkış',
'UI:Button:GlobalSearch' => 'Arama',
'UI:Button:Search' => ' Arama ',
'UI:Button:Query' => ' Sorgu ',
'UI:Button:Ok' => 'Tamam',
'UI:Button:Cancel' => 'İptal',
'UI:Button:Apply' => 'Uygula',
'UI:Button:Back' => ' << Geri ',
'UI:Button:Next' => ' İleri >> ',
'UI:Button:Finish' => ' Bitir ',
'UI:Button:DoImport' => ' Dışardan Veri alı çalıştır ! ',
'UI:Button:Done' => ' Biiti ',
'UI:Button:SimulateImport' => ' Veri alışını simule et ',
'UI:Button:Test' => 'Test!',
'UI:Button:Evaluate' => ' Değerlendir ',
'UI:Button:AddObject' => ' Ekle... ',
'UI:Button:BrowseObjects' => ' Listele... ',
'UI:Button:Add' => ' Ekle ',
'UI:Button:AddToList' => ' << Ekle ',
'UI:Button:RemoveFromList' => ' Sil >> ',
'UI:Button:FilterList' => ' Filtreleme... ',
'UI:Button:Create' => ' Yarat ',
'UI:Button:Delete' => ' Sil ! ',
'UI:Button:ChangePassword' => ' Şifre değiştir ',
'UI:Button:ResetPassword' => ' Şifreyi sıfırla ',
'UI:SearchToggle' => 'Ara',
'UI:ClickToCreateNew' => 'Yeni %1$s yarat',
'UI:SearchFor_Class' => '%1$s Arama',
'UI:NoObjectToDisplay' => 'Görüntülenecek nesne bulunamadı.',
'UI:Error:MandatoryTemplateParameter_object_id' => 'link_attr tanımlandığında object_id alanı zorunludur. Görüntülme (Display) şablonun tanımlamasını kontrol ediniz.',
'UI:Error:MandatoryTemplateParameter_target_attr' => 'link_attr tanımlandığında target_attr alanı zorunludur. Görüntülme (Display) şablonun tanımlamasını kontrol ediniz.',
'UI:Error:MandatoryTemplateParameter_group_by' => 'group_by alanı zorunludur. Görüntülme (Display) şablonun tanımlamasını kontrol ediniz.',
'UI:Error:InvalidGroupByFields' => 'group by geçersiz alan listesi: "%1$s".',
'UI:Error:UnsupportedStyleOfBlock' => 'Hata: blok için desteklenmeyen stil: "%1$s".',
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Hatalı ilişki tanımı: yönetilecek sınıfa: %1$s ait ilişki anahtarı (an external key) sınıfında %2$s bulunamadı',
'UI:Error:Object_Class_Id_NotFound' => 'Nesne: %1$s:%2$d bulunamadı.',
'UI:Error:WizardCircularReferenceInDependencies' => 'Hata: Alanlar arasında döngüsel bağımlılık (Circular reference in the dependencies) tespit edildi. Veri modelinizi kontrol ediniz.',
'UI:Error:UploadedFileTooBig' => 'Yüklenmek istenen dosya çok büyük. (üst sınır %1$s). PHP configürasyonunu kontrol ediniz (upload_max_filesize ve post_max_size parametrelerini düzenleyiniz).',
'UI:Error:UploadedFileTruncated.' => 'Yüklenen dosyanın tamamı yüklenemedi !',
'UI:Error:NoTmpDir' => 'Gecici dizi (temporary directory) tanımlı değil.',
'UI:Error:CannotWriteToTmp_Dir' => 'Geçici dosya diske yazılamadı. upload_tmp_dir = "%1$s".',
'UI:Error:UploadStoppedByExtension_FileName' => 'Dosya yükleme dosya uzantısı nedeniyle duruduruldu. (Dosya adı = "%1$s").',
'UI:Error:UploadFailedUnknownCause_Code' => 'Dosya yükleme bilinmeyen bir sebeple başarısız oldu. (Hata kodu = "%1$s").',
'UI:Error:1ParametersMissing' => 'Hata: Bu operasyon için %1$s parametresi tanımlanmalı.',
'UI:Error:2ParametersMissing' => 'Hata: Bu operasyon için %1$s ve %2$s parametreleri tanımlanmalı.',
'UI:Error:3ParametersMissing' => 'Hata: Bu operasyon için %1$s, %2$s ve %3$s parametreleri tanımlanmalı.',
'UI:Error:4ParametersMissing' => 'Hata: Bu operasyon için %1$s, %2$s, %3$s ve %4$s parametreleri tanımlanmalı.',
'UI:Error:IncorrectOQLQuery_Message' => 'Hata: hatalı OQL sorgusu: %1$s',
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Sorgu sırasında hata oluştu: %1$s',
'UI:Error:ObjectAlreadyUpdated' => 'Hata: nesne hali hazırda güncellendi.',
'UI:Error:ObjectCannotBeUpdated' => 'Hata: nesne güncellenemedi.',
'UI:Error:ObjectsAlreadyDeleted' => 'Hata: nesne hali hazırda silinmiş!',
'UI:Error:BulkDeleteNotAllowedOn_Class' => '%1$s sınıfına ait nesnelerin toplu silimine yetkiniz yok.',
'UI:Error:DeleteNotAllowedOn_Class' => '%1$s sınıfına ait nesnelerin silimine yetkiniz yok.',
'UI:Error:BulkModifyNotAllowedOn_Class' => '%1$s sınıfına ait nesnelerin toplu güncellenmesine yetkiniz yok.',
'UI:Error:ObjectAlreadyCloned' => 'Hata: nesne hali hazırda klonlanmış!',
'UI:Error:ObjectAlreadyCreated' => 'Hata: nesne hali hazırda yaratılmış!',
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Hata: "%3$s" durumundaki %2$s nesnesi için "%1$s" uyarısı geçersizdir.',
'UI:GroupBy:Count' => 'Say',
'UI:GroupBy:Count+' => 'Eleman sayısı',
'UI:CountOfObjects' => 'Kritere uyan %1$d nesne bulundu.',
'UI_CountOfObjectsShort' => '%1$d nesne.',
'UI:NoObject_Class_ToDisplay' => '%1$s nesne listelenecek',
'UI:History:LastModified_On_By' => '%1$s tarihinde %2$s tarafından değiştirilmiş.',
'UI:HistoryTab' => 'Tarihçe',
'UI:NotificationsTab' => 'Uyarılar',
'UI:History:Date' => 'Tarih',
'UI:History:Date+' => 'Değişiklik tarihi',
'UI:History:User' => 'Kullanıcı',
'UI:History:User+' => 'Değişikliğ yapan kullanıcı',
'UI:History:Changes' => 'Değişiklikler',
'UI:History:Changes+' => 'Nesneye yapılan değişiklikler',
'UI:Loading' => 'Yükleniyor...',
'UI:Menu:Actions' => 'İşlemler',
'UI:Menu:New' => 'Yeni...',
'UI:Menu:Add' => 'Ekle...',
'UI:Menu:Manage' => 'Yönet...',
'UI:Menu:EMail' => 'e-posta',
'UI:Menu:CSVExport' => 'CSV olarak dışarı ver',
'UI:Menu:Modify' => 'Düzenle...',
'UI:Menu:Delete' => 'Sil...',
'UI:Menu:Manage' => 'Yönet...',
'UI:Menu:BulkDelete' => 'Sil...',
'UI:UndefinedObject' => 'tanımsız',
'UI:Document:OpenInNewWindow:Download' => 'Yeni pencerede aç: %1$s, Karşıdan yükle: %2$s',
'UI:SelectAllToggle+' => 'Tümünü Seç / Tümünü seçme',
'UI:TruncatedResults' => '%1$d / %2$d',
'UI:DisplayAll' => 'Hepsini göster',
'UI:CollapseList' => 'Gizle',
'UI:CountOfResults' => '%1$d nesne',
'UI:ChangesLogTitle' => 'değişiklik kaydı (%1$d):',
'UI:EmptyChangesLogTitle' => 'deiğişiklik kaydı boş',
'UI:SearchFor_Class_Objects' => '%1$s nesnelerini ara',
'UI:OQLQueryBuilderTitle' => 'OQL Sorgu hazırlama',
'UI:OQLQueryTab' => 'OQL Sorgu',
'UI:SimpleSearchTab' => 'Basit arama',
'UI:Details+' => 'Detaylar',
'UI:SearchValue:Any' => '* Herhangi *',
'UI:SearchValue:Mixed' => '* karışık *',
'UI:SelectOne' => '-- Birini seçiniz --',
'UI:Login:Welcome' => 'iTop\'a Hoşgeldiniz!',
'UI:Login:IncorrectLoginPassword' => 'Hatalı kullanıcı/şifre tekrar deneyiniz.',
'UI:Login:IdentifyYourself' => 'Devam etmeden önce kendinizi tanıtınız',
'UI:Login:UserNamePrompt' => 'Kullanıcı Adı',
'UI:Login:PasswordPrompt' => 'Şifre',
'UI:Login:ChangeYourPassword' => 'Şifre Değiştir',
'UI:Login:OldPasswordPrompt' => 'Mevcut şifre',
'UI:Login:NewPasswordPrompt' => 'Yeni şifre',
'UI:Login:RetypeNewPasswordPrompt' => 'Yeni şifre tekrar',
'UI:Login:IncorrectOldPassword' => 'Hata: mevcut şifre hatalı',
'UI:LogOffMenu' => ıkış',
'UI:LogOff:ThankYou' => 'iTop Kullanıdığınız için teşekkürler',
'UI:LogOff:ClickHereToLoginAgain' => 'Tekrar bağlanmak için tıklayınız...',
'UI:ChangePwdMenu' => 'Şifre değiştir...',
'UI:Login:RetypePwdDoesNotMatch' => 'Yeni şifre eşlenmedi !',
'UI:Button:Login' => 'iTop\'a Giriş',
'UI:Login:Error:AccessRestricted' => 'iTop erişim sınırlandırıldı. Sistem yöneticisi ile irtibata geçiniz',
'UI:Login:Error:AccessAdmin' => 'Erişim sistem yönetci hesaplaları ile mümkün. Sistem yöneticisi ile irtibata geçiniz.',
'UI:CSVImport:MappingSelectOne' => '-- Birini seçiniz --',
'UI:CSVImport:MappingNotApplicable' => '-- alanı ihmal et --',
'UI:CSVImport:NoData' => 'Boş veri seti..., veri giriniz!',
'UI:Title:DataPreview' => 'Veri öngörüntüleme',
'UI:CSVImport:ErrorOnlyOneColumn' => 'Hata: Veri sadece bir kolon içeriyor. Doğru ayıraç karakteri seçtiniz mi ?',
'UI:CSVImport:FieldName' => 'Alan %1$d',
'UI:CSVImport:DataLine1' => 'Veri Satırı 1',
'UI:CSVImport:DataLine2' => 'Veri Satırı 2',
'UI:CSVImport:idField' => 'id (Tekil anahtar)',
'UI:Title:BulkImport' => 'iTop - Toplu giriş',
'UI:Title:BulkImport+' => 'CSV içeri aktarma aracı',
'UI:CSVImport:ClassesSelectOne' => '-- Birini seçiniz --',
'UI:CSVImport:ErrorExtendedAttCode' => 'Hata: "%1$s" hatalı kod, çünkü "%2$s" ile "%3$s" tekil ilişkide değil',
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d adet nesne değişmeyecek.',
'UI:CSVImport:ObjectsWillBeModified' => '%1$d adet nesne değiştirilecek.',
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d adet nesne eklenecek.',
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d adet nesnede hata oluştu.',
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d adet nesne değişmedi.',
'UI:CSVImport:ObjectsWereModified' => '%1$d adet nesne güncellendi.',
'UI:CSVImport:ObjectsWereAdded' => '%1$d adet nesne eklendi.',
'UI:CSVImport:ObjectsHadErrors' => '%1$d adet nesnede hata tespit edildi.',
'UI:Title:CSVImportStep2' => 'Step 2 of 5: CSV veri seçenekleri',
'UI:Title:CSVImportStep3' => 'Step 3 of 5: Veri eşleme',
'UI:Title:CSVImportStep4' => 'Step 4 of 5: Verinin içeri aktarım simülasyonu',
'UI:Title:CSVImportStep5' => 'Step 5 of 5: İçeri aktarım tamamlandı',
'UI:CSVImport:LinesNotImported' => 'Satırlar yüklenemedi:',
'UI:CSVImport:LinesNotImported+' => 'Aşağıdaki satırlar hata nedeniyle yüklenemedi',
'UI:CSVImport:SeparatorComma+' => ', (virgül)',
'UI:CSVImport:SeparatorSemicolon+' => '; (noktalı virgül)',
'UI:CSVImport:SeparatorTab+' => 'tab',
'UI:CSVImport:SeparatorOther' => 'diğer:',
'UI:CSVImport:QualifierDoubleQuote+' => '" (çift tırnak)',
'UI:CSVImport:QualifierSimpleQuote+' => '\' (tırnak)',
'UI:CSVImport:QualifierOther' => 'diğer:',
'UI:CSVImport:TreatFirstLineAsHeader' => 'İlk satırı başlık olarak değerlendir(kolon isimleri)',
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Skip %1$s line(s) at the beginning of the file',
'UI:CSVImport:CSVDataPreview' => 'CSV Veri Görüntüleme',
'UI:CSVImport:SelectFile' => 'İçeri aktarılacak dosyayı seçiniz:',
'UI:CSVImport:Tab:LoadFromFile' => 'Dosyadan oku',
'UI:CSVImport:Tab:CopyPaste' => 'Veriyi kopyala yapıştır',
'UI:CSVImport:Tab:Templates' => 'Şablonlar',
'UI:CSVImport:PasteData' => 'İçeri aktarılacak veriyi yapıştır:',
'UI:CSVImport:PickClassForTemplate' => 'İndirilecek şablonu seçiniz: ',
'UI:CSVImport:SeparatorCharacter' => 'Ayıraç karakteri:',
'UI:CSVImport:TextQualifierCharacter' => 'Metin belirteç karakteri',
'UI:CSVImport:CommentsAndHeader' => 'Yorum ve başlık',
'UI:CSVImport:SelectClass' => 'İçeri aktarılacak sınıfı seçiniz:',
'UI:CSVImport:AdvancedMode' => 'Uzman modu',
'UI:CSVImport:AdvancedMode+' => 'Uzman modunda (In advanced mode) "id" (primary key) alanı nesnenin güncellenmesi ve adının değiştirilmesi için kullanılabilir.' .
'"id" (mevcut ise) alanı tek sorgu kriteri olarak kullnılabilri ve diğer sorgu kriterleri ile birleştirilmez.',
'UI:CSVImport:SelectAClassFirst' => 'Eşlemeyi yapmak için önce sınıfı seçiniz.',
'UI:CSVImport:HeaderFields' => 'Alanlar',
'UI:CSVImport:HeaderMappings' => 'Eşlemeler',
'UI:CSVImport:HeaderSearch' => 'Arama?',
'UI:CSVImport:AlertIncompleteMapping' => 'Lütfen tüm alanlar için alan eşlemesini yapınız.',
'UI:CSVImport:AlertNoSearchCriteria' => 'Lütfen en az bir sorgu kriteri seçiniz.',
'UI:CSVImport:Encoding' => 'Karakter kodlaması',
'UI:UniversalSearchTitle' => 'iTop - Genel arama',
'UI:UniversalSearch:Error' => 'Hata: %1$s',
'UI:UniversalSearch:LabelSelectTheClass' => 'Aranacak sınıfı seçiniz: ',
'UI:Audit:Title' => 'iTop - CMDB Denetleme',
'UI:Audit:InteractiveAudit' => 'Etkileşimli Denetleme',
'UI:Audit:HeaderAuditRule' => 'Denetleme Kuralı',
'UI:Audit:HeaderNbObjects' => 'Nesne Sayısı',
'UI:Audit:HeaderNbErrors' => 'Hata sayısı',
'UI:Audit:PercentageOk' => '% Tamam',
'UI:RunQuery:Title' => 'iTop - OQL Sorgu değerlendirme',
'UI:RunQuery:QueryExamples' => 'Sorgu örnekleri',
'UI:RunQuery:HeaderPurpose' => 'Amaç',
'UI:RunQuery:HeaderPurpose+' => 'Sorgu açıklaması',
'UI:RunQuery:HeaderOQLExpression' => 'OQL ifadesi',
'UI:RunQuery:HeaderOQLExpression+' => 'OQL yapısında sorgu',
'UI:RunQuery:ExpressionToEvaluate' => 'Değerlendirilecek ifade: ',
'UI:RunQuery:MoreInfo' => 'Sorgu hakkında detaylı bilgi: ',
'UI:RunQuery:DevelopedQuery' => 'Yeniden düzenlenen sorgu: ',
'UI:RunQuery:SerializedFilter' => 'Özel filtre: ',
'UI:RunQuery:Error' => 'Sorgu sırasında hata oluştu: %1$s',
'UI:Schema:Title' => 'iTop objects schema',
'UI:Schema:CategoryMenuItem' => 'Kategori <b>%1$s</b>',
'UI:Schema:Relationships' => 'İlişkiler',
'UI:Schema:AbstractClass' => 'Soyut sınıf: bu sınıftan nesne türetilemez.',
'UI:Schema:NonAbstractClass' => 'Soyut olmayan sınıf: bu sınıftan nesne türetilebilir.',
'UI:Schema:ClassHierarchyTitle' => 'Sınıf ilişkisi',
'UI:Schema:AllClasses' => 'Tüm sınıflar',
'UI:Schema:ExternalKey_To' => 'Harici anahtar %1$s',
'UI:Schema:Columns_Description' => 'Kolonlar: <em>%1$s</em>',
'UI:Schema:Default_Description' => 'Öndeğer: "%1$s"',
'UI:Schema:NullAllowed' => 'Boş olamaz',
'UI:Schema:NullNotAllowed' => 'Boş olabilir',
'UI:Schema:Attributes' => 'Özellikler',
'UI:Schema:AttributeCode' => 'Özellik kodu',
'UI:Schema:AttributeCode+' => 'Özellik için dahili kod',
'UI:Schema:Label' => 'Etiket',
'UI:Schema:Label+' => 'Özellik etiketi',
'UI:Schema:Type' => 'Tip',
'UI:Schema:Type+' => 'Özellik veri tipi',
'UI:Schema:Origin' => 'Kaynak',
'UI:Schema:Origin+' => 'Özelliğin tanımlandığı ana sınıf',
'UI:Schema:Description' => 'Tanımlama',
'UI:Schema:Description+' => 'Özellik tanımı',
'UI:Schema:AllowedValues' => 'Alabileceği değerler',
'UI:Schema:AllowedValues+' => 'Özelliğin alabileceği değer kısıtları',
'UI:Schema:MoreInfo' => 'Daha fazla bilgi',
'UI:Schema:MoreInfo+' => 'Veritabanında tanımlı alan için daha fazla bilgi',
'UI:Schema:SearchCriteria' => 'Arama kriteri',
'UI:Schema:FilterCode' => 'Filtreleme kodu',
'UI:Schema:FilterCode+' => 'Arama kriter kodu',
'UI:Schema:FilterDescription' => 'Tanımlama',
'UI:Schema:FilterDescription+' => 'Arama kiter kodu tanılaması',
'UI:Schema:AvailOperators' => 'Kullanılabilir işlemler',
'UI:Schema:AvailOperators+' => 'Arama kriteri için kullanılabilir işlemler',
'UI:Schema:ChildClasses' => 'Alt sınıflar',
'UI:Schema:ReferencingClasses' => 'Refrans sınıflar',
'UI:Schema:RelatedClasses' => 'İlgili sınıflar',
'UI:Schema:LifeCycle' => 'yaşam döngüsü',
'UI:Schema:Triggers' => 'Tetikleyiciler',
'UI:Schema:Relation_Code_Description' => 'İlişki <em>%1$s</em> (%2$s)',
'UI:Schema:RelationDown_Description' => 'Aşağı: %1$s',
'UI:Schema:RelationUp_Description' => 'Yukarı: %1$s',
'UI:Schema:RelationPropagates' => '%1$s: %2$d seviye öteler, sorgu: %3$s',
'UI:Schema:RelationDoesNotPropagate' => '%1$s: (%2$d seviye) ötelenmez, sorgu: %3$s',
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s %2$s\'nın %3$s alanı ile ilişkilendirilmiştir',
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s alanı %3$s::<em>%4$s</em> aracılığı %2$s ile ilişkilendirilmiştir',
'UI:Schema:Links:1-n' => 'Sınıf bağlantısı %1$s (1:n links):',
'UI:Schema:Links:n-n' => 'Sınıf bağlantısı %1$s (n:n links):',
'UI:Schema:Links:All' => 'İlişkili sınıfların grafiği',
'UI:Schema:NoLifeCyle' => 'Bu sınıf için yaşam döngüsü tanımlanmamış.',
'UI:Schema:LifeCycleTransitions' => 'Geçişler',
'UI:Schema:LifeCyleAttributeOptions' => 'Özellik seçenekleri',
'UI:Schema:LifeCycleHiddenAttribute' => 'Gizli',
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Salt okunur',
'UI:Schema:LifeCycleMandatoryAttribute' => 'Zorunlu Alan',
'UI:Schema:LifeCycleAttributeMustChange' => 'Değiştirilmesi gereken',
'UI:Schema:LifeCycleAttributeMustPrompt' => 'Kullanıcıdan değeri değüiştirmesi istenir',
'UI:Schema:LifeCycleEmptyList' => 'boş liste',
'UI:LinksWidget:Autocomplete+' => 'İlk 3 karakteri giriniz...',
'UI:Combo:SelectValue' => '--- değer seçiniz ---',
'UI:Label:SelectedObjects' => 'Seçilen nesneler: ',
'UI:Label:AvailableObjects' => 'Seçilebilir nesneler: ',
'UI:Link_Class_Attributes' => '%1$s özellikler',
'UI:SelectAllToggle+' => 'Tümünü seç / Tümünü seçme',
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => '%2$s: %3$s ile ilişkideki %1$s nesnelerini Ekle ',
'UI:AddObjectsOf_Class_LinkedWith_Class' => '%2$s ile %1$s arasında yeni bağlantı oluştur ',
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => '%2$s: %3$s ile bağlantılı %1$s nesnelerini yönet ',
'UI:AddLinkedObjectsOf_Class' => '%1$s nesnelerini ekle...',
'UI:RemoveLinkedObjectsOf_Class' => 'Seçili nesnleri sil',
'UI:Message:EmptyList:UseAdd' => 'Liste boş, Yeni nesne ekleme için "Yeni..." seçiniz.',
'UI:Message:EmptyList:UseSearchForm' => 'Eklemek istediğiniz nesneleri bulmak için yukarıdaki arama formunu kullanınız.',
'UI:Wizard:FinalStepTitle' => 'Final step: confirmation',
'UI:Title:DeletionOf_Object' => '%1$s silimi',
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => '%2$s sınıfına ait çoklu %1$d nesne silimi',
'UI:Delete:NotAllowedToDelete' => 'Bu nesneyi silmek için yetkiniz yok',
'UI:Delete:NotAllowedToUpdate_Fields' => '%1$s alanlarını güncellemek için yetkiniz yok',
'UI:Error:NotEnoughRightsToDelete' => 'Nesne yetersiz yetki nedeniyle silinemedi',
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Bu nesneyi silmek için öncelikli dışarıdan yapılması gereken işlemler var',
'UI:Archive_User_OnBehalfOf_User' => '%1$s on behalf of %2$s',
'UI:Delete:AutomaticallyDeleted' => 'otomatik olarak silindi',
'UI:Delete:AutomaticResetOf_Fields' => '%1$s alanlarını otomatik sıfırla',
'UI:Delete:CleaningUpRefencesTo_Object' => '%1$s nesnesine verilen tüm referansları temizle...',
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => '%2$s sınıfına ait %1$d nesnesinin tüm referanslarını temizle ...',
'UI:Delete:Done+' => 'Ne yapıldı...',
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s silindi.',
'UI:Delete:ConfirmDeletionOf_Name' => '%1$s\'in silimi',
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => '%2$s sınıfına ait %1$d nesnelerinin silimi ',
'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Otomatik silimesini mi istiyorsunuz, ancak buna yetkiniz yok',
'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Manuel silinmeli - ancak bu nesneyi silmeye yetkiniz yok, lütfen sistem yöneticisiyle irtibata geçiniz.',
'UI:Delete:WillBeDeletedAutomatically' => 'Otomatik olarak silinecek',
'UI:Delete:MustBeDeletedManually' => 'Manuel silinmeli',
'UI:Delete:CannotUpdateBecause_Issue' => 'Otomatik güncellenmeli, ancak: %1$s',
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'otomatik güncellenecek (reset: %1$s)',
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d nesne/ilişki %2$s\'yi referans ediyor',
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d silinmek istenen nesne/bağlantıları referans veriyor',
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'Veri tabanı doğruluğu(Database integrity) için yeni referans verilmesi engellenmelidir',
'UI:Delete:Consequence+' => 'Ne yapılacak',
'UI:Delete:SorryDeletionNotAllowed' => 'Bu nesneyi silmeye yetkiniz yok, yukarıdaki açıklamayı bakınız',
'UI:Delete:PleaseDoTheManualOperations' => 'Bu nesneyi silmeden önce yukarıdaki işlemleri manuel olarak yapınız',
'UI:Delect:Confirm_Object' => '%1$s\'i silmek istediğnizden emin misiniz?',
'UI:Delect:Confirm_Count_ObjectsOf_Class' => '%1$d nesnesini (sınıfı %2$s) silmek istediğinizden emin misiniz?',
'UI:WelcomeToITop' => 'iTop\'a Hoşgeldiniz',
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s detayları',
'UI:ErrorPageTitle' => 'iTop - Hata',
'UI:ObjectDoesNotExist' => 'Nesne mevcut değil veya yetkiniz yok.',
'UI:SearchResultsPageTitle' => 'iTop - Arama Sonuçları',
'UI:Search:NoSearch' => 'Nothing to search for',
'UI:FullTextSearchTitle_Text' => '"%1$s" için arama sonuçları:',
'UI:Search:Count_ObjectsOf_Class_Found' => '%2$s sınıfına ait %1$d nesne bulundu.',
'UI:Search:NoObjectFound' => 'Kayıt bulunamadı.',
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s modifikasyon',
'UI:ModificationTitle_Class_Object' => '%1$s: <span class=\"hilite\">%2$s</span> modifikasyonu',
'UI:ClonePageTitle_Object_Class' => 'iTop - %1$s - %2$s modifikasyonunu klonlayınız',
'UI:CloneTitle_Class_Object' => '%1$s klonu: <span class=\"hilite\">%2$s</span>',
'UI:CreationPageTitle_Class' => 'iTop - Yeni %1$s yaratımı',
'UI:CreationTitle_Class' => 'Yeni %1$s yarat',
'UI:SelectTheTypeOf_Class_ToCreate' => 'Yaratılacak %1$s nesne tipini seçiniz',
'UI:Class_Object_NotUpdated' => 'Değişiklik tespit edilemedi, %1$s (%2$s) <strong>güncellenmedi</strong>.',
'UI:Class_Object_Updated' => '%1$s (%2$s) güncellendi.',
'UI:BulkDeletePageTitle' => 'iTop - Toplu silme işlemi',
'UI:BulkDeleteTitle' => 'Silmek istediğiniz nesneleri seçiniz:',
'UI:PageTitle:ObjectCreated' => 'iTop Nesne yaratıldı.',
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s yaratıldı.',
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => '%1$s işlemi %2$s durumunda %3$s nesnesine uygulanır. Bir sonraki durum: %4$s.',
'UI:ObjectCouldNotBeWritten' => 'Nesne kaydedilemedi: %1$s',
'UI:PageTitle:FatalError' => 'iTop - Kritik Hata',
'UI:SystemIntrusion' => 'Bu işlem için yetkiniz yok',
'UI:FatalErrorMessage' => 'Kritik Hata, iTop devam edemiyor.',
'UI:Error_Details' => 'Hata: %1$s.',
'UI:PageTitle:ClassProjections' => 'iTop Kullanıcı Yönetimi - sınıf koruması',
'UI:PageTitle:ProfileProjections' => 'iTop Kullanıcı Yönetimi - profil koruması',
'UI:UserManagement:Class' => 'Sınıf',
'UI:UserManagement:Class+' => 'Nesnin sınıfı',
'UI:UserManagement:ProjectedObject' => 'Nesne',
'UI:UserManagement:ProjectedObject+' => 'Projected object',
'UI:UserManagement:AnyObject' => '* herhangi *',
'UI:UserManagement:User' => 'Kullanıcı',
'UI:UserManagement:User+' => 'User involved in the projection',
'UI:UserManagement:Profile' => 'Profil',
'UI:UserManagement:Profile+' => 'Profile in which the projection is specified',
'UI:UserManagement:Action:Read' => 'Oku',
'UI:UserManagement:Action:Read+' => 'Nesneyi görüntüle',
'UI:UserManagement:Action:Modify' => 'Güncelle',
'UI:UserManagement:Action:Modify+' => 'Nesneyi yarat/güncelle',
'UI:UserManagement:Action:Delete' => 'Sil',
'UI:UserManagement:Action:Delete+' => 'Nesneleri sil',
'UI:UserManagement:Action:BulkRead' => 'Toplu oku (dışarı aktar)',
'UI:UserManagement:Action:BulkRead+' => 'Nesneleri listele veya toplu dışarı aktar',
'UI:UserManagement:Action:BulkModify' => 'Toplu güncelleme',
'UI:UserManagement:Action:BulkModify+' => 'Toplu yaratma/güncelleme(CSV içeri aktar)',
'UI:UserManagement:Action:BulkDelete' => 'Toplu Silim',
'UI:UserManagement:Action:BulkDelete+' => 'Nesneleri toplu olarak sil',
'UI:UserManagement:Action:Stimuli' => 'Uyarı',
'UI:UserManagement:Action:Stimuli+' => 'İzin verilen çoklu işlemler',
'UI:UserManagement:Action' => 'İşlem',
'UI:UserManagement:Action+' => 'İşlem kullanıcı tarafından yapıldı',
'UI:UserManagement:TitleActions' => 'İşlemler',
'UI:UserManagement:Permission' => 'Yetki',
'UI:UserManagement:Permission+' => 'Kullanıcı yetkileri',
'UI:UserManagement:Attributes' => 'Özellikler',
'UI:UserManagement:ActionAllowed:Yes' => 'Evet',
'UI:UserManagement:ActionAllowed:No' => 'Hayır',
'UI:UserManagement:AdminProfile+' => 'Sistem Yöneticisi tüm okuma/yazma işlemleri için yetkilidir.',
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
'UI:UserManagement:NoLifeCycleApplicable+' => 'Bu nesne için yaşam döngüsü tanımsız',
'UI:UserManagement:GrantMatrix' => 'Yetkiler',
'UI:UserManagement:LinkBetween_User_And_Profile' => '%1$s ve %2$s arasındaki ilişki',
'UI:UserManagement:LinkBetween_User_And_Org' => '%1$s ve %2$s arasındaki ilişki',
'Menu:AdminTools' => 'Yönetim Araçları',
'Menu:AdminTools+' => 'Yönetim Araçları',
'Menu:AdminTools?' => 'Yönetici profiline izin verilen araçlar',
'UI:ChangeManagementMenu' => 'Değişiklik Yönetimi',
'UI:ChangeManagementMenu+' => 'Değişiklik Yönetimi',
'UI:ChangeManagementMenu:Title' => 'Değişiklik Özeti',
'UI-ChangeManagementMenu-ChangesByType' => 'Değişiklik tipine göre',
'UI-ChangeManagementMenu-ChangesByStatus' => 'Değişiklik durumuna göre',
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'İş grubuna değişiklikler',
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Atanmamış Değişiklikler',
'UI:ConfigurationItemsMenu'=> 'Konfigürasyon kalemleri',
'UI:ConfigurationItemsMenu+'=> 'Tüm cihazlar',
'UI:ConfigurationItemsMenu:Title' => 'Konfigürasyon Kalemlerinin Özeti',
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Servers by criticity',
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PCs by criticity',
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Network devices by criticity',
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Applications by criticity',
'UI:ConfigurationManagementMenu' => 'Konfigürasyon Yönetimi',
'UI:ConfigurationManagementMenu+' => 'Konfigürasyon Yönetimi',
'UI:ConfigurationManagementMenu:Title' => 'Altyapı Özeti',
'UI-ConfigurationManagementMenu-InfraByType' => 'Infrastructure objects by type',
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Infrastructure objects by status',
'UI:ConfigMgmtMenuOverview:Title' => 'Konfigürasyon Yönetimi Gösterge Tablosu',
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Durumlarına göre Konfigürasyon Kalemleri(KK)',
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Tiplerine göre Konfigürasyon Kalemleri(KK)',
'UI:RequestMgmtMenuOverview:Title' => 'Çağrı Yönetimi Gösterge Tablosu',
'UI-RequestManagementOverview-RequestByService' => 'Hizmetlere göre çağrılar',
'UI-RequestManagementOverview-RequestByPriority' => 'Önceliklere göre çağrılar',
'UI-RequestManagementOverview-RequestUnassigned' => 'Henüz atanmamış çağrılar',
'UI:IncidentMgmtMenuOverview:Title' => 'Arıza Gösterge Tablosu',
'UI-IncidentManagementOverview-IncidentByService' => 'Servislere göre arızalar',
'UI-IncidentManagementOverview-IncidentByPriority' => 'Önceliklere göre arızalar',
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Henüz atanmamış arızalar',
'UI:ChangeMgmtMenuOverview:Title' => 'Değişiklik Yönetimi Gösterge Tablosu',
'UI-ChangeManagementOverview-ChangeByType' => 'Tiplerine göre değişiklikler',
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Henüz atanmamış değişiklikler',
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Değişiklik nedeniyle devre dışı',
'UI:ServiceMgmtMenuOverview:Title' => 'Hizmet Yönetimi Gösterge Tablosu',
'UI-ServiceManagementOverview-CustomerContractToRenew' => '30 gün içinde biten Müşteri Sözleşmeleri',
'UI-ServiceManagementOverview-ProviderContractToRenew' => '30 gün içinde biten Tedarikçi Sözleşmeleri',
'UI:ContactsMenu' => 'İrtibatlar',
'UI:ContactsMenu+' => 'İrtibatlar',
'UI:ContactsMenu:Title' => 'İrtibatlar Özetleri',
'UI-ContactsMenu-ContactsByLocation' => 'Yerleşkeye göre irtibatlar',
'UI-ContactsMenu-ContactsByType' => 'Tipine göre irtibatlar',
'UI-ContactsMenu-ContactsByStatus' => 'Durumuna göre irtibatlar',
'Menu:CSVImportMenu' => 'CSV dışardan al',
'Menu:CSVImportMenu+' => 'Çoklu yaratım veya güncelleme',
'Menu:DataModelMenu' => 'Veri Modeli',
'Menu:DataModelMenu+' => 'Veri Modeli Özeti',
'Menu:ExportMenu' => 'Dışarı ver',
'Menu:ExportMenu+' => 'Sorgu sonucunu HTML, CSV veya XML olarak dışarı aktar',
'Menu:NotificationsMenu' => 'Uyarılar',
'Menu:NotificationsMenu+' => 'Uyarıların yapılandırılması',
'UI:NotificationsMenu:Title' => '<span class="hilite">Uyarıların</span> yapılandırılması',
'UI:NotificationsMenu:Help' => 'Yardım',
'UI:NotificationsMenu:HelpContent' => '<p>In iTop uyarı mekanizması ihtiyaca göre uyarlanabilir. Uyarılar iki tip nesne üzerine kurulmuştur: <i>tetikleme (triggers) ve işlemler (actions)</i>.</p>
<p><i><b>Triggers</b></i> uyarının ne zaman yapılacağını belirler. 3 tip tetikleme vardır ve nesnenin 3 durumuna ilişkilendirilmiştir:
<ol>
<li>the "OnCreate" tetikleme nesne yaratıldığı zaman çalışır</li>
<li>the "OnStateEnter" tetikleme nesne belli bir duruma girişinde çalışır</li>
<li>the "OnStateLeave" tetikleme nesne belli bir durumdan çıkışında çalışır</li>
</ol>
</p>
<p>
<i><b>Actions</b></i> tetikleme olduğunda yapılacak işlemleri belirler. Şimdilik sadece e-posta gönderme işlemi yapılabilmektedir.
E-posta için şablon tanımlanabilmektedir. Şablona parametreler girilebilmektedir (recipients, importance, etc.).
</p>
<p>Özel sayfa: <a href="../setup/email.test.php" target="_blank">email.test.php</a> PHP e-posta konfigürnunu test ediniz.</p>
<p>İşlemin gerçekleşmesi için bir tetikleme ile ilişkilendirilmesi gerekir.
Tetikleme gerçekleştiriğinde işlemler tanımlanan sıra numarası ile gerçekleştirilir.</p>',
'UI:NotificationsMenu:Triggers' => 'Tetikleyiciler',
'UI:NotificationsMenu:AvailableTriggers' => 'Kullanılabilir tetikleyiciler',
'UI:NotificationsMenu:OnCreate' => 'Nesne yaratıldığında',
'UI:NotificationsMenu:OnStateEnter' => 'Nesnenin durumuna girişinde',
'UI:NotificationsMenu:OnStateLeave' => 'Nesnenin durumdan çıkışında',
'UI:NotificationsMenu:Actions' => 'İşlemler',
'UI:NotificationsMenu:AvailableActions' => 'Kullanılabilir işlemler',
'Menu:AuditCategories' => 'Denetleme Kategorileri',
'Menu:AuditCategories+' => 'Denetleme Kategorileri',
'Menu:Notifications:Title' => 'Denetleme Kategorileri',
'Menu:RunQueriesMenu' => 'Sorgu çalıştır',
'Menu:RunQueriesMenu+' => 'Sorgu çalıştır',
'Menu:DataAdministration' => 'Veri Yönetimi',
'Menu:DataAdministration+' => 'Veri Yönetimi',
'Menu:UniversalSearchMenu' => 'Genel sorgu',
'Menu:UniversalSearchMenu+' => 'Herhangi bir arama...',
'Menu:ApplicationLogMenu' => 'Uygulama olay kayıtları',
'Menu:ApplicationLogMenu+' => 'Uygulama olay kayıtları',
'Menu:ApplicationLogMenu:Title' => 'Uygulama olay kayıtları',
'Menu:UserManagementMenu' => 'Kullanıcı Yönetimi',
'Menu:UserManagementMenu+' => 'Kullanıcı Yönetimi',
'Menu:ProfilesMenu' => 'Profiller',
'Menu:ProfilesMenu+' => 'Profiller',
'Menu:ProfilesMenu:Title' => 'Profiller',
'Menu:UserAccountsMenu' => 'Kullanıcı Hesapları',
'Menu:UserAccountsMenu+' => 'Kullanıcı Hesapları',
'Menu:UserAccountsMenu:Title' => 'Kullanıcı Hesapları',
'UI:iTopVersion:Short' => 'iTop versiyonu %1$s',
'UI:iTopVersion:Long' => 'iTop %3$s tarihli versiyonu %1$s-%2$s',
'UI:PropertiesTab' => 'Özellikler',
'UI:OpenDocumentInNewWindow_' => 'Dokümanı yeni pencerede aç: %1$s',
'UI:DownloadDocument_' => 'Dokümanı indir: %1$s',
'UI:Document:NoPreview' => 'Bu tip doküman için öngösterim mevcut değil',
'UI:DeadlineMissedBy_duration' => '%1$s ile kaçırıldı',
'UI:Deadline_LessThan1Min' => '< 1 dk.',
'UI:Deadline_Minutes' => '%1$d dk.',
'UI:Deadline_Hours_Minutes' => '%1$dh %2$ddk',
'UI:Deadline_Days_Hours_Minutes' => '%1$d gün %2$d saat %3$d dk',
'UI:Help' => 'Yardım',
'UI:PasswordConfirm' => '(Onay)',
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Yeni %1$s nesneleri eklemeden önce bu nesneyi kaydediniz.',
'UI:DisplayThisMessageAtStartup' => 'Bu mesajı başlangıçta göster',
'UI:RelationshipGraph' => 'Grafiksel gösterim',
'UI:RelationshipList' => 'List',
'Portal:Title' => 'iTop Kullanıcı Portalı',
'Portal:Refresh' => 'Yenile',
'Portal:Back' => 'Geri',
'Portal:CreateNewRequest' => 'Yeni istek yarat',
'Portal:ChangeMyPassword' => 'Şifre değiştir',
'Portal:Disconnect' => ıkış',
'Portal:OpenRequests' => 'Açık isteklerim',
'Portal:ResolvedRequests' => 'Çözdüğüm istekler',
'Portal:SelectService' => 'Kataloğdan servis seçiniz:',
'Portal:PleaseSelectOneService' => 'Sevis seçiniz',
'Portal:SelectSubcategoryFrom_Service' => '%1$s servis için alt kategorsi seçiniz:',
'Portal:PleaseSelectAServiceSubCategory' => 'Alt kategori seçiniz',
'Portal:DescriptionOfTheRequest' => 'İstek tanımlaması:',
'Portal:TitleRequestDetailsFor_Request' => 'İsteğin detayı %1$s:',
'Portal:NoOpenRequest' => 'Bu kategoride istek yok.',
'Portal:Button:CloseTicket' => 'Çağrıyı kapat',
'Portal:EnterYourCommentsOnTicket' => 'İsteğin çözümüne yönelik açıklamalar:',
'Portal:ErrorNoContactForThisUser' => 'Hata: mevcut kullanıcının irtibat bilgisi yok. Sistem yöneticisi ile irtibata geçiniz.',
'Enum:Undefined' => 'Tanımsız',
));
?>

View File

@@ -1,385 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Localized data
*
* @author Robert Deng <denglx@gmail.com>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
//////////////////////////////////////////////////////////////////////
// Classes in 'core/cmdb'
//////////////////////////////////////////////////////////////////////
//
//
// Class: CMDBChange
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChange' => '变更',
'Class:CMDBChange+' => '变更跟踪',
'Class:CMDBChange/Attribute:date' => '日期',
'Class:CMDBChange/Attribute:date+' => '变更被记录的日期和时间',
'Class:CMDBChange/Attribute:userinfo' => '杂项. 信息',
'Class:CMDBChange/Attribute:userinfo+' => '呼叫者已定义的信息',
));
//
// Class: CMDBChangeOp
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOp' => '变更操作',
'Class:CMDBChangeOp+' => '变更操作跟踪',
'Class:CMDBChangeOp/Attribute:change' => '变更',
'Class:CMDBChangeOp/Attribute:change+' => '变更',
'Class:CMDBChangeOp/Attribute:date' => '日期',
'Class:CMDBChangeOp/Attribute:date+' => '变更的日期和时间',
'Class:CMDBChangeOp/Attribute:userinfo' => '用户',
'Class:CMDBChangeOp/Attribute:userinfo+' => '变更造成者',
'Class:CMDBChangeOp/Attribute:objclass' => '对象类',
'Class:CMDBChangeOp/Attribute:objclass+' => '对象类',
'Class:CMDBChangeOp/Attribute:objkey' => '对象 id',
'Class:CMDBChangeOp/Attribute:objkey+' => '对象 id',
'Class:CMDBChangeOp/Attribute:finalclass' => '类别',
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
));
//
// Class: CMDBChangeOpCreate
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpCreate' => '对象创建',
'Class:CMDBChangeOpCreate+' => '对象创建跟踪',
));
//
// Class: CMDBChangeOpDelete
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpDelete' => '对象删除',
'Class:CMDBChangeOpDelete+' => '对象删除跟踪',
));
//
// Class: CMDBChangeOpSetAttribute
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpSetAttribute' => '对象变更',
'Class:CMDBChangeOpSetAttribute+' => '对象属性变更跟踪',
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => '属性',
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => '被修改属性的编码',
));
//
// Class: CMDBChangeOpSetAttributeScalar
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpSetAttributeScalar' => '属性变更',
'Class:CMDBChangeOpSetAttributeScalar+' => '对象标量属性变更跟踪',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => '原值',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => '属性原值',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => '新值',
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => '属性新值',
));
// Used by CMDBChangeOp... & derived classes
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Change:ObjectCreated' => 'Object created',
'Change:ObjectDeleted' => 'Object deleted',
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s set to %2$s (previous value: %3$s)',
'Change:Text_AppendedTo_AttName' => '%1$s appended to %2$s',
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modified, previous value: %2$s',
'Change:AttName_Changed' => '%1$s modified',
));
//
// Class: CMDBChangeOpSetAttributeBlob
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpSetAttributeBlob' => '数据变更',
'Class:CMDBChangeOpSetAttributeBlob+' => '数据变更跟踪',
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => '原数据',
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => '属性原来的内容',
));
//
// Class: CMDBChangeOpSetAttributeText
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:CMDBChangeOpSetAttributeText' => '文本变更',
'Class:CMDBChangeOpSetAttributeText+' => '文本变更跟踪',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => '原数据',
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => '属性原来的内容',
));
//
// Class: Event
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Event' => '记录事项',
'Class:Event+' => '应用程序的内部事项',
'Class:Event/Attribute:message' => '消息',
'Class:Event/Attribute:message+' => '事项简述',
'Class:Event/Attribute:date' => '日期',
'Class:Event/Attribute:date+' => '变更被记录的日期和时间',
'Class:Event/Attribute:userinfo' => '用户信息',
'Class:Event/Attribute:userinfo+' => '用户标识, 该用户的活动触发了该事项',
'Class:Event/Attribute:finalclass' => '类别',
'Class:Event/Attribute:finalclass+' => '',
));
//
// Class: EventNotification
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:EventNotification' => '通知事项',
'Class:EventNotification+' => '被发送通知的踪迹',
'Class:EventNotification/Attribute:trigger_id' => '触发器',
'Class:EventNotification/Attribute:trigger_id+' => '用户帐户',
'Class:EventNotification/Attribute:action_id' => '用户',
'Class:EventNotification/Attribute:action_id+' => '用户帐户',
'Class:EventNotification/Attribute:object_id' => '对象 id',
'Class:EventNotification/Attribute:object_id+' => '对象 id (由触发器定义的类 ?)',
));
//
// Class: EventNotificationEmail
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:EventNotificationEmail' => 'Email 发出事项',
'Class:EventNotificationEmail+' => '被发送的Email的踪迹',
'Class:EventNotificationEmail/Attribute:to' => 'TO',
'Class:EventNotificationEmail/Attribute:to+' => 'TO',
'Class:EventNotificationEmail/Attribute:cc' => 'CC',
'Class:EventNotificationEmail/Attribute:cc+' => 'CC',
'Class:EventNotificationEmail/Attribute:bcc' => 'BCC',
'Class:EventNotificationEmail/Attribute:bcc+' => 'BCC',
'Class:EventNotificationEmail/Attribute:from' => 'From',
'Class:EventNotificationEmail/Attribute:from+' => '消息发送者',
'Class:EventNotificationEmail/Attribute:subject' => '主题',
'Class:EventNotificationEmail/Attribute:subject+' => '主题',
'Class:EventNotificationEmail/Attribute:body' => '邮件体',
'Class:EventNotificationEmail/Attribute:body+' => '邮件体',
));
//
// Class: EventIssue
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:EventIssue' => '议题事项',
'Class:EventIssue+' => '议题踪迹 (警告, 错误, 等等.)',
'Class:EventIssue/Attribute:issue' => '议题',
'Class:EventIssue/Attribute:issue+' => '发生了什么',
'Class:EventIssue/Attribute:impact' => '影响',
'Class:EventIssue/Attribute:impact+' => '结果是什么',
'Class:EventIssue/Attribute:page' => '页面',
'Class:EventIssue/Attribute:page+' => 'HTTP 入口',
'Class:EventIssue/Attribute:arguments_post' => 'Posted arguments',
'Class:EventIssue/Attribute:arguments_post+' => 'HTTP POST arguments',
'Class:EventIssue/Attribute:arguments_get' => 'URL arguments',
'Class:EventIssue/Attribute:arguments_get+' => 'HTTP GET arguments',
'Class:EventIssue/Attribute:callstack' => 'Callstack',
'Class:EventIssue/Attribute:callstack+' => 'Call stack',
'Class:EventIssue/Attribute:data' => 'Data',
'Class:EventIssue/Attribute:data+' => 'More information',
));
//
// Class: EventWebService
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:EventWebService' => 'Web 服务事项',
'Class:EventWebService+' => 'Web 服务调用的踪迹',
'Class:EventWebService/Attribute:verb' => 'Verb',
'Class:EventWebService/Attribute:verb+' => '操作的名称',
'Class:EventWebService/Attribute:result' => '结果',
'Class:EventWebService/Attribute:result+' => '概览 成功/失败',
'Class:EventWebService/Attribute:log_info' => '信息记录',
'Class:EventWebService/Attribute:log_info+' => '结果信息记录',
'Class:EventWebService/Attribute:log_warning' => '警告记录',
'Class:EventWebService/Attribute:log_warning+' => '结果警告记录',
'Class:EventWebService/Attribute:log_error' => '错误记录',
'Class:EventWebService/Attribute:log_error+' => '结果错误记录',
'Class:EventWebService/Attribute:data' => '数据',
'Class:EventWebService/Attribute:data+' => '结果数据',
));
//
// Class: Action
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Action' => '客户化动作',
'Class:Action+' => '用户定义的动作',
'Class:Action/Attribute:name' => '名称',
'Class:Action/Attribute:name+' => '',
'Class:Action/Attribute:description' => '描述',
'Class:Action/Attribute:description+' => '',
'Class:Action/Attribute:status' => '状态',
'Class:Action/Attribute:status+' => '生产中 或 ?',
'Class:Action/Attribute:status/Value:test' => '测试中',
'Class:Action/Attribute:status/Value:test+' => '测试中',
'Class:Action/Attribute:status/Value:enabled' => '生产中',
'Class:Action/Attribute:status/Value:enabled+' => '生产中',
'Class:Action/Attribute:status/Value:disabled' => '非活动',
'Class:Action/Attribute:status/Value:disabled+' => '非活动',
'Class:Action/Attribute:trigger_list' => '相关触发器',
'Class:Action/Attribute:trigger_list+' => '关联到该动作的触发器',
'Class:Action/Attribute:finalclass' => '类别',
'Class:Action/Attribute:finalclass+' => '',
));
//
// Class: ActionNotification
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:ActionNotification' => '通知',
'Class:ActionNotification+' => '通知 (摘要)',
));
//
// Class: ActionEmail
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:ActionEmail' => 'Email 通知',
'Class:ActionEmail+' => '',
'Class:ActionEmail/Attribute:test_recipient' => '测试收件人',
'Class:ActionEmail/Attribute:test_recipient+' => '状态被设置为"测试"时的目的地',
'Class:ActionEmail/Attribute:from' => '来自',
'Class:ActionEmail/Attribute:from+' => '将发送到邮件头',
'Class:ActionEmail/Attribute:reply_to' => '回复到',
'Class:ActionEmail/Attribute:reply_to+' => '将发送到邮件头',
'Class:ActionEmail/Attribute:to' => 'To',
'Class:ActionEmail/Attribute:to+' => '邮件的目的地',
'Class:ActionEmail/Attribute:cc' => 'Cc',
'Class:ActionEmail/Attribute:cc+' => 'Carbon Copy',
'Class:ActionEmail/Attribute:bcc' => 'bcc',
'Class:ActionEmail/Attribute:bcc+' => 'Blind Carbon Copy',
'Class:ActionEmail/Attribute:subject' => '主题',
'Class:ActionEmail/Attribute:subject+' => '邮件标题',
'Class:ActionEmail/Attribute:body' => '邮件体',
'Class:ActionEmail/Attribute:body+' => '邮件内容',
'Class:ActionEmail/Attribute:importance' => '重要',
'Class:ActionEmail/Attribute:importance+' => '重要标志',
'Class:ActionEmail/Attribute:importance/Value:low' => '低',
'Class:ActionEmail/Attribute:importance/Value:low+' => '低',
'Class:ActionEmail/Attribute:importance/Value:normal' => '一般',
'Class:ActionEmail/Attribute:importance/Value:normal+' => '一般',
'Class:ActionEmail/Attribute:importance/Value:high' => '高',
'Class:ActionEmail/Attribute:importance/Value:high+' => '高',
));
//
// Class: Trigger
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:Trigger' => '触发器',
'Class:Trigger+' => '客户化事项句柄',
'Class:Trigger/Attribute:description' => '描述',
'Class:Trigger/Attribute:description+' => '单行描述',
'Class:Trigger/Attribute:action_list' => '被触发的动作',
'Class:Trigger/Attribute:action_list+' => '触发器击发时执行的动作',
'Class:Trigger/Attribute:finalclass' => '类别',
'Class:Trigger/Attribute:finalclass+' => '',
));
//
// Class: TriggerOnObject
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TriggerOnObject' => '触发器 (类依赖的)',
'Class:TriggerOnObject+' => '在一个给定类对象上的触发器',
'Class:TriggerOnObject/Attribute:target_class' => '目标类',
'Class:TriggerOnObject/Attribute:target_class+' => '',
));
//
// Class: TriggerOnStateChange
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TriggerOnStateChange' => '触发器 (状态变化时)',
'Class:TriggerOnStateChange+' => '对象状态变化时的触发器',
'Class:TriggerOnStateChange/Attribute:state' => '状态',
'Class:TriggerOnStateChange/Attribute:state+' => '',
));
//
// Class: TriggerOnStateEnter
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TriggerOnStateEnter' => '触发器 (进入一个状态时)',
'Class:TriggerOnStateEnter+' => '对象状态变化时触发器 - 进入时',
));
//
// Class: TriggerOnStateLeave
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TriggerOnStateLeave' => '触发器 (离开一个状态时)',
'Class:TriggerOnStateLeave+' => '对象状态变化时触发器 - 离开时',
));
//
// Class: TriggerOnObjectCreate
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:TriggerOnObjectCreate' => '触发器 (对象创建时)',
'Class:TriggerOnObjectCreate+' => '一个给定类[子类]对象创建时触发器',
));
//
// Class: lnkTriggerAction
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:lnkTriggerAction' => '动作/触发器',
'Class:lnkTriggerAction+' => '触发器和动作间的链接',
'Class:lnkTriggerAction/Attribute:action_id' => '动作',
'Class:lnkTriggerAction/Attribute:action_id+' => '要执行的动作',
'Class:lnkTriggerAction/Attribute:action_name' => '动作',
'Class:lnkTriggerAction/Attribute:action_name+' => '',
'Class:lnkTriggerAction/Attribute:trigger_id' => '触发器',
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
'Class:lnkTriggerAction/Attribute:trigger_name' => '触发器',
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
'Class:lnkTriggerAction/Attribute:order' => '顺序',
'Class:lnkTriggerAction/Attribute:order+' => '动作执行顺序',
));
?>

View File

@@ -1,868 +0,0 @@
<?php
// Copyright (C) 2010 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/**
* Localized data
*
* @author Robert Deng <denglx@gmail.com>
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
*/
//////////////////////////////////////////////////////////////////////
// Classes in 'gui'
//////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////
// Classes in 'application'
//////////////////////////////////////////////////////////////////////
//
//
// Class: AuditCategory
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:AuditCategory' => '审计类目',
'Class:AuditCategory+' => '全部审计中的一个区段',
'Class:AuditCategory/Attribute:name' => '类目名称',
'Class:AuditCategory/Attribute:name+' => '类目简称',
'Class:AuditCategory/Attribute:description' => '审计类目描述',
'Class:AuditCategory/Attribute:description+' => '该审计类目的详细描述',
'Class:AuditCategory/Attribute:definition_set' => '定义',
'Class:AuditCategory/Attribute:definition_set+' => '定义用于审计的对象的OQL表达式',
'Class:AuditCategory/Attribute:rules_list' => '审计规则',
'Class:AuditCategory/Attribute:rules_list+' => '该类目的审计规则',
));
//
// Class: AuditRule
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:AuditRule' => '审计规则',
'Class:AuditRule+' => '用于检查给定审计类目的规则',
'Class:AuditRule/Attribute:name' => '规则名称',
'Class:AuditRule/Attribute:name+' => '规则简称',
'Class:AuditRule/Attribute:description' => '审计规则描述',
'Class:AuditRule/Attribute:description+' => '审计规则详细描述',
'Class:AuditRule/Attribute:query' => '要运行的查询',
'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',
'Class:AuditRule/Attribute:valid_flag/Value:true+' => 'true',
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'false',
'Class:AuditRule/Attribute:valid_flag/Value:false+' => 'false',
'Class:AuditRule/Attribute:category_id' => '类目',
'Class:AuditRule/Attribute:category_id+' => '该规则对应的类目',
'Class:AuditRule/Attribute:category_name' => '类目',
'Class:AuditRule/Attribute:category_name+' => '该规则对应类目的名称',
));
//////////////////////////////////////////////////////////////////////
// Classes in 'addon/userrights'
//////////////////////////////////////////////////////////////////////
//
//
// Class: User
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:User' => '用户',
'Class:User+' => '用户登录名',
'Class:User/Attribute:finalclass' => '帐户类别',
'Class:User/Attribute:finalclass+' => '',
'Class:User/Attribute:contactid' => '联系人 (个人)',
'Class:User/Attribute:contactid+' => '来自业务数据的个人明细信息',
'Class:User/Attribute:last_name' => '名',
'Class:User/Attribute:last_name+' => '对应联系人的名字',
'Class:User/Attribute:first_name' => '姓',
'Class:User/Attribute:first_name+' => '对应联系人的姓氏',
'Class:User/Attribute:email' => 'Email',
'Class:User/Attribute:email+' => '对应联系人的Email',
'Class:User/Attribute:login' => '登录名',
'Class:User/Attribute:login+' => '用户标识字符串',
'Class:User/Attribute:language' => '语言',
'Class:User/Attribute:language+' => '用户语言',
'Class:User/Attribute:language/Value:EN US' => 'English',
'Class:User/Attribute:language/Value:EN US+' => 'English (U.S.)',
'Class:User/Attribute:language/Value:FR FR' => 'French',
'Class:User/Attribute:language/Value:FR FR+' => 'French (France)',
'Class:User/Attribute:profile_list' => '简档',
'Class:User/Attribute:profile_list+' => '角色, 为该人员授权',
'Class:User/Attribute:allowed_org_list' => '被许可的组织',
'Class:User/Attribute:allowed_org_list+' => '终端用户被许可看到下述组织的数据. 如果没有指定的组织,则无限制.',
'Class:User/Error:LoginMustBeUnique' => '登录名必须唯一 - "%1s" 已经被使用.',
'Class:User/Error:AtLeastOneProfileIsNeeded' => '至少一个简档必须指定给该用户.',
));
//
// Class: URP_Profiles
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:URP_Profiles' => '简档',
'Class:URP_Profiles+' => '用户简档',
'Class:URP_Profiles/Attribute:name' => '名称',
'Class:URP_Profiles/Attribute:name+' => '标签',
'Class:URP_Profiles/Attribute:description' => '描述',
'Class:URP_Profiles/Attribute:description+' => '单行描述',
'Class:URP_Profiles/Attribute:user_list' => '用户',
'Class:URP_Profiles/Attribute:user_list+' => '拥有该角色的人员',
));
//
// Class: URP_Dimensions
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:URP_Dimensions' => '维度',
'Class:URP_Dimensions+' => '应用维度 (定义纵深)',
'Class:URP_Dimensions/Attribute:name' => '名称',
'Class:URP_Dimensions/Attribute:name+' => '标签',
'Class:URP_Dimensions/Attribute:description' => '描述',
'Class:URP_Dimensions/Attribute:description+' => '单行描述',
'Class:URP_Dimensions/Attribute:type' => '类别',
'Class:URP_Dimensions/Attribute:type+' => '类名称或数据类别 (投影单位)',
));
//
// Class: URP_UserProfile
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:URP_UserProfile' => '简档目标用户',
'Class:URP_UserProfile+' => '用户的简档',
'Class:URP_UserProfile/Attribute:userid' => '用户',
'Class:URP_UserProfile/Attribute:userid+' => '用户帐户',
'Class:URP_UserProfile/Attribute:userlogin' => '登录名',
'Class:URP_UserProfile/Attribute:userlogin+' => '用户的登录名',
'Class:URP_UserProfile/Attribute:profileid' => '简档',
'Class:URP_UserProfile/Attribute:profileid+' => '使用简档',
'Class:URP_UserProfile/Attribute:profile' => '简档',
'Class:URP_UserProfile/Attribute:profile+' => '简档名称',
'Class:URP_UserProfile/Attribute:reason' => '原因',
'Class:URP_UserProfile/Attribute:reason+' => '解释为什么该人员需要拥有该角色',
));
//
// Class: URP_UserOrg
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:URP_UserOrg' => '用户组织',
'Class:URP_UserOrg+' => '被许可的组织',
'Class:URP_UserOrg/Attribute:userid' => '用户',
'Class:URP_UserOrg/Attribute:userid+' => '用户帐户',
'Class:URP_UserOrg/Attribute:userlogin' => '登录名',
'Class:URP_UserOrg/Attribute:userlogin+' => '用户的登录名',
'Class:URP_UserOrg/Attribute:allowed_org_id' => '组织',
'Class:URP_UserOrg/Attribute:allowed_org_id+' => '被许可的组织',
'Class:URP_UserOrg/Attribute:allowed_org_name' => '组织',
'Class:URP_UserOrg/Attribute:allowed_org_name+' => '被许可的组织',
'Class:URP_UserOrg/Attribute:reason' => '原因',
'Class:URP_UserOrg/Attribute:reason+' => '解释为什么该人员被许可查阅该组织的数据',
));
//
// Class: URP_ProfileProjection
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:URP_ProfileProjection' => '简档投射',
'Class:URP_ProfileProjection+' => '简档投射',
'Class:URP_ProfileProjection/Attribute:dimensionid' => '维度',
'Class:URP_ProfileProjection/Attribute:dimensionid+' => '应用维度',
'Class:URP_ProfileProjection/Attribute:dimension' => '维度',
'Class:URP_ProfileProjection/Attribute:dimension+' => '应用维度',
'Class:URP_ProfileProjection/Attribute:profileid' => '简档',
'Class:URP_ProfileProjection/Attribute:profileid+' => '使用简档',
'Class:URP_ProfileProjection/Attribute:profile' => '简档',
'Class:URP_ProfileProjection/Attribute:profile+' => '简档名称',
'Class:URP_ProfileProjection/Attribute:value' => '值表达式',
'Class:URP_ProfileProjection/Attribute:value+' => 'OQL expression (using $user) | constant | | +attribute code',
'Class:URP_ProfileProjection/Attribute:attribute' => '属性',
'Class:URP_ProfileProjection/Attribute:attribute+' => '目标属性编码 (可选)',
));
//
// Class: URP_ClassProjection
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:URP_ClassProjection' => '类投射',
'Class:URP_ClassProjection+' => '类投射',
'Class:URP_ClassProjection/Attribute:dimensionid' => '维度',
'Class:URP_ClassProjection/Attribute:dimensionid+' => '应用维度',
'Class:URP_ClassProjection/Attribute:dimension' => '维度',
'Class:URP_ClassProjection/Attribute:dimension+' => '应用维度',
'Class:URP_ClassProjection/Attribute:class' => '类',
'Class:URP_ClassProjection/Attribute:class+' => '目标类',
'Class:URP_ClassProjection/Attribute:value' => '值表达式',
'Class:URP_ClassProjection/Attribute:value+' => 'OQL expression (using $this) | constant | | +attribute code',
'Class:URP_ClassProjection/Attribute:attribute' => '属性',
'Class:URP_ClassProjection/Attribute:attribute+' => '目标属性编码 (可选)',
));
//
// Class: URP_ActionGrant
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:URP_ActionGrant' => '动作许可',
'Class:URP_ActionGrant+' => '类上的许可',
'Class:URP_ActionGrant/Attribute:profileid' => '简档',
'Class:URP_ActionGrant/Attribute:profileid+' => '使用简档',
'Class:URP_ActionGrant/Attribute:profile' => '简档',
'Class:URP_ActionGrant/Attribute:profile+' => '使用简档',
'Class:URP_ActionGrant/Attribute:class' => '类',
'Class:URP_ActionGrant/Attribute:class+' => '目标类',
'Class:URP_ActionGrant/Attribute:permission' => '许可',
'Class:URP_ActionGrant/Attribute:permission+' => '允许或不允许?',
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => '是',
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => '是',
'Class:URP_ActionGrant/Attribute:permission/Value:no' => '否',
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => '否',
'Class:URP_ActionGrant/Attribute:action' => '动作',
'Class:URP_ActionGrant/Attribute:action+' => '可用于给定类上的操作',
));
//
// Class: URP_StimulusGrant
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:URP_StimulusGrant' => '刺激许可',
'Class:URP_StimulusGrant+' => '对象生命周期中刺激的许可',
'Class:URP_StimulusGrant/Attribute:profileid' => '简档',
'Class:URP_StimulusGrant/Attribute:profileid+' => '使用简档',
'Class:URP_StimulusGrant/Attribute:profile' => '简档',
'Class:URP_StimulusGrant/Attribute:profile+' => '使用简档',
'Class:URP_StimulusGrant/Attribute:class' => '类',
'Class:URP_StimulusGrant/Attribute:class+' => '目标类',
'Class:URP_StimulusGrant/Attribute:permission' => '许可',
'Class:URP_StimulusGrant/Attribute:permission+' => '允许或不允许?',
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => '是',
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => '是',
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => '否',
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => '否',
'Class:URP_StimulusGrant/Attribute:stimulus' => '刺激',
'Class:URP_StimulusGrant/Attribute:stimulus+' => '刺激编码',
));
//
// Class: URP_AttributeGrant
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Class:URP_AttributeGrant' => '属性许可',
'Class:URP_AttributeGrant+' => '属性层次上的许可',
'Class:URP_AttributeGrant/Attribute:actiongrantid' => '动作准许',
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => '动作准许',
'Class:URP_AttributeGrant/Attribute:attcode' => '属性',
'Class:URP_AttributeGrant/Attribute:attcode+' => '属性编码',
));
//
// String from the User Interface: menu, messages, buttons, etc...
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Menu:WelcomeMenu' => '欢迎',
'Menu:WelcomeMenu+' => '欢迎来到iTop',
'Menu:WelcomeMenuPage' => '欢迎',
'Menu:WelcomeMenuPage+' => '欢迎来到iTop',
'UI:WelcomeMenu:Title' => '欢迎来到iTop',
'UI:WelcomeMenu:LeftBlock' => '<p>iTop 是完全的, 开发源码的, IT 操作门户.</p>
<ul>系统包括:
<li>完全的 CMDB (Configuration management database) 记录和管理 IT 资产清册.</li>
<li>事件管理模块跟踪和传递所有发生在 IT 系统中的事件.</li>
<li>变更管理模块规划和跟踪 IT 环境中发生的变化.</li>
<li>已知的错误数据库加速事件的处理.</li>
<li>停损模块记录所有计划的停机并通知对应的联系人.</li>
<li>通过仪表板迅速获得 IT 的概览.</li>
</ul>
<p>所有模块可以各自独立地、一步一步地搭建.</p>',
'UI:WelcomeMenu:RightBlock' => '<p>iTop 是面向服务提供商的, 它使得 IT 工程师方便地管理多客户和多组织.
<ul>iTop, 提供功能丰富的业务处理流程:
<li>提高 IT 管理效率</li>
<li>驱动 IT 操作能力</li>
<li>提高用户满意度,从业务能力方面提供执行力.</li>
</ul>
</p>
<p>iTop 是完全开放的,可被集成到您当前的IT管理架构中.</p>
<p>
<ul>利用这个新一代的 IT 操作门户, 可以帮助您:
<li>更好地管理越来越复杂的 IT 环境.</li>
<li>按照您的步骤实现 ITIL 流程.</li>
<li>管理您的 IT 中最重要的设施: 文档化.</li>
</ul>
</p>',
'UI:WelcomeMenu:AllOpenRequests' => '待处理的请求: %1$d',
'UI:WelcomeMenu:MyCalls' => '我的请求',
'UI:WelcomeMenu:OpenIncidents' => '待处理的事件: %1$d',
'UI:WelcomeMenu:AllConfigItems' => '配置项: %1$d',
'UI:WelcomeMenu:MyIncidents' => '指派给我的事件',
'UI:AllOrganizations' => ' 所有组织 ',
'UI:YourSearch' => '您的搜索',
'UI:LoggedAsMessage' => '以 %1$s 登录',
'UI:LoggedAsMessage+Admin' => '以 %1$s 登录(Administrator)',
'UI:Button:Logoff' => '注销',
'UI:Button:GlobalSearch' => '搜索',
'UI:Button:Search' => '搜索',
'UI:Button:Query' => ' 查询 ',
'UI:Button:Ok' => '确认',
'UI:Button:Cancel' => '取消',
'UI:Button:Apply' => '应用',
'UI:Button:Back' => ' << Back ',
'UI:Button:Next' => ' Next >> ',
'UI:Button:Finish' => ' 结束 ',
'UI:Button:DoImport' => ' 运行导入 ! ',
'UI:Button:Done' => ' 完成 ',
'UI:Button:SimulateImport' => ' 激活导入 ',
'UI:Button:Test' => '测试!',
'UI:Button:Evaluate' => ' 评价 ',
'UI:Button:AddObject' => ' 添加... ',
'UI:Button:BrowseObjects' => ' 浏览... ',
'UI:Button:Add' => ' 添加 ',
'UI:Button:AddToList' => ' << 添加 ',
'UI:Button:RemoveFromList' => ' 移除 >> ',
'UI:Button:FilterList' => ' 过滤... ',
'UI:Button:Create' => ' 创建 ',
'UI:Button:Delete' => ' 删除 ! ',
'UI:Button:ChangePassword' => ' 改变密码 ',
'UI:Button:ResetPassword' => ' 重置密码 ',
'UI:SearchToggle' => '搜索',
'UI:ClickToCreateNew' => '创建一个新的 %1$s',
'UI:SearchFor_Class' => '搜索 %1$s 对象',
'UI:NoObjectToDisplay' => '没有对象可显示.',
'UI:Error:MandatoryTemplateParameter_object_id' => '当link_attr被指定时,参数 object_id 是必须的. 检查显示模板的定义.',
'UI:Error:MandatoryTemplateParameter_target_attr' => '当 link_attr被指定时, 参数 target_attr 是必须的. 检查显示模板的定义.',
'UI:Error:MandatoryTemplateParameter_group_by' => '参数 group_by 是必须的. 检查显示模板的定义.',
'UI:Error:InvalidGroupByFields' => 'group by 的栏目列表是无效的: "%1$s".',
'UI:Error:UnsupportedStyleOfBlock' => '错误: 不被支持的 block 格式: "%1$s".',
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => '错误的链接定义: the class of objects to manage: %1$s was not found as an external key in the class %2$s',
'UI:Error:Object_Class_Id_NotFound' => 'Object: %1$s:%2$d not found.',
'UI:Error:WizardCircularReferenceInDependencies' => '错误: 栏目之间的依赖性出现循环引用, 检查数据模型.',
'UI:Error:UploadedFileTooBig' => '上传文件太大. (允许的最大限制是 %1$s). 检查您的 PHP configuration 中 upload_max_filesize 和 post_max_size.',
'UI:Error:UploadedFileTruncated.' => '上传的文件被截断 !',
'UI:Error:NoTmpDir' => '临时目录未定义.',
'UI:Error:CannotWriteToTmp_Dir' => '无法向硬盘写入临时文件. upload_tmp_dir = "%1$s".',
'UI:Error:UploadStoppedByExtension_FileName' => '上传因为扩展名被停止. (Original file name = "%1$s").',
'UI:Error:UploadFailedUnknownCause_Code' => '文件上传失败, 未知原因. (Error code = "%1$s").',
'UI:Error:1ParametersMissing' => '错误: 必须为该操作指定下述参数: %1$s.',
'UI:Error:2ParametersMissing' => '错误: 必须为该操作指定下述参数: %1$s and %2$s.',
'UI:Error:3ParametersMissing' => '错误: 必须为该操作指定下述参数: %1$s, %2$s and %3$s.',
'UI:Error:4ParametersMissing' => '错误: 必须为该操作指定下述参数: %1$s, %2$s, %3$s and %4$s.',
'UI:Error:IncorrectOQLQuery_Message' => '错误: 错误的 OQL 查询: %1$s',
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => '运行该查询时产生了一个错误: %1$s',
'UI:Error:ObjectAlreadyUpdated' => '错误: 该对象已被更新.',
'UI:Error:ObjectCannotBeUpdated' => '错误: 对象不能被更新.',
'UI:Error:ObjectsAlreadyDeleted' => '错误: 对象已被删除!',
'UI:Error:BulkDeleteNotAllowedOn_Class' => '您未被允许进行 %1$s 类对象的批量删除',
'UI:Error:DeleteNotAllowedOn_Class' => '您未被允许删除 %1$s 类的对象',
'UI:Error:BulkModifyNotAllowedOn_Class' => '您未被允许进行 %1$s 类对象的批量更新',
'UI:Error:ObjectAlreadyCloned' => '错误: 该对象已被克隆!',
'UI:Error:ObjectAlreadyCreated' => '错误: 该对象已被创建!',
'UI:Error:Invalid_Stimulus_On_Object_In_State' => '错误: 在对象 %2$s 的 "%3$s" 状态上的无效刺激 "%1$s" .',
'UI:GroupBy:Count' => '计数',
'UI:GroupBy:Count+' => '元素数量',
'UI:CountOfObjects' => '%1$d 个对象匹配给定的条件.',
'UI_CountOfObjectsShort' => '%1$d 个对象.',
'UI:NoObject_Class_ToDisplay' => '没有 %1$s 可以显示',
'UI:History:LastModified_On_By' => '最后修改 %1$s 被 %2$s.',
'UI:HistoryTab' => '历史',
'UI:NotificationsTab' => '通知',
'UI:History:Date' => '日期',
'UI:History:Date+' => '变更日期',
'UI:History:User' => '用户',
'UI:History:User+' => '造成变更的用户',
'UI:History:Changes' => '变更',
'UI:History:Changes+' => '对该对象所做的变更',
'UI:Loading' => '载入...',
'UI:Menu:Actions' => '动作',
'UI:Menu:New' => '新建...',
'UI:Menu:Add' => '添加...',
'UI:Menu:Manage' => '管理...',
'UI:Menu:EMail' => 'eMail',
'UI:Menu:CSVExport' => 'CSV 导出',
'UI:Menu:Modify' => '修改...',
'UI:Menu:Delete' => '删除...',
'UI:Menu:Manage' => '管理...',
'UI:Menu:BulkDelete' => '删除...',
'UI:UndefinedObject' => '未定义',
'UI:Document:OpenInNewWindow:Download' => '在新窗口打开: %1$s, 下载: %2$s',
'UI:SelectAllToggle+' => '选择 / 清除选择 全部',
'UI:TruncatedResults' => '%1$d objects displayed out of %2$d',
'UI:DisplayAll' => '显示全部',
'UI:CollapseList' => '收缩',
'UI:CountOfResults' => '%1$d 个对象',
'UI:ChangesLogTitle' => '变更记录 (%1$d):',
'UI:EmptyChangesLogTitle' => '变更记录为空',
'UI:SearchFor_Class_Objects' => '搜索 %1$s 对象',
'UI:OQLQueryBuilderTitle' => 'OQL Query Builder',
'UI:OQLQueryTab' => 'OQL 查询',
'UI:SimpleSearchTab' => '简单搜索',
'UI:Details+' => '明细',
'UI:SearchValue:Any' => '* 任何 *',
'UI:SearchValue:Mixed' => '* 混合 *',
'UI:SelectOne' => '-- 选择一个 --',
'UI:Login:Welcome' => '欢迎来到 iTop!',
'UI:Login:IncorrectLoginPassword' => '错误的登录名/密码, 请重试.',
'UI:Login:IdentifyYourself' => '在继续之前, 确定您自己的身份',
'UI:Login:UserNamePrompt' => '用户名称',
'UI:Login:PasswordPrompt' => '密码',
'UI:Login:ChangeYourPassword' => '改变您的密码',
'UI:Login:OldPasswordPrompt' => '旧密码',
'UI:Login:NewPasswordPrompt' => '新密码',
'UI:Login:RetypeNewPasswordPrompt' => '重复新密码',
'UI:Login:IncorrectOldPassword' => '错误: 旧密码错误',
'UI:LogOffMenu' => '注销',
'UI:LogOff:ThankYou' => '谢谢使用iTop',
'UI:LogOff:ClickHereToLoginAgain' => '点击这里再次登录...',
'UI:ChangePwdMenu' => '改变密码...',
'UI:Login:RetypePwdDoesNotMatch' => '新密码和重录的新密码不符!',
'UI:Button:Login' => '进入 iTop',
'UI:Login:Error:AccessRestricted' => 'iTop 访问被限制. 请联系iTop系统管理员.',
'UI:Login:Error:AccessAdmin' => '有系统管理员权限才能访问. 请联系iTop系统管理员.',
'UI:CSVImport:MappingSelectOne' => '-- 选择一个 --',
'UI:CSVImport:MappingNotApplicable' => '-- 忽略该栏 --',
'UI:CSVImport:NoData' => '空的数据..., 请提供数据!',
'UI:Title:DataPreview' => '数据预览',
'UI:CSVImport:ErrorOnlyOneColumn' => '错误: 数据仅包含一列. 您选择了合适的分隔字符了吗?',
'UI:CSVImport:FieldName' => '栏 %1$d',
'UI:CSVImport:DataLine1' => '数据行 1',
'UI:CSVImport:DataLine2' => '数据行 2',
'UI:CSVImport:idField' => 'id (主键)',
'UI:Title:BulkImport' => 'iTop - 大批量导入',
'UI:Title:BulkImport+' => 'CSV 导入 Wizard',
'UI:CSVImport:ClassesSelectOne' => '-- 选择一个 --',
'UI:CSVImport:ErrorExtendedAttCode' => '内部错误: "%1$s" 是错误的编码, 因为 "%2$s" 不是类 "%3$s" 的外部健',
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d 对象将保持不变.',
'UI:CSVImport:ObjectsWillBeModified' => '%1$d 对象将被修改.',
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d 对象将被添加.',
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d 对象将有错误.',
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d 对象保持不变.',
'UI:CSVImport:ObjectsWereModified' => '%1$d 对象已被修改.',
'UI:CSVImport:ObjectsWereAdded' => '%1$d 对象已被添加.',
'UI:CSVImport:ObjectsHadErrors' => '%1$d 对象已有错误.',
'UI:Title:CSVImportStep2' => '步骤 2 of 5: CSV 数据选项',
'UI:Title:CSVImportStep3' => '步骤 3 of 5: 数据映射',
'UI:Title:CSVImportStep4' => '步骤 4 of 5: 导入模拟',
'UI:Title:CSVImportStep5' => '步骤 5 of 5: 导入完成',
'UI:CSVImport:LinesNotImported' => '无法装载的行:',
'UI:CSVImport:LinesNotImported+' => '以下行无法导入因为其中包含错误',
'UI:CSVImport:SeparatorComma+' => ', (逗号)',
'UI:CSVImport:SeparatorSemicolon+' => '; (分号)',
'UI:CSVImport:SeparatorTab+' => 'tab',
'UI:CSVImport:SeparatorOther' => '其他:',
'UI:CSVImport:QualifierDoubleQuote+' => '" (双引号)',
'UI:CSVImport:QualifierSimpleQuote+' => '\' (单引号)',
'UI:CSVImport:QualifierOther' => '其他:',
'UI:CSVImport:TreatFirstLineAsHeader' => '将第一行视做标题头(列名称)',
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => '跳过文件开始的 %1$s 行',
'UI:CSVImport:CSVDataPreview' => 'CSV 数据预览',
'UI:CSVImport:SelectFile' => '选择导入的文件:',
'UI:CSVImport:Tab:LoadFromFile' => '从文件装载',
'UI:CSVImport:Tab:CopyPaste' => '复制和粘贴数据',
'UI:CSVImport:Tab:Templates' => '模板',
'UI:CSVImport:PasteData' => '粘贴数据以导入:',
'UI:CSVImport:PickClassForTemplate' => '选择下载的模板: ',
'UI:CSVImport:SeparatorCharacter' => '分隔字符:',
'UI:CSVImport:TextQualifierCharacter' => '文本限定字符',
'UI:CSVImport:CommentsAndHeader' => '注释和头',
'UI:CSVImport:SelectClass' => '选择类以导入:',
'UI:CSVImport:AdvancedMode' => '高级模式',
'UI:CSVImport:AdvancedMode+' => '在高级模式中,对象的"id" (主键) 可以被用来修改和重命名对象.' .
'不管怎样,列 "id" (如果存在) 只能被用做一个搜索条件,不能与其它搜索条件混用.',
'UI:CSVImport:SelectAClassFirst' => '首先选择一个类以配置映射.',
'UI:CSVImport:HeaderFields' => '栏目',
'UI:CSVImport:HeaderMappings' => '映射',
'UI:CSVImport:HeaderSearch' => '搜索?',
'UI:CSVImport:AlertIncompleteMapping' => '请为每个栏选择一个映射.',
'UI:CSVImport:AlertNoSearchCriteria' => '请选择至少一个搜索条件',
'UI:CSVImport:Encoding' => '字符编码',
'UI:UniversalSearchTitle' => 'iTop - 通用搜索',
'UI:UniversalSearch:Error' => '错误: %1$s',
'UI:UniversalSearch:LabelSelectTheClass' => '选择类以搜索: ',
'UI:Audit:Title' => 'iTop - CMDB 审计',
'UI:Audit:InteractiveAudit' => '交互审计',
'UI:Audit:HeaderAuditRule' => '设计规则',
'UI:Audit:HeaderNbObjects' => '# 对象',
'UI:Audit:HeaderNbErrors' => '# 错误',
'UI:Audit:PercentageOk' => '% Ok',
'UI:RunQuery:Title' => 'iTop - OQL 查询评估',
'UI:RunQuery:QueryExamples' => '查询样例',
'UI:RunQuery:HeaderPurpose' => '目的',
'UI:RunQuery:HeaderPurpose+' => '该查询的解释',
'UI:RunQuery:HeaderOQLExpression' => 'OQL 表达式',
'UI:RunQuery:HeaderOQLExpression+' => 'OQL 语法表示的查询',
'UI:RunQuery:ExpressionToEvaluate' => '待评估的表达式: ',
'UI:RunQuery:MoreInfo' => '该查询的更多信息: ',
'UI:RunQuery:DevelopedQuery' => '重新开发的查询表达式: ',
'UI:RunQuery:SerializedFilter' => '序列化的过滤器: ',
'UI:RunQuery:Error' => '运行该查询时产生了一个错误: %1$s',
'UI:Schema:Title' => 'iTop 对象 schema',
'UI:Schema:CategoryMenuItem' => '类目 <b>%1$s</b>',
'UI:Schema:Relationships' => '关联',
'UI:Schema:AbstractClass' => '抽象类: 该类不能实例化对象.',
'UI:Schema:NonAbstractClass' => '非抽象类: 该类可以实例化对象.',
'UI:Schema:ClassHierarchyTitle' => '类层级',
'UI:Schema:AllClasses' => '所有类',
'UI:Schema:ExternalKey_To' => '%1$s的外部键',
'UI:Schema:Columns_Description' => '列: <em>%1$s</em>',
'UI:Schema:Default_Description' => '缺省: "%1$s"',
'UI:Schema:NullAllowed' => '允许空',
'UI:Schema:NullNotAllowed' => '不允许空',
'UI:Schema:Attributes' => '属性',
'UI:Schema:AttributeCode' => '属性编码',
'UI:Schema:AttributeCode+' => '属性的内部编码',
'UI:Schema:Label' => '标签',
'UI:Schema:Label+' => '属性标签',
'UI:Schema:Type' => '类别',
'UI:Schema:Type+' => '属性的数据类型',
'UI:Schema:Origin' => '起源',
'UI:Schema:Origin+' => '该属性被定义的基类',
'UI:Schema:Description' => '描述',
'UI:Schema:Description+' => '属性的描述',
'UI:Schema:AllowedValues' => '允许值',
'UI:Schema:AllowedValues+' => '该属性取值的限制',
'UI:Schema:MoreInfo' => '更多信息',
'UI:Schema:MoreInfo+' => '该栏目在数据库中被定义的更多信息',
'UI:Schema:SearchCriteria' => '搜索条件',
'UI:Schema:FilterCode' => '过滤器编码',
'UI:Schema:FilterCode+' => '该搜索条件的编码',
'UI:Schema:FilterDescription' => '描述',
'UI:Schema:FilterDescription+' => '该搜索条件的描述',
'UI:Schema:AvailOperators' => '可用的算子',
'UI:Schema:AvailOperators+' => '该搜索条件可能的算子',
'UI:Schema:ChildClasses' => '子类',
'UI:Schema:ReferencingClasses' => '参考类',
'UI:Schema:RelatedClasses' => '关联类',
'UI:Schema:LifeCycle' => '生命周期',
'UI:Schema:Triggers' => '触发器',
'UI:Schema:Relation_Code_Description' => '关联 <em>%1$s</em> (%2$s)',
'UI:Schema:RelationDown_Description' => 'Down: %1$s',
'UI:Schema:RelationUp_Description' => 'Up: %1$s',
'UI:Schema:RelationPropagates' => '%1$s: 繁殖到 %2$d 个层级, 查询: %3$s',
'UI:Schema:RelationDoesNotPropagate' => '%1$s: 没有繁殖 (%2$d 层级), 查询: %3$s',
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s 被类 %2$s 参照, 通过栏目 %3$s',
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s 被链接到 %2$s 通过 %3$s::<em>%4$s</em>',
'UI:Schema:Links:1-n' => '类指向 %1$s (1:n 链接):',
'UI:Schema:Links:n-n' => '类链接到 %1$s (n:n 链接):',
'UI:Schema:Links:All' => '全部相关类的图',
'UI:Schema:NoLifeCyle' => '该类没有生命周期的定义.',
'UI:Schema:LifeCycleTransitions' => '转换',
'UI:Schema:LifeCyleAttributeOptions' => '属性选项',
'UI:Schema:LifeCycleHiddenAttribute' => '隐藏',
'UI:Schema:LifeCycleReadOnlyAttribute' => '只读',
'UI:Schema:LifeCycleMandatoryAttribute' => '必须',
'UI:Schema:LifeCycleAttributeMustChange' => '必须变更',
'UI:Schema:LifeCycleAttributeMustPrompt' => '用户将被提示改变值',
'UI:Schema:LifeCycleEmptyList' => '空列表',
'UI:LinksWidget:Autocomplete+' => '输入前3个字符...',
'UI:Combo:SelectValue' => '--- 选择一个值 ---',
'UI:Label:SelectedObjects' => '被选对象: ',
'UI:Label:AvailableObjects' => '可用对象: ',
'UI:Link_Class_Attributes' => '%1$s 属性',
'UI:SelectAllToggle+' => '选择全部 / 清楚全部选择',
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => '添加 %1$s 个对象, 链接 %2$s: %3$s',
'UI:AddObjectsOf_Class_LinkedWith_Class' => '添加 %1$s 个对象与 %2$s 链接',
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => '管理 %1$s 个对象, 链接 %2$s: %3$s',
'UI:AddLinkedObjectsOf_Class' => '添加 %1$s...',
'UI:RemoveLinkedObjectsOf_Class' => '移除选择的对象',
'UI:Message:EmptyList:UseAdd' => '列表是空的, 使用 "添加..." 按扭以添加元素.',
'UI:Message:EmptyList:UseSearchForm' => '使用上面的搜索表单, 以搜索要添加的对象.',
'UI:Wizard:FinalStepTitle' => '最后步骤: 确认',
'UI:Title:DeletionOf_Object' => '删除 %1$s',
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => '批量删除 %1$d 个 %2$s 类的对象',
'UI:Delete:NotAllowedToDelete' => '您未被允许删除该对象',
'UI:Delete:NotAllowedToUpdate_Fields' => '您未被允许更新下述栏目: %1$s',
'UI:Error:NotEnoughRightsToDelete' => '该对象不能被删除, 因为当前用户没有足够权限',
'UI:Error:CannotDeleteBecauseOfDepencies' => '该对象不能被删除, 因为一些手工操作必须事先完成',
'UI:Archive_User_OnBehalfOf_User' => '%1$s on behalf of %2$s',
'UI:Delete:AutomaticallyDeleted' => '自动删除了',
'UI:Delete:AutomaticResetOf_Fields' => '自动重置栏目: %1$s',
'UI:Delete:CleaningUpRefencesTo_Object' => '清除所有对 %1$s 的参照...',
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => '清除所有对 %2$s 类的 %1$d 个对象的参照...',
'UI:Delete:Done+' => '做了什么...',
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s 删除了.',
'UI:Delete:ConfirmDeletionOf_Name' => '删除 %1$s',
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => '删除 %2$s 类的 %1$d 个对象',
'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => '应该自动删除, 但您未被允许这样做',
'UI:Delete:MustBeDeletedManuallyButNotAllowed' => '必须手工删除 - 但您未被允许删除该对象, 请联系您的应用程序系统管理员',
'UI:Delete:WillBeDeletedAutomatically' => '将被自动删除',
'UI:Delete:MustBeDeletedManually' => '必须手工删除',
'UI:Delete:CannotUpdateBecause_Issue' => '应该被自动更新, 但是: %1$s',
'UI:Delete:WillAutomaticallyUpdate_Fields' => '将被自动更新 (重置: %1$s)',
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d 个对象/链接参照了 %2$s',
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d 个对象/链接参照了一些将删除的对象',
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => '为确保数据库的完整性, 任何参照应该更进一步清除',
'UI:Delete:Consequence+' => '将做什么',
'UI:Delete:SorryDeletionNotAllowed' => '抱歉, 您未被允许删除该对象, 请看上述详细解释',
'UI:Delete:PleaseDoTheManualOperations' => '在要求删除该对象之前, 请先手工完成上述列出的操作',
'UI:Delect:Confirm_Object' => '请确认您要删除 %1$s.',
'UI:Delect:Confirm_Count_ObjectsOf_Class' => '请确认您要删除下列 %2$s 类的 %1$d 个对象.',
'UI:WelcomeToITop' => '欢迎来到 iTop',
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s 详细内容',
'UI:ErrorPageTitle' => 'iTop - 错误',
'UI:ObjectDoesNotExist' => '抱歉, 该对象不存在 (或您未被允许浏览该对象).',
'UI:SearchResultsPageTitle' => 'iTop - 搜索结果',
'UI:Search:NoSearch' => '没有可搜索的内容',
'UI:FullTextSearchTitle_Text' => '"%1$s" 的结果:',
'UI:Search:Count_ObjectsOf_Class_Found' => '发现 %2$s 类的 %1$d 个对象.',
'UI:Search:NoObjectFound' => '未发现对象.',
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s 修改',
'UI:ModificationTitle_Class_Object' => '修改 %1$s: <span class=\"hilite\">%2$s</span>',
'UI:ClonePageTitle_Object_Class' => 'iTop - 克隆 %1$s - %2$s 修改',
'UI:CloneTitle_Class_Object' => '克隆 %1$s: <span class=\"hilite\">%2$s</span>',
'UI:CreationPageTitle_Class' => 'iTop - 创建一个新的 %1$s ',
'UI:CreationTitle_Class' => '创建一个新的 %1$s',
'UI:SelectTheTypeOf_Class_ToCreate' => '选择要创建的 %1$s 的类别:',
'UI:Class_Object_NotUpdated' => '未发现变化, %1$s (%2$s) <strong>没有</strong> 被更新.',
'UI:Class_Object_Updated' => '%1$s (%2$s) 更新了.',
'UI:BulkDeletePageTitle' => 'iTop - 批量删除',
'UI:BulkDeleteTitle' => '选择您要删除的对象:',
'UI:PageTitle:ObjectCreated' => 'iTop 对象创建了.',
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s 创建了.',
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => '应用 %1$s 在对象: %2$s 上, 从 %3$s 状态到目标状态: %4$s.',
'UI:ObjectCouldNotBeWritten' => '对象不能写入: %1$s',
'UI:PageTitle:FatalError' => 'iTop - 致命错误',
'UI:SystemIntrusion' => '访问被禁止. 您正尝试未被许可的操作.',
'UI:FatalErrorMessage' => '致命错误, iTop 无法继续.',
'UI:Error_Details' => '错误: %1$s.',
'UI:PageTitle:ClassProjections' => 'iTop 用户管理 - 类投射',
'UI:PageTitle:ProfileProjections' => 'iTop 用户管理 - 简档投射',
'UI:UserManagement:Class' => '类',
'UI:UserManagement:Class+' => '对象的类',
'UI:UserManagement:ProjectedObject' => '对象',
'UI:UserManagement:ProjectedObject+' => '被投射的对象',
'UI:UserManagement:AnyObject' => '* 任何 *',
'UI:UserManagement:User' => '用户',
'UI:UserManagement:User+' => '与该投射相关的用户',
'UI:UserManagement:Profile' => '简档',
'UI:UserManagement:Profile+' => '投射被指定的简档',
'UI:UserManagement:Action:Read' => '读',
'UI:UserManagement:Action:Read+' => '读/显示 对象',
'UI:UserManagement:Action:Modify' => '修改',
'UI:UserManagement:Action:Modify+' => '创建和编辑(修改)对象',
'UI:UserManagement:Action:Delete' => '删除',
'UI:UserManagement:Action:Delete+' => '删除对象',
'UI:UserManagement:Action:BulkRead' => '大批量读 (导出)',
'UI:UserManagement:Action:BulkRead+' => '列出对象或批量导出',
'UI:UserManagement:Action:BulkModify' => '批量修改',
'UI:UserManagement:Action:BulkModify+' => '批量创建/编辑 (CSV 导入)',
'UI:UserManagement:Action:BulkDelete' => '批量删除',
'UI:UserManagement:Action:BulkDelete+' => '批量删除对象',
'UI:UserManagement:Action:Stimuli' => 'Stimuli',
'UI:UserManagement:Action:Stimuli+' => '许可的 (复合的) 动作',
'UI:UserManagement:Action' => '动作',
'UI:UserManagement:Action+' => '该用户进行的动作',
'UI:UserManagement:TitleActions' => '动作',
'UI:UserManagement:Permission' => '许可',
'UI:UserManagement:Permission+' => '用户的许可',
'UI:UserManagement:Attributes' => '属性',
'UI:UserManagement:ActionAllowed:Yes' => '是',
'UI:UserManagement:ActionAllowed:No' => '否',
'UI:UserManagement:AdminProfile+' => '系统管理员拥有数据库中所有对象的完全读/写访问权限.',
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
'UI:UserManagement:NoLifeCycleApplicable+' => '该类未定义生命周期',
'UI:UserManagement:GrantMatrix' => '授权矩阵',
'UI:UserManagement:LinkBetween_User_And_Profile' => '链接 %1$s 和 %2$s',
'UI:UserManagement:LinkBetween_User_And_Org' => '链接 %1$s 和 %2$s',
'Menu:AdminTools' => '管理工具',
'Menu:AdminTools+' => '管理工具',
'Menu:AdminTools?' => '具有系统管理员简档的用户才能获得的工具',
'UI:ChangeManagementMenu' => '变更管理',
'UI:ChangeManagementMenu+' => '变更管理',
'UI:ChangeManagementMenu:Title' => '变更概览',
'UI-ChangeManagementMenu-ChangesByType' => '按类别划分的变更',
'UI-ChangeManagementMenu-ChangesByStatus' => '按状态划分的变更',
'UI-ChangeManagementMenu-ChangesByWorkgroup' => '按工作组划分的变更',
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => '尚未指派的变更',
'UI:ConfigurationItemsMenu'=> '配置项目',
'UI:ConfigurationItemsMenu+'=> '所有设备',
'UI:ConfigurationItemsMenu:Title' => '配置项概览',
'UI-ConfigurationItemsMenu-ServersByCriticity' => '按关键性划分服务器',
'UI-ConfigurationItemsMenu-PCsByCriticity' => '按关键性划分PC',
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => '按关键性划分网络设备',
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => '按关键性划分应用程序',
'UI:ConfigurationManagementMenu' => '配置管理',
'UI:ConfigurationManagementMenu+' => '配置管理',
'UI:ConfigurationManagementMenu:Title' => '基础架构概览',
'UI-ConfigurationManagementMenu-InfraByType' => '按类别划分基础架构对象',
'UI-ConfigurationManagementMenu-InfraByStatus' => '按状态划分基础架构对象',
'UI:ConfigMgmtMenuOverview:Title' => '配置管理仪表板',
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => '按状态配置项目',
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => '按类别配置项目',
'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:ChangeMgmtMenuOverview:Title' => '变更管理仪表板',
'UI-ChangeManagementOverview-ChangeByType' => '按类别划分变更',
'UI-ChangeManagementOverview-ChangeUnassigned' => '尚未指派办理人的变更',
'UI-ChangeManagementOverview-ChangeWithOutage' => '变更引起的停机',
'UI:ServiceMgmtMenuOverview:Title' => '服务管理仪表板',
'UI-ServiceManagementOverview-CustomerContractToRenew' => '客户联系人需在30日内更新',
'UI-ServiceManagementOverview-ProviderContractToRenew' => '供应商联系人需在30日内更新',
'UI:ContactsMenu' => '联系人',
'UI:ContactsMenu+' => '联系人',
'UI:ContactsMenu:Title' => '联系人概览',
'UI-ContactsMenu-ContactsByLocation' => '按地域划分联系人',
'UI-ContactsMenu-ContactsByType' => '按类别划分联系人',
'UI-ContactsMenu-ContactsByStatus' => '按状态划分联系人',
'Menu:CSVImportMenu' => 'CSV 导入',
'Menu:CSVImportMenu+' => '大批量创建或修改',
'Menu:DataModelMenu' => '数据模型',
'Menu:DataModelMenu+' => '数据模型概览',
'Menu:ExportMenu' => '导出',
'Menu:ExportMenu+' => '以HTML, CSV or XML格式导出任何查询的结果',
'Menu:NotificationsMenu' => '通知',
'Menu:NotificationsMenu+' => '通知的配置',
'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个阶段:
<ol>
<li>"OnCreate" 触发器, 当某个特定类的对象创建时将触发</li>
<li>"OnStateEnter" 触发器, 在某个给定类的对象进入某个特定状态前将触发(从另外一个状态而来)</li>
<li>"OnStateLeave" 触发器, 在某个给定类的对象离开某个特定状态时将触发</li>
</ol>
</p>
<p>
<i><b>动作</b></i> 定义了触发器触发时要执行的动作. 目前, 仅有一种动作存在于发送邮件过程中.
这些动作还定义了用于发送邮件及收件人,重要性等的模板.
</p>
<p>一个专门页面: <a href="../setup/email.test.php" target="_blank">email.test.php</a> 可用于测试和调试您的 PHP mail 配置.</p>
<p>若要执行, 动作必须和触发器相关联.
当与一个触发器关联时, 每个动作都被赋予一个顺序号, 规定了按什么样的顺序执行这些动作.</p>',
'UI:NotificationsMenu:Triggers' => '触发器',
'UI:NotificationsMenu:AvailableTriggers' => '可用的触发器',
'UI:NotificationsMenu:OnCreate' => '当一个对象被创建',
'UI:NotificationsMenu:OnStateEnter' => '当一个对象进入给定状态',
'UI:NotificationsMenu:OnStateLeave' => '当一个对象离开给定状态',
'UI:NotificationsMenu:Actions' => '动作',
'UI:NotificationsMenu:AvailableActions' => '有效的动作',
'Menu:AuditCategories' => '审计类目',
'Menu:AuditCategories+' => '审计类目',
'Menu:Notifications:Title' => '审计类目',
'Menu:RunQueriesMenu' => '运行查询',
'Menu:RunQueriesMenu+' => '运行任何查询',
'Menu:DataAdministration' => '数据管理',
'Menu:DataAdministration+' => '数据管理',
'Menu:UniversalSearchMenu' => '通用搜索',
'Menu:UniversalSearchMenu+' => '搜索所有...',
'Menu:ApplicationLogMenu' => 'Log de l\'application',
'Menu:ApplicationLogMenu+' => 'Log de l\'application',
'Menu:ApplicationLogMenu:Title' => 'Log de l\'application',
'Menu:UserManagementMenu' => '用户管理',
'Menu:UserManagementMenu+' => '用户管理',
'Menu:ProfilesMenu' => '简档',
'Menu:ProfilesMenu+' => '简档',
'Menu:ProfilesMenu:Title' => '简档',
'Menu:UserAccountsMenu' => '用户帐户',
'Menu:UserAccountsMenu+' => '用户帐户',
'Menu:UserAccountsMenu:Title' => '用户帐户',
'UI:iTopVersion:Short' => 'iTop version %1$s',
'UI:iTopVersion:Long' => 'iTop version %1$s-%2$s built on %3$s',
'UI:PropertiesTab' => '属性',
'UI:OpenDocumentInNewWindow_' => '在新窗口打开文档: %1$s',
'UI:DownloadDocument_' => '下载该文档: %1$s',
'UI:Document:NoPreview' => '该类文档无法预览',
'UI:DeadlineMissedBy_duration' => 'Missed by %1$s',
'UI:Deadline_LessThan1Min' => '< 1 min',
'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',
'UI:Help' => '帮助',
'UI:PasswordConfirm' => '(确认)',
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => '在添加更多 %1$s 对象前, 保存该对象.',
'UI:DisplayThisMessageAtStartup' => '在启动时显示该消息',
'UI:RelationshipGraph' => '图览',
'UI:RelationshipList' => '列表',
'Portal:Title' => 'iTop 用户门户',
'Portal:Refresh' => '刷新',
'Portal:Back' => '返回',
'Portal:CreateNewRequest' => '创建一个新的请求',
'Portal:ChangeMyPassword' => '改变我的密码',
'Portal:Disconnect' => '断开',
'Portal:OpenRequests' => '我的待解决的请求',
'Portal:ResolvedRequests' => '我的已解决的请求',
'Portal:SelectService' => '从类目中选择一个服务:',
'Portal:PleaseSelectOneService' => '请选择一个服务',
'Portal:SelectSubcategoryFrom_Service' => '从服务中选择一个子类 %1$s:',
'Portal:PleaseSelectAServiceSubCategory' => '请选择一个子类',
'Portal:DescriptionOfTheRequest' => '输入您的请求描述:',
'Portal:TitleRequestDetailsFor_Request' => '请求明细内容 %1$s:',
'Portal:NoOpenRequest' => '该类目中没有请求.',
'Portal:Button:CloseTicket' => '关闭这个单据',
'Portal:EnterYourCommentsOnTicket' => '输入您对于该单据解决情况的评述:',
'Portal:ErrorNoContactForThisUser' => '错误: 当前用户没有和一个联系人或人员关联. 请联系您的系统管理员.',
'Enum:Undefined' => '未定义',
));
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 842 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +0,0 @@
/*
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
(function(){CKEDITOR.config.jqueryOverrideVal=typeof CKEDITOR.config.jqueryOverrideVal=='undefined'?true:CKEDITOR.config.jqueryOverrideVal;var a=window.jQuery;if(typeof a=='undefined')return;a.extend(a.fn,{ckeditorGet:function(){var b=this.eq(0).data('ckeditorInstance');if(!b)throw 'CKEditor not yet initialized, use ckeditor() with callback.';return b;},ckeditor:function(b,c){if(!a.isFunction(b)){var d=c;c=b;b=d;}c=c||{};this.filter('textarea, div, p').each(function(){var e=a(this),f=e.data('ckeditorInstance'),g=e.data('_ckeditorInstanceLock'),h=this;if(f&&!g){if(b)b.apply(f,[this]);}else if(!g){if(c.autoUpdateElement||typeof c.autoUpdateElement=='undefined'&&CKEDITOR.config.autoUpdateElement)c.autoUpdateElementJquery=true;c.autoUpdateElement=false;e.data('_ckeditorInstanceLock',true);f=CKEDITOR.replace(h,c);e.data('ckeditorInstance',f);f.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}i.removeListener('instanceReady',this.callee);j.on('dataReady',function(){e.trigger('setData.ckeditor',[j]);});j.on('getData',function(l){e.trigger('getData.ckeditor',[j,l.data]);},999);j.on('destroy',function(){e.trigger('destroy.ckeditor',[j]);});if(j.config.autoUpdateElementJquery&&e.is('textarea')&&e.parents('form').length){var k=function(){e.ckeditor(function(){j.updateElement();});};e.parents('form').submit(k);e.parents('form').bind('form-pre-serialize',k);e.bind('destroy.ckeditor',function(){e.parents('form').unbind('submit',k);e.parents('form').unbind('form-pre-serialize',k);});}j.on('destroy',function(){e.data('ckeditorInstance',null);});e.data('_ckeditorInstanceLock',null);e.trigger('instanceReady.ckeditor',[j]);if(b)b.apply(j,[h]);},0);},null,null,9999);}else CKEDITOR.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}if(j.element.$==h)if(b)b.apply(j,[h]);},0);},null,null,9999);});return this;}});if(CKEDITOR.config.jqueryOverrideVal)a.fn.val=CKEDITOR.tools.override(a.fn.val,function(b){return function(c,d){var e=typeof c!='undefined',f;this.each(function(){var g=a(this),h=g.data('ckeditorInstance');if(!d&&g.is('textarea')&&h){if(e)h.setData(c);else{f=h.getData();return null;}}else if(e)b.call(g,c);else{f=b.call(g);return null;}return true;});return e?this:f;};});})();

View File

@@ -1,137 +0,0 @@
/*
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
(function(){if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'AA4E4NT',version:'3.4.2',revision:'6041',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;if(!d)throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/'&&!/[&?]t=/.test(d))d+=(d.indexOf('?')>=0?'&':'?')+'t='+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();var a=CKEDITOR;if(!a.event){a.event=function(){};a.event.implementOn=function(b){var c=a.event.prototype;for(var d in c){if(b[d]==undefined)b[d]=c[d];}};a.event.prototype=(function(){var b=function(d){var e=d.getPrivate&&d.getPrivate()||d._||(d._={});return e.events||(e.events={});},c=function(d){this.name=d;this.listeners=[];};c.prototype={getListenerIndex:function(d){for(var e=0,f=this.listeners;e<f.length;e++){if(f[e].fn==d)return e;}return-1;}};return{on:function(d,e,f,g,h){var i=b(this),j=i[d]||(i[d]=new c(d));if(j.getListenerIndex(e)<0){var k=j.listeners;if(!f)f=this;if(isNaN(h))h=10;var l=this,m=function(o,p,q,r){var s={name:d,sender:this,editor:o,data:p,listenerData:g,stop:q,cancel:r,removeListener:function(){l.removeListener(d,e);}};e.call(f,s);return s.data;};m.fn=e;m.priority=h;for(var n=k.length-1;n>=0;n--){if(k[n].priority<=h){k.splice(n+1,0,m);return;}}k.unshift(m);}},fire:(function(){var d=false,e=function(){d=true;},f=false,g=function(){f=true;};return function(h,i,j){var k=b(this)[h],l=d,m=f;d=f=false;if(k){var n=k.listeners;if(n.length){n=n.slice(0);for(var o=0;o<n.length;o++){var p=n[o].call(this,j,i,e,g);if(typeof p!='undefined')i=p;if(d||f)break;}}}var q=f||(typeof i=='undefined'?false:i);d=l;f=m;return q;};})(),fireOnce:function(d,e,f){var g=this.fire(d,e,f);delete b(this)[d];return g;},removeListener:function(d,e){var f=b(this)[d];if(f){var g=f.getListenerIndex(e);if(g>=0)f.listeners.splice(g,1);}},hasListeners:function(d){var e=b(this)[d];
return e&&e.listeners.length>0;}};})();}if(!a.editor){a.ELEMENT_MODE_NONE=0;a.ELEMENT_MODE_REPLACE=1;a.ELEMENT_MODE_APPENDTO=2;a.editor=function(b,c,d,e){var f=this;f._={instanceConfig:b,element:c,data:e};f.elementMode=d||0;a.event.call(f);f._init();};a.editor.replace=function(b,c){var d=b;if(typeof d!='object'){d=document.getElementById(b);if(!d){var e=0,f=document.getElementsByName(b);while((d=f[e++])&&d.tagName.toLowerCase()!='textarea'){}}if(!d)throw '[CKEDITOR.editor.replace] The element with id or name "'+b+'" was not found.';}d.style.visibility='hidden';return new a.editor(c,d,1);};a.editor.appendTo=function(b,c,d){var e=b;if(typeof e!='object'){e=document.getElementById(b);if(!e)throw '[CKEDITOR.editor.appendTo] The element with id "'+b+'" was not found.';}return new a.editor(c,e,2,d);};a.editor.prototype={_init:function(){var b=a.editor._pending||(a.editor._pending=[]);b.push(this);},fire:function(b,c){return a.event.prototype.fire.call(this,b,c,this);},fireOnce:function(b,c){return a.event.prototype.fireOnce.call(this,b,c,this);}};a.event.implementOn(a.editor.prototype,true);}if(!a.env)a.env=(function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,d={ie:/*@cc_on!@*/false,opera:!!c&&c.version,webkit:b.indexOf(' applewebkit/')>-1,air:b.indexOf(' adobeair/')>-1,mac:b.indexOf('macintosh')>-1,quirks:document.compatMode=='BackCompat',mobile:b.indexOf('mobile')>-1,isCustomDomain:function(){if(!this.ie)return false;var g=document.domain,h=window.location.hostname;return g!=h&&g!='['+h+']';}};d.gecko=navigator.product=='Gecko'&&!d.webkit&&!d.opera;var e=0;if(d.ie){e=parseFloat(b.match(/msie (\d+)/)[1]);d.ie8=!!document.documentMode;d.ie8Compat=document.documentMode==8;d.ie7Compat=e==7&&!document.documentMode||document.documentMode==7;d.ie6Compat=e<7||d.quirks;}if(d.gecko){var f=b.match(/rv:([\d\.]+)/);if(f){f=f[1].split('.');e=f[0]*10000+(f[1]||0)*100+ +(f[2]||0);}}if(d.opera)e=parseFloat(c.version());if(d.air)e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]);if(d.webkit)e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]);d.version=e;d.isCompatible=!d.mobile&&(d.ie&&e>=6||d.gecko&&e>=10801||d.opera&&e>=9.5||d.air&&e>=1||d.webkit&&e>=522||false);d.cssClass='cke_browser_'+(d.ie?'ie':d.gecko?'gecko':d.opera?'opera':d.air?'air':d.webkit?'webkit':'unknown');if(d.quirks)d.cssClass+=' cke_browser_quirks';if(d.ie){d.cssClass+=' cke_browser_ie'+(d.version<7?'6':d.version>=8?document.documentMode:'7');if(d.quirks)d.cssClass+=' cke_browser_iequirks';
}if(d.gecko&&e<10900)d.cssClass+=' cke_browser_gecko18';return d;})();var b=a.env;var c=b.ie;if(a.status=='unloaded')(function(){a.event.implementOn(a);a.loadFullCore=function(){if(a.status!='basic_ready'){a.loadFullCore._load=1;return;}delete a.loadFullCore;var e=document.createElement('script');e.type='text/javascript';e.src=a.basePath+'ckeditor.js';document.getElementsByTagName('head')[0].appendChild(e);};a.loadFullCoreTimeout=0;a.replaceClass='ckeditor';a.replaceByClassEnabled=1;var d=function(e,f,g,h){if(b.isCompatible){if(a.loadFullCore)a.loadFullCore();var i=g(e,f,h);a.add(i);return i;}return null;};a.replace=function(e,f){return d(e,f,a.editor.replace);};a.appendTo=function(e,f,g){return d(e,f,a.editor.appendTo,g);};a.add=function(e){var f=this._.pending||(this._.pending=[]);f.push(e);};a.replaceAll=function(){var e=document.getElementsByTagName('textarea');for(var f=0;f<e.length;f++){var g=null,h=e[f],i=h.name;if(!h.name&&!h.id)continue;if(typeof arguments[0]=='string'){var j=new RegExp('(?:^|\\s)'+arguments[0]+'(?:$|\\s)');if(!j.test(h.className))continue;}else if(typeof arguments[0]=='function'){g={};if(arguments[0](h,g)===false)continue;}this.replace(h,g);}};(function(){var e=function(){var f=a.loadFullCore,g=a.loadFullCoreTimeout;if(a.replaceByClassEnabled)a.replaceAll(a.replaceClass);a.status='basic_ready';if(f&&f._load)f();else if(g)setTimeout(function(){if(a.loadFullCore)a.loadFullCore();},g*1000);};if(window.addEventListener)window.addEventListener('load',e,false);else if(window.attachEvent)window.attachEvent('onload',e);})();a.status='basic_loaded';})();a.dom={};var d=a.dom;(function(){var e=[];a.on('reset',function(){e=[];});a.tools={arrayCompare:function(f,g){if(!f&&!g)return true;if(!f||!g||f.length!=g.length)return false;for(var h=0;h<f.length;h++){if(f[h]!=g[h])return false;}return true;},clone:function(f){var g;if(f&&f instanceof Array){g=[];for(var h=0;h<f.length;h++)g[h]=this.clone(f[h]);return g;}if(f===null||typeof f!='object'||f instanceof String||f instanceof Number||f instanceof Boolean||f instanceof Date||f instanceof RegExp)return f;g=new f.constructor();for(var i in f){var j=f[i];g[i]=this.clone(j);}return g;},capitalize:function(f){return f.charAt(0).toUpperCase()+f.substring(1).toLowerCase();},extend:function(f){var g=arguments.length,h,i;if(typeof (h=arguments[g-1])=='boolean')g--;else if(typeof (h=arguments[g-2])=='boolean'){i=arguments[g-1];g-=2;}for(var j=1;j<g;j++){var k=arguments[j];for(var l in k){if(h===true||f[l]==undefined)if(!i||l in i)f[l]=k[l];
}}return f;},prototypedCopy:function(f){var g=function(){};g.prototype=f;return new g();},isArray:function(f){return!!f&&f instanceof Array;},isEmpty:function(f){for(var g in f){if(f.hasOwnProperty(g))return false;}return true;},cssStyleToDomStyle:(function(){var f=document.createElement('div').style,g=typeof f.cssFloat!='undefined'?'cssFloat':typeof f.styleFloat!='undefined'?'styleFloat':'float';return function(h){if(h=='float')return g;else return h.replace(/-./g,function(i){return i.substr(1).toUpperCase();});};})(),buildStyleHtml:function(f){f=[].concat(f);var g,h=[];for(var i=0;i<f.length;i++){g=f[i];if(/@import|[{}]/.test(g))h.push('<style>'+g+'</style>');else h.push('<link type="text/css" rel=stylesheet href="'+g+'">');}return h.join('');},htmlEncode:function(f){var g=function(k){var l=new d.element('span');l.setText(k);return l.getHtml();},h=g('\n').toLowerCase()=='<br>'?function(k){return g(k).replace(/<br>/gi,'\n');}:g,i=g('>')=='>'?function(k){return h(k).replace(/>/g,'&gt;');}:h,j=g(' ')=='&nbsp; '?function(k){return i(k).replace(/&nbsp;/g,' ');}:i;this.htmlEncode=j;return this.htmlEncode(f);},htmlEncodeAttr:function(f){return f.replace(/"/g,'&quot;').replace(/</g,'&lt;').replace(/>/g,'&gt;');},getNextNumber:(function(){var f=0;return function(){return++f;};})(),getNextId:function(){return 'cke_'+this.getNextNumber();},override:function(f,g){return g(f);},setTimeout:function(f,g,h,i,j){if(!j)j=window;if(!h)h=j;return j.setTimeout(function(){if(i)f.apply(h,[].concat(i));else f.apply(h);},g||0);},trim:(function(){var f=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(f,'');};})(),ltrim:(function(){var f=/^[ \t\n\r]+/g;return function(g){return g.replace(f,'');};})(),rtrim:(function(){var f=/[ \t\n\r]+$/g;return function(g){return g.replace(f,'');};})(),indexOf:Array.prototype.indexOf?function(f,g){return f.indexOf(g);}:function(f,g){for(var h=0,i=f.length;h<i;h++){if(f[h]===g)return h;}return-1;},bind:function(f,g){return function(){return f.apply(g,arguments);};},createClass:function(f){var g=f.$,h=f.base,i=f.privates||f._,j=f.proto,k=f.statics;if(i){var l=g;g=function(){var p=this;var m=p._||(p._={});for(var n in i){var o=i[n];m[n]=typeof o=='function'?a.tools.bind(o,p):o;}l.apply(p,arguments);};}if(h){g.prototype=this.prototypedCopy(h.prototype);g.prototype['constructor']=g;g.prototype.base=function(){this.base=h.prototype.base;h.apply(this,arguments);this.base=arguments.callee;};}if(j)this.extend(g.prototype,j,true);if(k)this.extend(g,k,true);
return g;},addFunction:function(f,g){return e.push(function(){f.apply(g||this,arguments);})-1;},removeFunction:function(f){e[f]=null;},callFunction:function(f){var g=e[f];return g&&g.apply(window,Array.prototype.slice.call(arguments,1));},cssLength:(function(){var f=/^\d+(?:\.\d+)?$/;return function(g){return g+(f.test(g)?'px':'');};})(),repeat:function(f,g){return new Array(g+1).join(f);},tryThese:function(){var f;for(var g=0,h=arguments.length;g<h;g++){var i=arguments[g];try{f=i();break;}catch(j){}}return f;},genKey:function(){return Array.prototype.slice.call(arguments).join('-');}};})();var e=a.tools;a.dtd=(function(){var f=e.extend,g={isindex:1,fieldset:1},h={input:1,button:1,select:1,textarea:1,label:1},i=f({a:1},h),j=f({iframe:1},i),k={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1},l={ins:1,del:1,script:1,style:1},m=f({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},l),n=f({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},m),o=f({p:1},n),p=f({iframe:1},n,h),q={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1},r=f({a:1},p),s={tr:1},t={'#':1},u=f({param:1},q),v=f({form:1},g,j,k,o),w={li:1},x={style:1,script:1},y={base:1,link:1,meta:1,title:1},z=f(y,x),A={head:1,body:1},B={html:1},C={address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1};return{$nonBodyContent:f(B,A,y),$block:C,$blockLimit:{body:1,div:1,td:1,th:1,caption:1,form:1},$inline:r,$body:f({script:1,style:1},C),$cdata:{script:1,style:1},$empty:{area:1,base:1,br:1,col:1,hr:1,img:1,input:1,link:1,meta:1,param:1},$listItem:{dd:1,dt:1,li:1},$list:{ul:1,ol:1,dl:1},$nonEditable:{applet:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,script:1,textarea:1,param:1},$removeEmpty:{abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},html:A,head:z,style:t,script:t,body:v,base:{},link:{},meta:{},title:t,col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:v,td:v,br:{},th:v,center:v,kbd:r,button:f(o,k),basefont:{},h5:r,h4:r,samp:r,h6:r,ol:w,h1:r,h3:r,option:t,h2:r,form:f(g,j,k,o),select:{optgroup:1,option:1},font:r,ins:r,menu:w,abbr:r,label:r,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:r,script:t,tfoot:s,cite:r,li:v,input:{},iframe:v,strong:r,textarea:t,noframes:v,big:r,small:r,span:r,hr:{},dt:r,sub:r,optgroup:{option:1},param:{},bdo:r,'var':r,div:v,object:u,sup:r,dd:v,strike:r,area:{},dir:w,map:f({area:1,form:1,p:1},g,l,k),applet:u,dl:{dt:1,dd:1},del:r,isindex:{},fieldset:f({legend:1},q),thead:s,ul:w,acronym:r,b:r,a:p,blockquote:v,caption:r,i:r,u:r,tbody:s,s:r,address:f(j,o),tt:r,legend:r,q:r,pre:f(m,i),p:r,em:r,dfn:r};
})();var f=a.dtd;d.event=function(g){this.$=g;};d.event.prototype={getKey:function(){return this.$.keyCode||this.$.which;},getKeystroke:function(){var h=this;var g=h.getKey();if(h.$.ctrlKey||h.$.metaKey)g+=1000;if(h.$.shiftKey)g+=2000;if(h.$.altKey)g+=4000;return g;},preventDefault:function(g){var h=this.$;if(h.preventDefault)h.preventDefault();else h.returnValue=false;if(g)this.stopPropagation();},stopPropagation:function(){var g=this.$;if(g.stopPropagation)g.stopPropagation();else g.cancelBubble=true;},getTarget:function(){var g=this.$.target||this.$.srcElement;return g?new d.node(g):null;}};a.CTRL=1000;a.SHIFT=2000;a.ALT=4000;d.domObject=function(g){if(g)this.$=g;};d.domObject.prototype=(function(){var g=function(h,i){return function(j){if(typeof a!='undefined')h.fire(i,new d.event(j));};};return{getPrivate:function(){var h;if(!(h=this.getCustomData('_')))this.setCustomData('_',h={});return h;},on:function(h){var k=this;var i=k.getCustomData('_cke_nativeListeners');if(!i){i={};k.setCustomData('_cke_nativeListeners',i);}if(!i[h]){var j=i[h]=g(k,h);if(k.$.attachEvent)k.$.attachEvent('on'+h,j);else if(k.$.addEventListener)k.$.addEventListener(h,j,!!a.event.useCapture);}return a.event.prototype.on.apply(k,arguments);},removeListener:function(h){var k=this;a.event.prototype.removeListener.apply(k,arguments);if(!k.hasListeners(h)){var i=k.getCustomData('_cke_nativeListeners'),j=i&&i[h];if(j){if(k.$.detachEvent)k.$.detachEvent('on'+h,j);else if(k.$.removeEventListener)k.$.removeEventListener(h,j,false);delete i[h];}}},removeAllListeners:function(){var k=this;var h=k.getCustomData('_cke_nativeListeners');for(var i in h){var j=h[i];if(k.$.detachEvent)k.$.detachEvent('on'+i,j);else if(k.$.removeEventListener)k.$.removeEventListener(i,j,false);delete h[i];}}};})();(function(g){var h={};a.on('reset',function(){h={};});g.equals=function(i){return i&&i.$===this.$;};g.setCustomData=function(i,j){var k=this.getUniqueId(),l=h[k]||(h[k]={});l[i]=j;return this;};g.getCustomData=function(i){var j=this.$._cke_expando,k=j&&h[j];return k&&k[i];};g.removeCustomData=function(i){var j=this.$._cke_expando,k=j&&h[j],l=k&&k[i];if(typeof l!='undefined')delete k[i];return l||null;};g.clearCustomData=function(){this.removeAllListeners();var i=this.$._cke_expando;i&&delete h[i];};g.getUniqueId=function(){return this.$._cke_expando||(this.$._cke_expando=e.getNextNumber());};a.event.implementOn(g);})(d.domObject.prototype);d.window=function(g){d.domObject.call(this,g);};d.window.prototype=new d.domObject();
e.extend(d.window.prototype,{focus:function(){if(b.webkit&&this.$.parent)this.$.parent.focus();this.$.focus();},getViewPaneSize:function(){var g=this.$.document,h=g.compatMode=='CSS1Compat';return{width:(h?g.documentElement.clientWidth:g.body.clientWidth)||0,height:(h?g.documentElement.clientHeight:g.body.clientHeight)||0};},getScrollPosition:function(){var g=this.$;if('pageXOffset' in g)return{x:g.pageXOffset||0,y:g.pageYOffset||0};else{var h=g.document;return{x:h.documentElement.scrollLeft||h.body.scrollLeft||0,y:h.documentElement.scrollTop||h.body.scrollTop||0};}}});d.document=function(g){d.domObject.call(this,g);};var g=d.document;g.prototype=new d.domObject();e.extend(g.prototype,{appendStyleSheet:function(h){if(this.$.createStyleSheet)this.$.createStyleSheet(h);else{var i=new d.element('link');i.setAttributes({rel:'stylesheet',type:'text/css',href:h});this.getHead().append(i);}},appendStyleText:function(h){var k=this;if(k.$.createStyleSheet){var i=k.$.createStyleSheet('');i.cssText=h;}else{var j=new d.element('style',k);j.append(new d.text(h,k));k.getHead().append(j);}},createElement:function(h,i){var j=new d.element(h,this);if(i){if(i.attributes)j.setAttributes(i.attributes);if(i.styles)j.setStyles(i.styles);}return j;},createText:function(h){return new d.text(h,this);},focus:function(){this.getWindow().focus();},getById:function(h){var i=this.$.getElementById(h);return i?new d.element(i):null;},getByAddress:function(h,i){var j=this.$.documentElement;for(var k=0;j&&k<h.length;k++){var l=h[k];if(!i){j=j.childNodes[l];continue;}var m=-1;for(var n=0;n<j.childNodes.length;n++){var o=j.childNodes[n];if(i===true&&o.nodeType==3&&o.previousSibling&&o.previousSibling.nodeType==3)continue;m++;if(m==l){j=o;break;}}}return j?new d.node(j):null;},getElementsByTag:function(h,i){if(!c&&i)h=i+':'+h;return new d.nodeList(this.$.getElementsByTagName(h));},getHead:function(){var h=this.$.getElementsByTagName('head')[0];h=new d.element(h);return(this.getHead=function(){return h;})();},getBody:function(){var h=new d.element(this.$.body);return(this.getBody=function(){return h;})();},getDocumentElement:function(){var h=new d.element(this.$.documentElement);return(this.getDocumentElement=function(){return h;})();},getWindow:function(){var h=new d.window(this.$.parentWindow||this.$.defaultView);return(this.getWindow=function(){return h;})();}});d.node=function(h){if(h){switch(h.nodeType){case 9:return new g(h);case 1:return new d.element(h);case 3:return new d.text(h);}d.domObject.call(this,h);
}return this;};d.node.prototype=new d.domObject();a.NODE_ELEMENT=1;a.NODE_DOCUMENT=9;a.NODE_TEXT=3;a.NODE_COMMENT=8;a.NODE_DOCUMENT_FRAGMENT=11;a.POSITION_IDENTICAL=0;a.POSITION_DISCONNECTED=1;a.POSITION_FOLLOWING=2;a.POSITION_PRECEDING=4;a.POSITION_IS_CONTAINED=8;a.POSITION_CONTAINS=16;e.extend(d.node.prototype,{appendTo:function(h,i){h.append(this,i);return h;},clone:function(h,i){var j=this.$.cloneNode(h);if(!i){var k=function(l){if(l.nodeType!=1)return;l.removeAttribute('id',false);l.removeAttribute('_cke_expando',false);var m=l.childNodes;for(var n=0;n<m.length;n++)k(m[n]);};k(j);}return new d.node(j);},hasPrevious:function(){return!!this.$.previousSibling;},hasNext:function(){return!!this.$.nextSibling;},insertAfter:function(h){h.$.parentNode.insertBefore(this.$,h.$.nextSibling);return h;},insertBefore:function(h){h.$.parentNode.insertBefore(this.$,h.$);return h;},insertBeforeMe:function(h){this.$.parentNode.insertBefore(h.$,this.$);return h;},getAddress:function(h){var i=[],j=this.getDocument().$.documentElement,k=this.$;while(k&&k!=j){var l=k.parentNode,m=-1;if(l){for(var n=0;n<l.childNodes.length;n++){var o=l.childNodes[n];if(h&&o.nodeType==3&&o.previousSibling&&o.previousSibling.nodeType==3)continue;m++;if(o==k)break;}i.unshift(m);}k=l;}return i;},getDocument:function(){var h=new g(this.$.ownerDocument||this.$.parentNode.ownerDocument);return(this.getDocument=function(){return h;})();},getIndex:function(){var h=this.$,i=h.parentNode&&h.parentNode.firstChild,j=-1;while(i){j++;if(i==h)return j;i=i.nextSibling;}return-1;},getNextSourceNode:function(h,i,j){if(j&&!j.call){var k=j;j=function(n){return!n.equals(k);};}var l=!h&&this.getFirst&&this.getFirst(),m;if(!l){if(this.type==1&&j&&j(this,true)===false)return null;l=this.getNext();}while(!l&&(m=(m||this).getParent())){if(j&&j(m,true)===false)return null;l=m.getNext();}if(!l)return null;if(j&&j(l)===false)return null;if(i&&i!=l.type)return l.getNextSourceNode(false,i,j);return l;},getPreviousSourceNode:function(h,i,j){if(j&&!j.call){var k=j;j=function(n){return!n.equals(k);};}var l=!h&&this.getLast&&this.getLast(),m;if(!l){if(this.type==1&&j&&j(this,true)===false)return null;l=this.getPrevious();}while(!l&&(m=(m||this).getParent())){if(j&&j(m,true)===false)return null;l=m.getPrevious();}if(!l)return null;if(j&&j(l)===false)return null;if(i&&l.type!=i)return l.getPreviousSourceNode(false,i,j);return l;},getPrevious:function(h){var i=this.$,j;do{i=i.previousSibling;j=i&&new d.node(i);}while(j&&h&&!h(j))return j;
},getNext:function(h){var i=this.$,j;do{i=i.nextSibling;j=i&&new d.node(i);}while(j&&h&&!h(j))return j;},getParent:function(){var h=this.$.parentNode;return h&&h.nodeType==1?new d.node(h):null;},getParents:function(h){var i=this,j=[];do j[h?'push':'unshift'](i);while(i=i.getParent())return j;},getCommonAncestor:function(h){var j=this;if(h.equals(j))return j;if(h.contains&&h.contains(j))return h;var i=j.contains?j:j.getParent();do{if(i.contains(h))return i;}while(i=i.getParent())return null;},getPosition:function(h){var i=this.$,j=h.$;if(i.compareDocumentPosition)return i.compareDocumentPosition(j);if(i==j)return 0;if(this.type==1&&h.type==1){if(i.contains){if(i.contains(j))return 16+4;if(j.contains(i))return 8+2;}if('sourceIndex' in i)return i.sourceIndex<0||j.sourceIndex<0?1:i.sourceIndex<j.sourceIndex?4:2;}var k=this.getAddress(),l=h.getAddress(),m=Math.min(k.length,l.length);for(var n=0;n<=m-1;n++){if(k[n]!=l[n]){if(n<m)return k[n]<l[n]?4:2;break;}}return k.length<l.length?16+4:8+2;},getAscendant:function(h,i){var j=this.$;if(!i)j=j.parentNode;while(j){if(j.nodeName&&j.nodeName.toLowerCase()==h)return new d.node(j);j=j.parentNode;}return null;},hasAscendant:function(h,i){var j=this.$;if(!i)j=j.parentNode;while(j){if(j.nodeName&&j.nodeName.toLowerCase()==h)return true;j=j.parentNode;}return false;},move:function(h,i){h.append(this.remove(),i);},remove:function(h){var i=this.$,j=i.parentNode;if(j){if(h)for(var k;k=i.firstChild;)j.insertBefore(i.removeChild(k),i);j.removeChild(i);}return this;},replace:function(h){this.insertBefore(h);h.remove();},trim:function(){this.ltrim();this.rtrim();},ltrim:function(){var k=this;var h;while(k.getFirst&&(h=k.getFirst())){if(h.type==3){var i=e.ltrim(h.getText()),j=h.getLength();if(!i){h.remove();continue;}else if(i.length<j){h.split(j-i.length);k.$.removeChild(k.$.firstChild);}}break;}},rtrim:function(){var k=this;var h;while(k.getLast&&(h=k.getLast())){if(h.type==3){var i=e.rtrim(h.getText()),j=h.getLength();if(!i){h.remove();continue;}else if(i.length<j){h.split(i.length);k.$.lastChild.parentNode.removeChild(k.$.lastChild);}}break;}if(!c&&!b.opera){h=k.$.lastChild;if(h&&h.type==1&&h.nodeName.toLowerCase()=='br')h.parentNode.removeChild(h);}},isReadOnly:function(){var h=this;while(h){if(h.type==1){if(h.is('body')||h.getCustomData('_cke_notReadOnly'))break;if(h.getAttribute('contentEditable')=='false')return h;else if(h.getAttribute('contentEditable')=='true')break;}h=h.getParent();}return false;}});d.nodeList=function(h){this.$=h;
};d.nodeList.prototype={count:function(){return this.$.length;},getItem:function(h){var i=this.$[h];return i?new d.node(i):null;}};d.element=function(h,i){if(typeof h=='string')h=(i?i.$:document).createElement(h);d.domObject.call(this,h);};var h=d.element;h.get=function(i){return i&&(i.$?i:new h(i));};h.prototype=new d.node();h.createFromHtml=function(i,j){var k=new h('div',j);k.setHtml(i);return k.getFirst().remove();};h.setMarker=function(i,j,k,l){var m=j.getCustomData('list_marker_id')||j.setCustomData('list_marker_id',e.getNextNumber()).getCustomData('list_marker_id'),n=j.getCustomData('list_marker_names')||j.setCustomData('list_marker_names',{}).getCustomData('list_marker_names');i[m]=j;n[k]=1;return j.setCustomData(k,l);};h.clearAllMarkers=function(i){for(var j in i)h.clearMarkers(i,i[j],1);};h.clearMarkers=function(i,j,k){var l=j.getCustomData('list_marker_names'),m=j.getCustomData('list_marker_id');for(var n in l)j.removeCustomData(n);j.removeCustomData('list_marker_names');if(k){j.removeCustomData('list_marker_id');delete i[m];}};e.extend(h.prototype,{type:1,addClass:function(i){var j=this.$.className;if(j){var k=new RegExp('(?:^|\\s)'+i+'(?:\\s|$)','');if(!k.test(j))j+=' '+i;}this.$.className=j||i;},removeClass:function(i){var j=this.getAttribute('class');if(j){var k=new RegExp('(?:^|\\s+)'+i+'(?=\\s|$)','i');if(k.test(j)){j=j.replace(k,'').replace(/^\s+/,'');if(j)this.setAttribute('class',j);else this.removeAttribute('class');}}},hasClass:function(i){var j=new RegExp('(?:^|\\s+)'+i+'(?=\\s|$)','');return j.test(this.getAttribute('class'));},append:function(i,j){var k=this;if(typeof i=='string')i=k.getDocument().createElement(i);if(j)k.$.insertBefore(i.$,k.$.firstChild);else k.$.appendChild(i.$);return i;},appendHtml:function(i){var k=this;if(!k.$.childNodes.length)k.setHtml(i);else{var j=new h('div',k.getDocument());j.setHtml(i);j.moveChildren(k);}},appendText:function(i){if(this.$.text!=undefined)this.$.text+=i;else this.append(new d.text(i));},appendBogus:function(){var k=this;var i=k.getLast();while(i&&i.type==3&&!e.rtrim(i.getText()))i=i.getPrevious();if(!i||!i.is||!i.is('br')){var j=b.opera?k.getDocument().createText(''):k.getDocument().createElement('br');b.gecko&&j.setAttribute('type','_moz');k.append(j);}},breakParent:function(i){var l=this;var j=new d.range(l.getDocument());j.setStartAfter(l);j.setEndAfter(i);var k=j.extractContents();j.insertNode(l.remove());k.insertAfterNode(l);},contains:c||b.webkit?function(i){var j=this.$;return i.type!=1?j.contains(i.getParent().$):j!=i.$&&j.contains(i.$);
}:function(i){return!!(this.$.compareDocumentPosition(i.$)&16);},focus:function(){try{this.$.focus();}catch(i){}},getHtml:function(){var i=this.$.innerHTML;return c?i.replace(/<\?[^>]*>/g,''):i;},getOuterHtml:function(){var j=this;if(j.$.outerHTML)return j.$.outerHTML.replace(/<\?[^>]*>/,'');var i=j.$.ownerDocument.createElement('div');i.appendChild(j.$.cloneNode(true));return i.innerHTML;},setHtml:function(i){return this.$.innerHTML=i;},setText:function(i){h.prototype.setText=this.$.innerText!=undefined?function(j){return this.$.innerText=j;}:function(j){return this.$.textContent=j;};return this.setText(i);},getAttribute:(function(){var i=function(j){return this.$.getAttribute(j,2);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){var n=this;switch(j){case 'class':j='className';break;case 'tabindex':var k=i.call(n,j);if(k!==0&&n.$.tabIndex===0)k=null;return k;break;case 'checked':var l=n.$.attributes.getNamedItem(j),m=l.specified?l.nodeValue:n.$.checked;return m?'checked':null;case 'hspace':return n.$.hspace;case 'style':return n.$.style.cssText;}return i.call(n,j);};else return i;})(),getChildren:function(){return new d.nodeList(this.$.childNodes);},getComputedStyle:c?function(i){return this.$.currentStyle[e.cssStyleToDomStyle(i)];}:function(i){return this.getWindow().$.getComputedStyle(this.$,'').getPropertyValue(i);},getDtd:function(){var i=f[this.getName()];this.getDtd=function(){return i;};return i;},getElementsByTag:g.prototype.getElementsByTag,getTabIndex:c?function(){var i=this.$.tabIndex;if(i===0&&!f.$tabIndex[this.getName()]&&parseInt(this.getAttribute('tabindex'),10)!==0)i=-1;return i;}:b.webkit?function(){var i=this.$.tabIndex;if(i==undefined){i=parseInt(this.getAttribute('tabindex'),10);if(isNaN(i))i=-1;}return i;}:function(){return this.$.tabIndex;},getText:function(){return this.$.textContent||this.$.innerText||'';},getWindow:function(){return this.getDocument().getWindow();},getId:function(){return this.$.id||null;},getNameAtt:function(){return this.$.name||null;},getName:function(){var i=this.$.nodeName.toLowerCase();if(c){var j=this.$.scopeName;if(j!='HTML')i=j.toLowerCase()+':'+i;}return(this.getName=function(){return i;})();},getValue:function(){return this.$.value;},getFirst:function(i){var j=this.$.firstChild,k=j&&new d.node(j);if(k&&i&&!i(k))k=k.getNext(i);return k;},getLast:function(i){var j=this.$.lastChild,k=j&&new d.node(j);if(k&&i&&!i(k))k=k.getPrevious(i);return k;},getStyle:function(i){return this.$.style[e.cssStyleToDomStyle(i)];
},is:function(){var i=this.getName();for(var j=0;j<arguments.length;j++){if(arguments[j]==i)return true;}return false;},isEditable:function(){var i=this.getName(),j=!f.$nonEditable[i]&&(f[i]||f.span);return j&&j['#'];},isIdentical:function(i){if(this.getName()!=i.getName())return false;var j=this.$.attributes,k=i.$.attributes,l=j.length,m=k.length;if(!c&&l!=m)return false;for(var n=0;n<l;n++){var o=j[n];if((!c||o.specified&&o.nodeName!='_cke_expando')&&o.nodeValue!=i.getAttribute(o.nodeName))return false;}if(c)for(n=0;n<m;n++){o=k[n];if(o.specified&&o.nodeName!='_cke_expando'&&o.nodeValue!=this.getAttribute(o.nodeName))return false;}return true;},isVisible:function(){var i=!!this.$.offsetHeight&&this.getComputedStyle('visibility')!='hidden',j,k;if(i&&(b.webkit||b.opera)){j=this.getWindow();if(!j.equals(a.document.getWindow())&&(k=j.$.frameElement))i=new h(k).isVisible();}return i;},isEmptyInlineRemoveable:function(){if(!f.$removeEmpty[this.getName()])return false;var i=this.getChildren();for(var j=0,k=i.count();j<k;j++){var l=i.getItem(j);if(l.type==1&&l.getAttribute('_cke_bookmark'))continue;if(l.type==1&&!l.isEmptyInlineRemoveable()||l.type==3&&e.trim(l.getText()))return false;}return true;},hasAttributes:c&&(b.ie7Compat||b.ie6Compat)?function(){var i=this.$.attributes;for(var j=0;j<i.length;j++){var k=i[j];switch(k.nodeName){case 'class':if(this.getAttribute('class'))return true;case '_cke_expando':continue;default:if(k.specified)return true;}}return false;}:function(){var i=this.$.attributes,j=i.length,k={_cke_expando:1,_moz_dirty:1};return j>0&&(j>2||!k[i[0].nodeName]||j==2&&!k[i[1].nodeName]);},hasAttribute:function(i){var j=this.$.attributes.getNamedItem(i);return!!(j&&j.specified);},hide:function(){this.setStyle('display','none');},moveChildren:function(i,j){var k=this.$;i=i.$;if(k==i)return;var l;if(j)while(l=k.lastChild)i.insertBefore(k.removeChild(l),i.firstChild);else while(l=k.firstChild)i.appendChild(k.removeChild(l));},mergeSiblings:(function(){function i(j,k,l){if(k&&k.type==1){var m=[];while(k.getAttribute('_cke_bookmark')||k.isEmptyInlineRemoveable()){m.push(k);k=l?k.getNext():k.getPrevious();if(!k||k.type!=1)return;}if(j.isIdentical(k)){var n=l?j.getLast():j.getFirst();while(m.length)m.shift().move(j,!l);k.moveChildren(j,!l);k.remove();if(n&&n.type==1)n.mergeSiblings();}}};return function(){var j=this;if(!(f.$removeEmpty[j.getName()]||j.is('a')))return;i(j,j.getNext(),true);i(j,j.getPrevious());};})(),show:function(){this.setStyles({display:'',visibility:''});
},setAttribute:(function(){var i=function(j,k){this.$.setAttribute(j,k);return this;};if(c&&(b.ie7Compat||b.ie6Compat))return function(j,k){var l=this;if(j=='class')l.$.className=k;else if(j=='style')l.$.style.cssText=k;else if(j=='tabindex')l.$.tabIndex=k;else if(j=='checked')l.$.checked=k;else i.apply(l,arguments);return l;};else return i;})(),setAttributes:function(i){for(var j in i)this.setAttribute(j,i[j]);return this;},setValue:function(i){this.$.value=i;return this;},removeAttribute:(function(){var i=function(j){this.$.removeAttribute(j);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){if(j=='class')j='className';else if(j=='tabindex')j='tabIndex';i.call(this,j);};else return i;})(),removeAttributes:function(i){if(e.isArray(i))for(var j=0;j<i.length;j++)this.removeAttribute(i[j]);else for(var k in i)i.hasOwnProperty(k)&&this.removeAttribute(k);},removeStyle:function(i){var j=this;j.setStyle(i,'');if(j.$.style.removeAttribute)j.$.style.removeAttribute(e.cssStyleToDomStyle(i));if(!j.$.style.cssText)j.removeAttribute('style');},setStyle:function(i,j){this.$.style[e.cssStyleToDomStyle(i)]=j;return this;},setStyles:function(i){for(var j in i)this.setStyle(j,i[j]);return this;},setOpacity:function(i){if(c){i=Math.round(i*100);this.setStyle('filter',i>=100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+i+')');}else this.setStyle('opacity',i);},unselectable:b.gecko?function(){this.$.style.MozUserSelect='none';this.on('dragstart',function(i){i.data.preventDefault();});}:b.webkit?function(){this.$.style.KhtmlUserSelect='none';this.on('dragstart',function(i){i.data.preventDefault();});}:function(){if(c||b.opera){var i=this.$,j,k=0;i.unselectable='on';while(j=i.all[k++])switch(j.tagName.toLowerCase()){case 'iframe':case 'textarea':case 'input':case 'select':break;default:j.unselectable='on';}}},getPositionedAncestor:function(){var i=this;while(i.getName()!='html'){if(i.getComputedStyle('position')!='static')return i;i=i.getParent();}return null;},getDocumentPosition:function(i){var D=this;var j=0,k=0,l=D.getDocument().getBody(),m=D.getDocument().$.compatMode=='BackCompat',n=D.getDocument();if(document.documentElement.getBoundingClientRect){var o=D.$.getBoundingClientRect(),p=n.$,q=p.documentElement,r=q.clientTop||l.$.clientTop||0,s=q.clientLeft||l.$.clientLeft||0,t=true;if(c){var u=n.getDocumentElement().contains(D),v=n.getBody().contains(D);t=m&&v||!m&&u;}if(t){j=o.left+(!m&&q.scrollLeft||l.$.scrollLeft);j-=s;k=o.top+(!m&&q.scrollTop||l.$.scrollTop);
k-=r;}}else{var w=D,x=null,y;while(w&&!(w.getName()=='body'||w.getName()=='html')){j+=w.$.offsetLeft-w.$.scrollLeft;k+=w.$.offsetTop-w.$.scrollTop;if(!w.equals(D)){j+=w.$.clientLeft||0;k+=w.$.clientTop||0;}var z=x;while(z&&!z.equals(w)){j-=z.$.scrollLeft;k-=z.$.scrollTop;z=z.getParent();}x=w;w=(y=w.$.offsetParent)?new h(y):null;}}if(i){var A=D.getWindow(),B=i.getWindow();if(!A.equals(B)&&A.$.frameElement){var C=new h(A.$.frameElement).getDocumentPosition(i);j+=C.x;k+=C.y;}}if(!document.documentElement.getBoundingClientRect)if(b.gecko&&!m){j+=D.$.clientLeft?1:0;k+=D.$.clientTop?1:0;}return{x:j,y:k};},scrollIntoView:function(i){var o=this;var j=o.getWindow(),k=j.getViewPaneSize().height,l=k*-1;if(i)l+=k;else{l+=o.$.offsetHeight||0;l+=parseInt(o.getComputedStyle('marginBottom')||0,10)||0;}var m=o.getDocumentPosition();l+=m.y;l=l<0?0:l;var n=j.getScrollPosition().y;if(l>n||l<n-k)j.$.scrollTo(0,l);},setState:function(i){var j=this;switch(i){case 1:j.addClass('cke_on');j.removeClass('cke_off');j.removeClass('cke_disabled');break;case 0:j.addClass('cke_disabled');j.removeClass('cke_off');j.removeClass('cke_on');break;default:j.addClass('cke_off');j.removeClass('cke_on');j.removeClass('cke_disabled');break;}},getFrameDocument:function(){var i=this.$;try{i.contentWindow.document;}catch(j){i.src=i.src;if(c&&b.version<7)window.showModalDialog('javascript:document.write("<script>window.setTimeout(function(){window.close();},50);</script>")');}return i&&new g(i.contentWindow.document);},copyAttributes:function(i,j){var p=this;var k=p.$.attributes;j=j||{};for(var l=0;l<k.length;l++){var m=k[l],n=m.nodeName.toLowerCase(),o;if(n in j)continue;if(n=='checked'&&(o=p.getAttribute(n)))i.setAttribute(n,o);else if(m.specified||c&&m.nodeValue&&n=='value'){o=p.getAttribute(n);if(o===null)o=m.nodeValue;i.setAttribute(n,o);}}if(p.$.style.cssText!=='')i.$.style.cssText=p.$.style.cssText;},renameNode:function(i){var l=this;if(l.getName()==i)return;var j=l.getDocument(),k=new h(i,j);l.copyAttributes(k);l.moveChildren(k);l.getParent()&&l.$.parentNode.replaceChild(k.$,l.$);k.$._cke_expando=l.$._cke_expando;l.$=k.$;},getChild:function(i){var j=this.$;if(!i.slice)j=j.childNodes[i];else while(i.length>0&&j)j=j.childNodes[i.shift()];return j?new d.node(j):null;},getChildCount:function(){return this.$.childNodes.length;},disableContextMenu:function(){this.on('contextmenu',function(i){if(!i.data.getTarget().hasClass('cke_enable_context_menu'))i.data.preventDefault();});},setSize:(function(){var i={width:['border-left-width','border-right-width','padding-left','padding-right'],height:['border-top-width','border-bottom-width','padding-top','padding-bottom']};
return function(j,k,l){if(typeof k=='number'){if(l&&!(c&&b.quirks)){var m=0;for(var n=0,o=i[j].length;n<o;n++)m+=parseInt(this.getComputedStyle(i[j][n])||0,10)||0;k-=m;}this.setStyle(j,k+'px');}};})(),getDirection:function(i){return i?this.getComputedStyle('direction'):this.getStyle('direction')||this.getAttribute('dir');}});a.command=function(i,j){this.uiItems=[];this.exec=function(k){if(this.state==0)return false;if(this.editorFocus)i.focus();return j.exec.call(this,i,k)!==false;};e.extend(this,j,{modes:{wysiwyg:1},editorFocus:1,state:2});a.event.call(this);};a.command.prototype={enable:function(){var i=this;if(i.state==0)i.setState(!i.preserveState||typeof i.previousState=='undefined'?2:i.previousState);},disable:function(){this.setState(0);},setState:function(i){var j=this;if(j.state==i)return false;j.previousState=j.state;j.state=i;j.fire('state');return true;},toggleState:function(){var i=this;if(i.state==2)i.setState(1);else if(i.state==1)i.setState(2);}};a.event.implementOn(a.command.prototype,true);a.ENTER_P=1;a.ENTER_BR=2;a.ENTER_DIV=3;a.config={customConfig:'config.js',autoUpdateElement:true,baseHref:'',contentsCss:a.basePath+'contents.css',contentsLangDirection:'ui',contentsLanguage:'',language:'',defaultLanguage:'en',enterMode:1,forceEnterMode:false,shiftEnterMode:2,corePlugins:'',docType:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',bodyId:'',bodyClass:'',fullPage:false,height:200,plugins:'about,a11yhelp,basicstyles,bidi,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,dialogadvtab,div,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,liststyle,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,showborders,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',extraPlugins:'',removePlugins:'',protectedSource:[],tabIndex:0,theme:'default',skin:'kama',width:'',baseFloatZIndex:10000};var i=a.config;a.focusManager=function(j){if(j.focusManager)return j.focusManager;this.hasFocus=false;this._={editor:j};return this;};a.focusManager.prototype={focus:function(){var k=this;if(k._.timer)clearTimeout(k._.timer);if(!k.hasFocus){if(a.currentInstance)a.currentInstance.focusManager.forceBlur();var j=k._.editor;j.container.getChild(1).addClass('cke_focus');k.hasFocus=true;
j.fire('focus');}},blur:function(){var j=this;if(j._.timer)clearTimeout(j._.timer);j._.timer=setTimeout(function(){delete j._.timer;j.forceBlur();},100);},forceBlur:function(){if(this.hasFocus){var j=this._.editor;j.container.getChild(1).removeClass('cke_focus');this.hasFocus=false;j.fire('blur');}}};(function(){var j={};a.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,'en-au':1,'en-ca':1,'en-gb':1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,'fr-ca':1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,is:1,it:1,ja:1,km:1,ko:1,lt:1,lv:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,'pt-br':1,pt:1,ro:1,ru:1,sk:1,sl:1,'sr-latn':1,sr:1,sv:1,th:1,tr:1,uk:1,vi:1,'zh-cn':1,zh:1},load:function(k,l,m){if(!k||!a.lang.languages[k])k=this.detect(l,k);if(!this[k])a.scriptLoader.load(a.getUrl('lang/'+k+'.js'),function(){m(k,this[k]);},this);else m(k,this[k]);},detect:function(k,l){var m=this.languages;l=l||navigator.userLanguage||navigator.language;var n=l.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),o=n[1],p=n[2];if(m[o+'-'+p])o=o+'-'+p;else if(!m[o])o=null;a.lang.detect=o?function(){return o;}:function(q){return q;};return o||k;}};})();a.scriptLoader=(function(){var j={},k={};return{load:function(l,m,n,o,p){var q=typeof l=='string';if(q)l=[l];if(!n)n=a;var r=l.length,s=[],t=[],u=function(z){if(m)if(q)m.call(n,z);else m.call(n,s,t);};if(r===0){u(true);return;}var v=function(z,A){(A?s:t).push(z);if(--r<=0){p&&a.document.getDocumentElement().removeStyle('cursor');u(A);}},w=function(z,A){j[z]=1;var B=k[z];delete k[z];for(var C=0;C<B.length;C++)B[C](z,A);},x=function(z){if(o!==true&&j[z]){v(z,true);return;}var A=k[z]||(k[z]=[]);A.push(v);if(A.length>1)return;var B=new h('script');B.setAttributes({type:'text/javascript',src:z});if(m)if(c)B.$.onreadystatechange=function(){if(B.$.readyState=='loaded'||B.$.readyState=='complete'){B.$.onreadystatechange=null;w(z,true);}};else{B.$.onload=function(){setTimeout(function(){w(z,true);},0);};B.$.onerror=function(){w(z,false);};}B.appendTo(a.document.getHead());};p&&a.document.getDocumentElement().setStyle('cursor','wait');for(var y=0;y<r;y++)x(l[y]);},loadCode:function(l){var m=new h('script');m.setAttribute('type','text/javascript');m.appendText(l);m.appendTo(a.document.getHead());}};})();a.resourceManager=function(j,k){var l=this;l.basePath=j;l.fileName=k;l.registered={};l.loaded={};l.externals={};l._={waitingList:{}};};a.resourceManager.prototype={add:function(j,k){if(this.registered[j])throw '[CKEDITOR.resourceManager.add] The resource name "'+j+'" is already registered.';
a.fire(j+e.capitalize(this.fileName)+'Ready',this.registered[j]=k||{});},get:function(j){return this.registered[j]||null;},getPath:function(j){var k=this.externals[j];return a.getUrl(k&&k.dir||this.basePath+j+'/');},getFilePath:function(j){var k=this.externals[j];return a.getUrl(this.getPath(j)+(k&&typeof k.file=='string'?k.file:this.fileName+'.js'));},addExternal:function(j,k,l){j=j.split(',');for(var m=0;m<j.length;m++){var n=j[m];this.externals[n]={dir:k,file:l};}},load:function(j,k,l){if(!e.isArray(j))j=j?[j]:[];var m=this.loaded,n=this.registered,o=[],p={},q={};for(var r=0;r<j.length;r++){var s=j[r];if(!s)continue;if(!m[s]&&!n[s]){var t=this.getFilePath(s);o.push(t);if(!(t in p))p[t]=[];p[t].push(s);}else q[s]=this.get(s);}a.scriptLoader.load(o,function(u,v){if(v.length)throw '[CKEDITOR.resourceManager.load] Resource name "'+p[v[0]].join(',')+'" was not found at "'+v[0]+'".';for(var w=0;w<u.length;w++){var x=p[u[w]];for(var y=0;y<x.length;y++){var z=x[y];q[z]=this.get(z);m[z]=1;}}k.call(l,q);},this);}};a.plugins=new a.resourceManager('plugins/','plugin');var j=a.plugins;j.load=e.override(j.load,function(k){return function(l,m,n){var o={},p=function(q){k.call(this,q,function(r){e.extend(o,r);var s=[];for(var t in r){var u=r[t],v=u&&u.requires;if(v)for(var w=0;w<v.length;w++){if(!o[v[w]])s.push(v[w]);}}if(s.length)p.call(this,s);else{for(t in o){u=o[t];if(u.onLoad&&!u.onLoad._called){u.onLoad();u.onLoad._called=1;}}if(m)m.call(n||window,o);}},this);};p.call(this,l);};});j.setLang=function(k,l,m){var n=this.get(k),o=n.lang||(n.lang={});o[l]=m;};(function(){var k={},l=function(m,n){var o=function(){p.removeAllListeners();k[m]=1;n();},p=new h('img');p.on('load',o);p.on('error',o);p.setAttribute('src',m);};a.imageCacher={load:function(m,n){var o=m.length,p=new a.event();p.on('loaded',function(){p.finished=1;});if(n)p.on('loaded',n);var q=function(){if(--o===0)p.fire('loaded');};for(var r=0;r<m.length;r++){var s=m[r];if(k[s])q();else l(s,q);}return p;}};})();a.skins=(function(){var k={},l={},m={},n=function(o,p,q,r){var s=k[p];if(!o.skin){o.skin=s;if(s.init)s.init(o);}var t=function(D){for(var E=0;E<D.length;E++)D[E]=a.getUrl(m[p]+D[E]);};function u(D,E){return D.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(F,G,H,I){if(/^\/|^\w?:/.test(H))return F;else return 'url('+E+G+H+I+')';});};var v=s.preload;if(v&&v.length>0){if(!l[p]){t(v);l[p]=a.imageCacher.load(v);}if(!l[p].finished){l[p].on('loaded',function(){n(o,p,q,r);});return;}}q=s[q];var w=!q||!!q._isLoaded;
if(w)r&&r();else{var x=q._pending||(q._pending=[]);x.push(r);if(x.length>1)return;var y=!q.css||!q.css.length,z=!q.js||!q.js.length,A=function(){if(y&&z){q._isLoaded=1;for(var D=0;D<x.length;D++){if(x[D])x[D]();}}};if(!y){var B=q.css;if(e.isArray(B)){t(B);for(var C=0;C<B.length;C++)a.document.appendStyleSheet(B[C]);}else{B=u(B,a.getUrl(m[p]));a.document.appendStyleText(B);}q.css=B;y=1;}if(!z){t(q.js);a.scriptLoader.load(q.js,function(){z=1;A();});}A();}};return{add:function(o,p){k[o]=p;p.skinPath=m[o]||(m[o]=a.getUrl('skins/'+o+'/'));},load:function(o,p,q){var r=o.skinName,s=o.skinPath;if(k[r])n(o,r,p,q);else{m[r]=s;a.scriptLoader.load(a.getUrl(s+'skin.js'),function(){n(o,r,p,q);});}}};})();a.themes=new a.resourceManager('themes/','theme');a.ui=function(k){if(k.ui)return k.ui;this._={handlers:{},items:{},editor:k};return this;};var k=a.ui;k.prototype={add:function(l,m,n){this._.items[l]={type:m,command:n.command||null,args:Array.prototype.slice.call(arguments,2)};},create:function(l){var q=this;var m=q._.items[l],n=m&&q._.handlers[m.type],o=m&&m.command&&q._.editor.getCommand(m.command),p=n&&n.create.apply(q,m.args);if(o)o.uiItems.push(p);return p;},addHandler:function(l,m){this._.handlers[l]=m;}};(function(){var l=0,m=function(){var x='editor'+ ++l;return a.instances&&a.instances[x]?m():x;},n={},o=function(x){var y=x.config.customConfig;if(!y)return false;y=a.getUrl(y);var z=n[y]||(n[y]={});if(z.fn){z.fn.call(x,x.config);if(a.getUrl(x.config.customConfig)==y||!o(x))x.fireOnce('customConfigLoaded');}else a.scriptLoader.load(y,function(){if(a.editorConfig)z.fn=a.editorConfig;else z.fn=function(){};o(x);});return true;},p=function(x,y){x.on('customConfigLoaded',function(){if(y){if(y.on)for(var z in y.on)x.on(z,y.on[z]);e.extend(x.config,y,true);delete x.config.on;}q(x);});if(y&&y.customConfig!=undefined)x.config.customConfig=y.customConfig;if(!o(x))x.fireOnce('customConfigLoaded');},q=function(x){var y=x.config.skin.split(','),z=y[0],A=a.getUrl(y[1]||'skins/'+z+'/');x.skinName=z;x.skinPath=A;x.skinClass='cke_skin_'+z;x.tabIndex=x.config.tabIndex||x.element.getAttribute('tabindex')||0;x.fireOnce('configLoaded');t(x);},r=function(x){a.lang.load(x.config.language,x.config.defaultLanguage,function(y,z){x.langCode=y;x.lang=e.prototypedCopy(z);if(b.gecko&&b.version<10900&&x.lang.dir=='rtl')x.lang.dir='ltr';var A=x.config;A.contentsLangDirection=='ui'&&(A.contentsLangDirection=x.lang.dir);s(x);});},s=function(x){var y=x.config,z=y.plugins,A=y.extraPlugins,B=y.removePlugins;
if(A){var C=new RegExp('(?:^|,)(?:'+A.replace(/\s*,\s*/g,'|')+')(?=,|$)','g');z=z.replace(C,'');z+=','+A;}if(B){C=new RegExp('(?:^|,)(?:'+B.replace(/\s*,\s*/g,'|')+')(?=,|$)','g');z=z.replace(C,'');}j.load(z.split(','),function(D){var E=[],F=[],G=[];x.plugins=D;for(var H in D){var I=D[H],J=I.lang,K=j.getPath(H),L=null;I.path=K;if(J){L=e.indexOf(J,x.langCode)>=0?x.langCode:J[0];if(!I.lang[L])G.push(a.getUrl(K+'lang/'+L+'.js'));else{e.extend(x.lang,I.lang[L]);L=null;}}F.push(L);E.push(I);}a.scriptLoader.load(G,function(){var M=['beforeInit','init','afterInit'];for(var N=0;N<M.length;N++)for(var O=0;O<E.length;O++){var P=E[O];if(N===0&&F[O]&&P.lang)e.extend(x.lang,P.lang[F[O]]);if(P[M[N]])P[M[N]](x);}x.fire('pluginsLoaded');u(x);});});},t=function(x){a.skins.load(x,'editor',function(){r(x);});},u=function(x){var y=x.config.theme;a.themes.load(y,function(){var z=x.theme=a.themes.get(y);z.path=a.themes.getPath(y);z.build(x);if(x.config.autoUpdateElement)v(x);});},v=function(x){var y=x.element;if(x.elementMode==1&&y.is('textarea')){var z=y.$.form&&new h(y.$.form);if(z){function A(){x.updateElement();};z.on('submit',A);if(!z.$.submit.nodeName)z.$.submit=e.override(z.$.submit,function(B){return function(){x.updateElement();if(B.apply)B.apply(this,arguments);else B();};});x.on('destroy',function(){z.removeListener('submit',A);});}}};function w(){var x,y=this._.commands,z=this.mode;for(var A in y){x=y[A];x[x.startDisabled?'disable':x.modes[z]?'enable':'disable']();}};a.editor.prototype._init=function(){var z=this;var x=h.get(z._.element),y=z._.instanceConfig;delete z._.element;delete z._.instanceConfig;z._.commands={};z._.styles=[];z.element=x;z.name=x&&z.elementMode==1&&(x.getId()||x.getNameAtt())||m();if(z.name in a.instances)throw '[CKEDITOR.editor] The instance "'+z.name+'" already exists.';z.id=e.getNextId();z.config=e.prototypedCopy(i);z.ui=new k(z);z.focusManager=new a.focusManager(z);a.fire('instanceCreated',null,z);z.on('mode',w,null,null,1);p(z,y);};})();e.extend(a.editor.prototype,{addCommand:function(l,m){return this._.commands[l]=new a.command(this,m);},addCss:function(l){this._.styles.push(l);},destroy:function(l){var r=this;if(!l)r.updateElement();if(r.mode)r._.modes[r.mode].unload(r.getThemeSpace('contents'));r.theme.destroy(r);var m,n=0,o,p,q;if(r.toolbox){m=r.toolbox.toolbars;for(;n<m.length;n++){p=m[n].items;for(o=0;o<p.length;o++){q=p[o];if(q.clickFn)e.removeFunction(q.clickFn);if(q.keyDownFn)e.removeFunction(q.keyDownFn);if(q.index)k.button._.instances[q.index]=null;
}}}if(r.contextMenu)e.removeFunction(r.contextMenu._.functionId);if(r._.filebrowserFn)e.removeFunction(r._.filebrowserFn);r.fire('destroy');a.remove(r);a.fire('instanceDestroyed',null,r);},execCommand:function(l,m){var n=this.getCommand(l),o={name:l,commandData:m,command:n};if(n&&n.state!=0)if(this.fire('beforeCommandExec',o)!==true){o.returnValue=n.exec(o.commandData);if(!n.async&&this.fire('afterCommandExec',o)!==true)return o.returnValue;}return false;},getCommand:function(l){return this._.commands[l];},getData:function(){var n=this;n.fire('beforeGetData');var l=n._.data;if(typeof l!='string'){var m=n.element;if(m&&n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();else l='';}l={dataValue:l};n.fire('getData',l);return l.dataValue;},getSnapshot:function(){var l=this.fire('getSnapshot');if(typeof l!='string'){var m=this.element;if(m&&this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();}return l;},loadSnapshot:function(l){this.fire('loadSnapshot',l);},setData:function(l,m){if(m)this.on('dataReady',function(o){o.removeListener();m.call(o.editor);});var n={dataValue:l};this.fire('setData',n);this._.data=n.dataValue;this.fire('afterSetData',n);},insertHtml:function(l){this.fire('insertHtml',l);},insertElement:function(l){this.fire('insertElement',l);},checkDirty:function(){return this.mayBeDirty&&this._.previousValue!==this.getSnapshot();},resetDirty:function(){if(this.mayBeDirty)this._.previousValue=this.getSnapshot();},updateElement:function(){var n=this;var l=n.element;if(l&&n.elementMode==1){var m=n.getData();if(n.config.htmlEncodeOutput)m=e.htmlEncode(m);if(l.is('textarea'))l.setValue(m);else l.setHtml(m);}}});a.on('loaded',function(){var l=a.editor._pending;if(l){delete a.editor._pending;for(var m=0;m<l.length;m++)l[m]._init();}});a.htmlParser=function(){this._={htmlPartsRegex:new RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:[^\"'>]+)|(?:\"[^\"]*\")|(?:'[^']*'))*)\\/?>))",'g')};};(function(){var l=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,m={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};a.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(n){var A=this;var o,p,q=0,r;while(o=A._.htmlPartsRegex.exec(n)){var s=o.index;if(s>q){var t=n.substring(q,s);if(r)r.push(t);else A.onText(t);}q=A._.htmlPartsRegex.lastIndex;
if(p=o[1]){p=p.toLowerCase();if(r&&f.$cdata[p]){A.onCDATA(r.join(''));r=null;}if(!r){A.onTagClose(p);continue;}}if(r){r.push(o[0]);continue;}if(p=o[3]){p=p.toLowerCase();if(/="/.test(p))continue;var u={},v,w=o[4],x=!!(w&&w.charAt(w.length-1)=='/');if(w)while(v=l.exec(w)){var y=v[1].toLowerCase(),z=v[2]||v[3]||v[4]||'';if(!z&&m[y])u[y]=y;else u[y]=z;}A.onTagOpen(p,u,x);if(!r&&f.$cdata[p])r=[];continue;}if(p=o[2])A.onComment(p);}if(n.length>q)A.onText(n.substring(q,n.length));}};})();a.htmlParser.comment=function(l){this.value=l;this._={isBlockLike:false};};a.htmlParser.comment.prototype={type:8,writeHtml:function(l,m){var n=this.value;if(m){if(!(n=m.onComment(n,this)))return;if(typeof n!='string'){n.parent=this.parent;n.writeHtml(l,m);return;}}l.comment(n);}};(function(){var l=/[\t\r\n ]{2,}|[\t\r\n]/g;a.htmlParser.text=function(m){this.value=m;this._={isBlockLike:false};};a.htmlParser.text.prototype={type:3,writeHtml:function(m,n){var o=this.value;if(n&&!(o=n.onText(o,this)))return;m.text(o);}};})();(function(){a.htmlParser.cdata=function(l){this.value=l;};a.htmlParser.cdata.prototype={type:3,writeHtml:function(l){l.write(this.value);}};})();a.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false};};(function(){var l={colgroup:1,dd:1,dt:1,li:1,option:1,p:1,td:1,tfoot:1,th:1,thead:1,tr:1},m=e.extend({table:1,ul:1,ol:1,dl:1},f.table,f.ul,f.ol,f.dl),n=f.$list,o=f.$listItem;a.htmlParser.fragment.fromHtml=function(p,q){var r=new a.htmlParser(),s=[],t=new a.htmlParser.fragment(),u=[],v=[],w=t,x=false,y;function z(E){var F;if(u.length>0)for(var G=0;G<u.length;G++){var H=u[G],I=H.name,J=f[I],K=w.name&&f[w.name];if((!K||K[I])&&(!E||!J||J[E]||!f[E])){if(!F){A();F=1;}H=H.clone();H.parent=w;w=H;u.splice(G,1);G--;}}};function A(E){while(v.length-(E||0)>0)w.add(v.shift());};function B(E,F,G){F=F||w||t;if(q&&!F.type){var H,I;if(E.attributes&&(I=E.attributes._cke_real_element_type))H=I;else H=E.name;if(H&&!(H in f.$body)&&!(H in f.$nonBodyContent)){var J=w;w=F;r.onTagOpen(q,{});F=w;if(G)w=J;}}if(E._.isBlockLike&&E.name!='pre'){var K=E.children.length,L=E.children[K-1],M;if(L&&L.type==3)if(!(M=e.rtrim(L.value)))E.children.length=K-1;else L.value=M;}F.add(E);if(E.returnPoint){w=E.returnPoint;delete E.returnPoint;}};r.onTagOpen=function(E,F,G){var H=new a.htmlParser.element(E,F);if(H.isUnknown&&G)H.isEmpty=true;if(f.$removeEmpty[E]){u.push(H);return;}else if(E=='pre')x=true;else if(E=='br'&&x){w.add(new a.htmlParser.text('\n'));
return;}if(E=='br'){v.push(H);return;}var I=w.name,J=I&&(f[I]||(w._.isBlockLike?f.div:f.span));if(J&&!H.isUnknown&&!w.isUnknown&&!J[E]){var K=false,L;if(E in n&&I in n){var M=w.children,N=M[M.length-1];if(!(N&&N.name in o))B(N=new a.htmlParser.element('li'),w);y=w,L=N;}else if(E==I)B(w,w.parent);else if(E in f.$listItem){r.onTagOpen('ul',{});L=w;K=true;}else{if(m[I]){if(!y)y=w;}else{B(w,w.parent,true);if(!l[I])u.unshift(w);}K=true;}if(L)w=L;else w=w.returnPoint||w.parent;if(K){r.onTagOpen.apply(this,arguments);return;}}z(E);A();H.parent=w;H.returnPoint=y;y=0;if(H.isEmpty)B(H);else w=H;};r.onTagClose=function(E){for(var F=u.length-1;F>=0;F--){if(E==u[F].name){u.splice(F,1);return;}}var G=[],H=[],I=w;while(I.type&&I.name!=E){if(!I._.isBlockLike)H.unshift(I);G.push(I);I=I.parent;}if(I.type){for(F=0;F<G.length;F++){var J=G[F];B(J,J.parent);}w=I;if(w.name=='pre')x=false;if(I._.isBlockLike)A();B(I,I.parent);if(I==w)w=w.parent;u=u.concat(H);}if(E=='body')q=false;};r.onText=function(E){if(!w._.hasInlineStarted&&!x){E=e.ltrim(E);if(E.length===0)return;}A();z();if(q&&(!w.type||w.name=='body')&&e.trim(E))this.onTagOpen(q,{});if(!x)E=E.replace(/[\t\r\n ]{2,}|[\t\r\n]/g,' ');w.add(new a.htmlParser.text(E));};r.onCDATA=function(E){w.add(new a.htmlParser.cdata(E));};r.onComment=function(E){z();w.add(new a.htmlParser.comment(E));};r.parse(p);A(!c&&1);while(w.type){var C=w.parent,D=w;if(q&&(!C.type||C.name=='body')&&!f.$body[D.name]){w=C;r.onTagOpen(q,{});C=w;}C.add(D);w=C;}return t;};a.htmlParser.fragment.prototype={add:function(p){var s=this;var q=s.children.length,r=q>0&&s.children[q-1]||null;if(r){if(p._.isBlockLike&&r.type==3){r.value=e.rtrim(r.value);if(r.value.length===0){s.children.pop();s.add(p);return;}}r.next=p;}p.previous=r;p.parent=s;s.children.push(p);s._.hasInlineStarted=p.type==3||p.type==1&&!p._.isBlockLike;},writeHtml:function(p,q){var r;this.filterChildren=function(){var s=new a.htmlParser.basicWriter();this.writeChildrenHtml.call(this,s,q,true);var t=s.getHtml();this.children=new a.htmlParser.fragment.fromHtml(t).children;r=1;};!this.name&&q&&q.onFragment(this);this.writeChildrenHtml(p,r?null:q);},writeChildrenHtml:function(p,q){for(var r=0;r<this.children.length;r++)this.children[r].writeHtml(p,q);}};})();a.htmlParser.element=function(l,m){var r=this;r.name=l;r.attributes=m||(m={});r.children=[];var n=m._cke_real_element_type||l,o=f,p=!!(o.$nonBodyContent[n]||o.$block[n]||o.$listItem[n]||o.$tableContent[n]||o.$nonEditable[n]||n=='br'),q=!!o.$empty[l];r.isEmpty=q;
r.isUnknown=!o[l];r._={isBlockLike:p,hasInlineStarted:q||!p};};(function(){var l=function(m,n){m=m[0];n=n[0];return m<n?-1:m>n?1:0;};a.htmlParser.element.prototype={type:1,add:a.htmlParser.fragment.prototype.add,clone:function(){return new a.htmlParser.element(this.name,this.attributes);},writeHtml:function(m,n){var o=this.attributes,p=this,q=p.name,r,s,t,u;p.filterChildren=function(){if(!u){var z=new a.htmlParser.basicWriter();a.htmlParser.fragment.prototype.writeChildrenHtml.call(p,z,n);p.children=new a.htmlParser.fragment.fromHtml(z.getHtml()).children;u=1;}};if(n){for(;;){if(!(q=n.onElementName(q)))return;p.name=q;if(!(p=n.onElement(p)))return;p.parent=this.parent;if(p.name==q)break;if(p.type!=1){p.writeHtml(m,n);return;}q=p.name;if(!q){this.writeChildrenHtml.call(p,m,u?null:n);return;}}o=p.attributes;}m.openTag(q,o);var v=[];for(var w=0;w<2;w++)for(r in o){s=r;t=o[r];if(w==1)v.push([r,t]);else if(n){for(;;){if(!(s=n.onAttributeName(r))){delete o[r];break;}else if(s!=r){delete o[r];r=s;continue;}else break;}if(s)if((t=n.onAttribute(p,s,t))===false)delete o[s];else o[s]=t;}}if(m.sortAttributes)v.sort(l);var x=v.length;for(w=0;w<x;w++){var y=v[w];m.attribute(y[0],y[1]);}m.openTagClose(q,p.isEmpty);if(!p.isEmpty){this.writeChildrenHtml.call(p,m,u?null:n);m.closeTag(q);}},writeChildrenHtml:function(m,n){a.htmlParser.fragment.prototype.writeChildrenHtml.apply(this,arguments);}};})();(function(){a.htmlParser.filter=e.createClass({$:function(q){this._={elementNames:[],attributeNames:[],elements:{$length:0},attributes:{$length:0}};if(q)this.addRules(q,10);},proto:{addRules:function(q,r){var s=this;if(typeof r!='number')r=10;m(s._.elementNames,q.elementNames,r);m(s._.attributeNames,q.attributeNames,r);n(s._.elements,q.elements,r);n(s._.attributes,q.attributes,r);s._.text=o(s._.text,q.text,r)||s._.text;s._.comment=o(s._.comment,q.comment,r)||s._.comment;s._.root=o(s._.root,q.root,r)||s._.root;},onElementName:function(q){return l(q,this._.elementNames);},onAttributeName:function(q){return l(q,this._.attributeNames);},onText:function(q){var r=this._.text;return r?r.filter(q):q;},onComment:function(q,r){var s=this._.comment;return s?s.filter(q,r):q;},onFragment:function(q){var r=this._.root;return r?r.filter(q):q;},onElement:function(q){var v=this;var r=[v._.elements['^'],v._.elements[q.name],v._.elements.$],s,t;for(var u=0;u<3;u++){s=r[u];if(s){t=s.filter(q,v);if(t===false)return null;if(t&&t!=q)return v.onNode(t);if(q.parent&&!q.name)break;}}return q;},onNode:function(q){var r=q.type;
return r==1?this.onElement(q):r==3?new a.htmlParser.text(this.onText(q.value)):r==8?new a.htmlParser.comment(this.onComment(q.value)):null;},onAttribute:function(q,r,s){var t=this._.attributes[r];if(t){var u=t.filter(s,q,this);if(u===false)return false;if(typeof u!='undefined')return u;}return s;}}});function l(q,r){for(var s=0;q&&s<r.length;s++){var t=r[s];q=q.replace(t[0],t[1]);}return q;};function m(q,r,s){if(typeof r=='function')r=[r];var t,u,v=q.length,w=r&&r.length;if(w){for(t=0;t<v&&q[t].pri<s;t++){}for(u=w-1;u>=0;u--){var x=r[u];if(x){x.pri=s;q.splice(t,0,x);}}}};function n(q,r,s){if(r)for(var t in r){var u=q[t];q[t]=o(u,r[t],s);if(!u)q.$length++;}};function o(q,r,s){if(r){r.pri=s;if(q){if(!q.splice){if(q.pri>s)q=[r,q];else q=[q,r];q.filter=p;}else m(q,r,s);return q;}else{r.filter=r;return r;}}};function p(q){var r=q.type||q instanceof a.htmlParser.fragment;for(var s=0;s<this.length;s++){if(r)var t=q.type,u=q.name;var v=this[s],w=v.apply(window,arguments);if(w===false)return w;if(r){if(w&&(w.name!=u||w.type!=t))return w;}else if(typeof w!='string')return w;w!=undefined&&(q=w);}return q;};})();a.htmlParser.basicWriter=e.createClass({$:function(){this._={output:[]};},proto:{openTag:function(l,m){this._.output.push('<',l);},openTagClose:function(l,m){if(m)this._.output.push(' />');else this._.output.push('>');},attribute:function(l,m){if(typeof m=='string')m=e.htmlEncodeAttr(m);this._.output.push(' ',l,'="',m,'"');},closeTag:function(l){this._.output.push('</',l,'>');},text:function(l){this._.output.push(l);},comment:function(l){this._.output.push('<!--',l,'-->');},write:function(l){this._.output.push(l);},reset:function(){this._.output=[];this._.indent=false;},getHtml:function(l){var m=this._.output.join('');if(l)this.reset();return m;}}});delete a.loadFullCore;a.instances={};a.document=new g(document);a.add=function(l){a.instances[l.name]=l;l.on('focus',function(){if(a.currentInstance!=l){a.currentInstance=l;a.fire('currentInstance');}});l.on('blur',function(){if(a.currentInstance==l){a.currentInstance=null;a.fire('currentInstance');}});};a.remove=function(l){delete a.instances[l.name];};a.on('instanceDestroyed',function(){if(e.isEmpty(this.instances))a.fire('reset');});a.TRISTATE_ON=1;a.TRISTATE_OFF=2;a.TRISTATE_DISABLED=0;d.comment=e.createClass({base:d.node,$:function(l,m){if(typeof l=='string')l=(m?m.$:document).createComment(l);this.base(l);},proto:{type:8,getOuterHtml:function(){return '<!--'+this.$.nodeValue+'-->';}}});(function(){var l={address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,dd:1},m={body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,caption:1,form:1},n=function(o){var p=o.getChildren();
for(var q=0,r=p.count();q<r;q++){var s=p.getItem(q);if(s.type==1&&f.$block[s.getName()])return true;}return false;};d.elementPath=function(o){var u=this;var p=null,q=null,r=[],s=o;while(s){if(s.type==1){if(!u.lastElement)u.lastElement=s;var t=s.getName();if(c&&s.$.scopeName!='HTML')t=s.$.scopeName.toLowerCase()+':'+t;if(!q){if(!p&&l[t])p=s;if(m[t])if(!p&&t=='div'&&!n(s))p=s;else q=s;}r.push(s);if(t=='body')break;}s=s.getParent();}u.block=p;u.blockLimit=q;u.elements=r;};})();d.elementPath.prototype={compare:function(l){var m=this.elements,n=l&&l.elements;if(!n||m.length!=n.length)return false;for(var o=0;o<m.length;o++){if(!m[o].equals(n[o]))return false;}return true;},contains:function(l){var m=this.elements;for(var n=0;n<m.length;n++){if(m[n].getName() in l)return m[n];}return null;}};d.text=function(l,m){if(typeof l=='string')l=(m?m.$:document).createTextNode(l);this.$=l;};d.text.prototype=new d.node();e.extend(d.text.prototype,{type:3,getLength:function(){return this.$.nodeValue.length;},getText:function(){return this.$.nodeValue;},split:function(l){var q=this;if(c&&l==q.getLength()){var m=q.getDocument().createText('');m.insertAfter(q);return m;}var n=q.getDocument(),o=new d.text(q.$.splitText(l),n);if(b.ie8){var p=new d.text('',n);p.insertAfter(o);p.remove();}return o;},substring:function(l,m){if(typeof m!='number')return this.$.nodeValue.substr(l);else return this.$.nodeValue.substring(l,m);}});d.documentFragment=function(l){l=l||a.document;this.$=l.$.createDocumentFragment();};e.extend(d.documentFragment.prototype,h.prototype,{type:11,insertAfterNode:function(l){l=l.$;l.parentNode.insertBefore(this.$,l.nextSibling);}},true,{append:1,appendBogus:1,getFirst:1,getLast:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1});(function(){function l(t,u){if(this._.end)return null;var v,w=this.range,x,y=this.guard,z=this.type,A=t?'getPreviousSourceNode':'getNextSourceNode';if(!this._.start){this._.start=1;w.trim();if(w.collapsed){this.end();return null;}}if(!t&&!this._.guardLTR){var B=w.endContainer,C=B.getChild(w.endOffset);this._.guardLTR=function(G,H){return(!H||!B.equals(G))&&(!C||!G.equals(C))&&(G.type!=1||!H||G.getName()!='body');};}if(t&&!this._.guardRTL){var D=w.startContainer,E=w.startOffset>0&&D.getChild(w.startOffset-1);this._.guardRTL=function(G,H){return(!H||!D.equals(G))&&(!E||!G.equals(E))&&(G.type!=1||!H||G.getName()!='body');};}var F=t?this._.guardRTL:this._.guardLTR;
if(y)x=function(G,H){if(F(G,H)===false)return false;return y(G,H);};else x=F;if(this.current)v=this.current[A](false,z,x);else if(t){v=w.endContainer;if(w.endOffset>0){v=v.getChild(w.endOffset-1);if(x(v)===false)v=null;}else v=x(v,true)===false?null:v.getPreviousSourceNode(true,z,x);}else{v=w.startContainer;v=v.getChild(w.startOffset);if(v){if(x(v)===false)v=null;}else v=x(w.startContainer,true)===false?null:w.startContainer.getNextSourceNode(true,z,x);}while(v&&!this._.end){this.current=v;if(!this.evaluator||this.evaluator(v)!==false){if(!u)return v;}else if(u&&this.evaluator)return false;v=v[A](false,z,x);}this.end();return this.current=null;};function m(t){var u,v=null;while(u=l.call(this,t))v=u;return v;};d.walker=e.createClass({$:function(t){this.range=t;this._={};},proto:{end:function(){this._.end=1;},next:function(){return l.call(this);},previous:function(){return l.call(this,1);},checkForward:function(){return l.call(this,0,1)!==false;},checkBackward:function(){return l.call(this,1,1)!==false;},lastForward:function(){return m.call(this);},lastBackward:function(){return m.call(this,1);},reset:function(){delete this.current;this._={};}}});var n={block:1,'list-item':1,table:1,'table-row-group':1,'table-header-group':1,'table-footer-group':1,'table-row':1,'table-column-group':1,'table-column':1,'table-cell':1,'table-caption':1},o={hr:1};h.prototype.isBlockBoundary=function(t){var u=e.extend({},o,t||{});return n[this.getComputedStyle('display')]||u[this.getName()];};d.walker.blockBoundary=function(t){return function(u,v){return!(u.type==1&&u.isBlockBoundary(t));};};d.walker.listItemBoundary=function(){return this.blockBoundary({br:1});};d.walker.bookmark=function(t,u){function v(w){return w&&w.getName&&w.getName()=='span'&&w.hasAttribute('_cke_bookmark');};return function(w){var x,y;x=w&&!w.getName&&(y=w.getParent())&&v(y);x=t?x:x||v(w);return!!(u^x);};};d.walker.whitespaces=function(t){return function(u){var v=u&&u.type==3&&!e.trim(u.getText());return!!(t^v);};};d.walker.invisible=function(t){var u=d.walker.whitespaces();return function(v){var w=u(v)||v.is&&!v.$.offsetHeight;return!!(t^w);};};var p=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,q=d.walker.whitespaces(1),r=d.walker.bookmark(0,1),s=function(t){return r(t)&&q(t);};h.prototype.getBogus=function(){var t=this.getLast(s);if(t&&(!c?t.is&&t.is('br'):t.getText&&p.test(t.getText())))return t;return false;};})();d.range=function(l){var m=this;m.startContainer=null;m.startOffset=null;m.endContainer=null;m.endOffset=null;
m.collapsed=true;m.document=l;};(function(){var l=function(t){t.collapsed=t.startContainer&&t.endContainer&&t.startContainer.equals(t.endContainer)&&t.startOffset==t.endOffset;},m=function(t,u,v){t.optimizeBookmark();var w=t.startContainer,x=t.endContainer,y=t.startOffset,z=t.endOffset,A,B;if(x.type==3)x=x.split(z);else if(x.getChildCount()>0)if(z>=x.getChildCount()){x=x.append(t.document.createText(''));B=true;}else x=x.getChild(z);if(w.type==3){w.split(y);if(w.equals(x))x=w.getNext();}else if(!y){w=w.getFirst().insertBeforeMe(t.document.createText(''));A=true;}else if(y>=w.getChildCount()){w=w.append(t.document.createText(''));A=true;}else w=w.getChild(y).getPrevious();var C=w.getParents(),D=x.getParents(),E,F,G;for(E=0;E<C.length;E++){F=C[E];G=D[E];if(!F.equals(G))break;}var H=v,I,J,K,L;for(var M=E;M<C.length;M++){I=C[M];if(H&&!I.equals(w))J=H.append(I.clone());K=I.getNext();while(K){if(K.equals(D[M])||K.equals(x))break;L=K.getNext();if(u==2)H.append(K.clone(true));else{K.remove();if(u==1)H.append(K);}K=L;}if(H)H=J;}H=v;for(var N=E;N<D.length;N++){I=D[N];if(u>0&&!I.equals(x))J=H.append(I.clone());if(!C[N]||I.$.parentNode!=C[N].$.parentNode){K=I.getPrevious();while(K){if(K.equals(C[N])||K.equals(w))break;L=K.getPrevious();if(u==2)H.$.insertBefore(K.$.cloneNode(true),H.$.firstChild);else{K.remove();if(u==1)H.$.insertBefore(K.$,H.$.firstChild);}K=L;}}if(H)H=J;}if(u==2){var O=t.startContainer;if(O.type==3){O.$.data+=O.$.nextSibling.data;O.$.parentNode.removeChild(O.$.nextSibling);}var P=t.endContainer;if(P.type==3&&P.$.nextSibling){P.$.data+=P.$.nextSibling.data;P.$.parentNode.removeChild(P.$.nextSibling);}}else{if(F&&G&&(w.$.parentNode!=F.$.parentNode||x.$.parentNode!=G.$.parentNode)){var Q=G.getIndex();if(A&&G.$.parentNode==w.$.parentNode)Q--;t.setStart(G.getParent(),Q);}t.collapse(true);}if(A)w.remove();if(B&&x.$.parentNode)x.remove();},n={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1};function o(t){var u=false,v=d.walker.bookmark(true);return function(w){if(v(w))return true;if(w.type==3){if(e.trim(w.getText()).length)return false;}else if(w.type==1)if(!n[w.getName()])if(!t&&!c&&w.getName()=='br'&&!u)u=true;else return false;return true;};};function p(t){return t.type!=3&&t.getName() in f.$removeEmpty||!e.trim(t.getText())||t.getParent().hasAttribute('_cke_bookmark');};var q=new d.walker.whitespaces(),r=new d.walker.bookmark();function s(t){return!q(t)&&!r(t);
};d.range.prototype={clone:function(){var u=this;var t=new d.range(u.document);t.startContainer=u.startContainer;t.startOffset=u.startOffset;t.endContainer=u.endContainer;t.endOffset=u.endOffset;t.collapsed=u.collapsed;return t;},collapse:function(t){var u=this;if(t){u.endContainer=u.startContainer;u.endOffset=u.startOffset;}else{u.startContainer=u.endContainer;u.startOffset=u.endOffset;}u.collapsed=true;},cloneContents:function(){var t=new d.documentFragment(this.document);if(!this.collapsed)m(this,2,t);return t;},deleteContents:function(){if(this.collapsed)return;m(this,0);},extractContents:function(){var t=new d.documentFragment(this.document);if(!this.collapsed)m(this,1,t);return t;},createBookmark:function(t){var z=this;var u,v,w,x,y=z.collapsed;u=z.document.createElement('span');u.setAttribute('_cke_bookmark',1);u.setStyle('display','none');u.setHtml('&nbsp;');if(t){w='cke_bm_'+e.getNextNumber();u.setAttribute('id',w+'S');}if(!y){v=u.clone();v.setHtml('&nbsp;');if(t)v.setAttribute('id',w+'E');x=z.clone();x.collapse();x.insertNode(v);}x=z.clone();x.collapse(true);x.insertNode(u);if(v){z.setStartAfter(u);z.setEndBefore(v);}else z.moveToPosition(u,4);return{startNode:t?w+'S':u,endNode:t?w+'E':v,serializable:t,collapsed:y};},createBookmark2:function(t){var B=this;var u=B.startContainer,v=B.endContainer,w=B.startOffset,x=B.endOffset,y=B.collapsed,z,A;if(!u||!v)return{start:0,end:0};if(t){if(u.type==1){z=u.getChild(w);if(z&&z.type==3&&w>0&&z.getPrevious().type==3){u=z;w=0;}}while(u.type==3&&(A=u.getPrevious())&&A.type==3){u=A;w+=A.getLength();}if(!y){if(v.type==1){z=v.getChild(x);if(z&&z.type==3&&x>0&&z.getPrevious().type==3){v=z;x=0;}}while(v.type==3&&(A=v.getPrevious())&&A.type==3){v=A;x+=A.getLength();}}}return{start:u.getAddress(t),end:y?null:v.getAddress(t),startOffset:w,endOffset:x,normalized:t,collapsed:y,is2:true};},moveToBookmark:function(t){var B=this;if(t.is2){var u=B.document.getByAddress(t.start,t.normalized),v=t.startOffset,w=t.end&&B.document.getByAddress(t.end,t.normalized),x=t.endOffset;B.setStart(u,v);if(w)B.setEnd(w,x);else B.collapse(true);}else{var y=t.serializable,z=y?B.document.getById(t.startNode):t.startNode,A=y?B.document.getById(t.endNode):t.endNode;B.setStartBefore(z);z.remove();if(A){B.setEndBefore(A);A.remove();}else B.collapse(true);}},getBoundaryNodes:function(){var y=this;var t=y.startContainer,u=y.endContainer,v=y.startOffset,w=y.endOffset,x;if(t.type==1){x=t.getChildCount();if(x>v)t=t.getChild(v);else if(x<1)t=t.getPreviousSourceNode();
else{t=t.$;while(t.lastChild)t=t.lastChild;t=new d.node(t);t=t.getNextSourceNode()||t;}}if(u.type==1){x=u.getChildCount();if(x>w)u=u.getChild(w).getPreviousSourceNode(true);else if(x<1)u=u.getPreviousSourceNode();else{u=u.$;while(u.lastChild)u=u.lastChild;u=new d.node(u);}}if(t.getPosition(u)&2)t=u;return{startNode:t,endNode:u};},getCommonAncestor:function(t,u){var y=this;var v=y.startContainer,w=y.endContainer,x;if(v.equals(w)){if(t&&v.type==1&&y.startOffset==y.endOffset-1)x=v.getChild(y.startOffset);else x=v;}else x=v.getCommonAncestor(w);return u&&!x.is?x.getParent():x;},optimize:function(){var v=this;var t=v.startContainer,u=v.startOffset;if(t.type!=1)if(!u)v.setStartBefore(t);else if(u>=t.getLength())v.setStartAfter(t);t=v.endContainer;u=v.endOffset;if(t.type!=1)if(!u)v.setEndBefore(t);else if(u>=t.getLength())v.setEndAfter(t);},optimizeBookmark:function(){var v=this;var t=v.startContainer,u=v.endContainer;if(t.is&&t.is('span')&&t.hasAttribute('_cke_bookmark'))v.setStartAt(t,3);if(u&&u.is&&u.is('span')&&u.hasAttribute('_cke_bookmark'))v.setEndAt(u,4);},trim:function(t,u){var B=this;var v=B.startContainer,w=B.startOffset,x=B.collapsed;if((!t||x)&&v&&v.type==3){if(!w){w=v.getIndex();v=v.getParent();}else if(w>=v.getLength()){w=v.getIndex()+1;v=v.getParent();}else{var y=v.split(w);w=v.getIndex()+1;v=v.getParent();if(B.startContainer.equals(B.endContainer))B.setEnd(y,B.endOffset-B.startOffset);else if(v.equals(B.endContainer))B.endOffset+=1;}B.setStart(v,w);if(x){B.collapse(true);return;}}var z=B.endContainer,A=B.endOffset;if(!(u||x)&&z&&z.type==3){if(!A){A=z.getIndex();z=z.getParent();}else if(A>=z.getLength()){A=z.getIndex()+1;z=z.getParent();}else{z.split(A);A=z.getIndex()+1;z=z.getParent();}B.setEnd(z,A);}},enlarge:function(t){switch(t){case 1:if(this.collapsed)return;var u=this.getCommonAncestor(),v=this.document.getBody(),w,x,y,z,A,B=false,C,D,E=this.startContainer,F=this.startOffset;if(E.type==3){if(F){E=!e.trim(E.substring(0,F)).length&&E;B=!!E;}if(E)if(!(z=E.getPrevious()))y=E.getParent();}else{if(F)z=E.getChild(F-1)||E.getLast();if(!z)y=E;}while(y||z){if(y&&!z){if(!A&&y.equals(u))A=true;if(!v.contains(y))break;if(!B||y.getComputedStyle('display')!='inline'){B=false;if(A)w=y;else this.setStartBefore(y);}z=y.getPrevious();}while(z){C=false;if(z.type==3){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;C=/[\s\ufeff]$/.test(D);}else if(z.$.offsetWidth>0&&!z.getAttribute('_cke_bookmark'))if(B&&f.$removeEmpty[z.getName()]){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;
else{var G=z.$.all||z.$.getElementsByTagName('*');for(var H=0,I;I=G[H++];){if(!f.$removeEmpty[I.nodeName.toLowerCase()]){z=null;break;}}}if(z)C=!!D.length;}else z=null;if(C)if(B){if(A)w=y;else if(y)this.setStartBefore(y);}else B=true;if(z){var J=z.getPrevious();if(!y&&!J){y=z;z=null;break;}z=J;}else y=null;}if(y)y=y.getParent();}E=this.endContainer;F=this.endOffset;y=z=null;A=B=false;if(E.type==3){E=!e.trim(E.substring(F)).length&&E;B=!(E&&E.getLength());if(E)if(!(z=E.getNext()))y=E.getParent();}else{z=E.getChild(F);if(!z)y=E;}while(y||z){if(y&&!z){if(!A&&y.equals(u))A=true;if(!v.contains(y))break;if(!B||y.getComputedStyle('display')!='inline'){B=false;if(A)x=y;else if(y)this.setEndAfter(y);}z=y.getNext();}while(z){C=false;if(z.type==3){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;C=/^[\s\ufeff]/.test(D);}else if(z.$.offsetWidth>0&&!z.getAttribute('_cke_bookmark'))if(B&&f.$removeEmpty[z.getName()]){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;else{G=z.$.all||z.$.getElementsByTagName('*');for(H=0;I=G[H++];){if(!f.$removeEmpty[I.nodeName.toLowerCase()]){z=null;break;}}}if(z)C=!!D.length;}else z=null;if(C)if(B)if(A)x=y;else this.setEndAfter(y);if(z){J=z.getNext();if(!y&&!J){y=z;z=null;break;}z=J;}else y=null;}if(y)y=y.getParent();}if(w&&x){u=w.contains(x)?x:w;this.setStartBefore(u);this.setEndAfter(u);}break;case 2:case 3:var K=new d.range(this.document);v=this.document.getBody();K.setStartAt(v,1);K.setEnd(this.startContainer,this.startOffset);var L=new d.walker(K),M,N,O=d.walker.blockBoundary(t==3?{br:1}:null),P=function(R){var S=O(R);if(!S)M=R;return S;},Q=function(R){var S=P(R);if(!S&&R.is&&R.is('br'))N=R;return S;};L.guard=P;y=L.lastBackward();M=M||v;this.setStartAt(M,!M.is('br')&&(!y&&this.checkStartOfBlock()||y&&M.contains(y))?1:4);K=this.clone();K.collapse();K.setEndAt(v,2);L=new d.walker(K);L.guard=t==3?Q:P;M=null;y=L.lastForward();M=M||v;this.setEndAt(M,!y&&this.checkEndOfBlock()||y&&M.contains(y)?2:3);if(N)this.setEndAfter(N);}},shrink:function(t,u){if(!this.collapsed){t=t||2;var v=this.clone(),w=this.startContainer,x=this.endContainer,y=this.startOffset,z=this.endOffset,A=this.collapsed,B=1,C=1;if(w&&w.type==3)if(!y)v.setStartBefore(w);else if(y>=w.getLength())v.setStartAfter(w);else{v.setStartBefore(w);B=0;}if(x&&x.type==3)if(!z)v.setEndBefore(x);else if(z>=x.getLength())v.setEndAfter(x);else{v.setEndAfter(x);C=0;}var D=new d.walker(v),E=d.walker.bookmark();D.evaluator=function(I){return I.type==(t==1?1:3);};var F;D.guard=function(I,J){if(E(I))return true;
if(t==1&&I.type==3)return false;if(J&&I.equals(F))return false;if(!J&&I.type==1)F=I;return true;};if(B){var G=D[t==1?'lastForward':'next']();G&&this.setStartAt(G,u?1:3);}if(C){D.reset();var H=D[t==1?'lastBackward':'previous']();H&&this.setEndAt(H,u?2:4);}return!!(B||C);}},insertNode:function(t){var x=this;x.optimizeBookmark();x.trim(false,true);var u=x.startContainer,v=x.startOffset,w=u.getChild(v);if(w)t.insertBefore(w);else u.append(t);if(t.getParent().equals(x.endContainer))x.endOffset++;x.setStartBefore(t);},moveToPosition:function(t,u){this.setStartAt(t,u);this.collapse(true);},selectNodeContents:function(t){this.setStart(t,0);this.setEnd(t,t.type==3?t.getLength():t.getChildCount());},setStart:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])t=t.getParent(),u=t.getIndex();v.startContainer=t;v.startOffset=u;if(!v.endContainer){v.endContainer=t;v.endOffset=u;}l(v);},setEnd:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])u=t.getIndex()+1,t=t.getParent();v.endContainer=t;v.endOffset=u;if(!v.startContainer){v.startContainer=t;v.startOffset=u;}l(v);},setStartAfter:function(t){this.setStart(t.getParent(),t.getIndex()+1);},setStartBefore:function(t){this.setStart(t.getParent(),t.getIndex());},setEndAfter:function(t){this.setEnd(t.getParent(),t.getIndex()+1);},setEndBefore:function(t){this.setEnd(t.getParent(),t.getIndex());},setStartAt:function(t,u){var v=this;switch(u){case 1:v.setStart(t,0);break;case 2:if(t.type==3)v.setStart(t,t.getLength());else v.setStart(t,t.getChildCount());break;case 3:v.setStartBefore(t);break;case 4:v.setStartAfter(t);}l(v);},setEndAt:function(t,u){var v=this;switch(u){case 1:v.setEnd(t,0);break;case 2:if(t.type==3)v.setEnd(t,t.getLength());else v.setEnd(t,t.getChildCount());break;case 3:v.setEndBefore(t);break;case 4:v.setEndAfter(t);}l(v);},fixBlock:function(t,u){var x=this;var v=x.createBookmark(),w=x.document.createElement(u);x.collapse(t);x.enlarge(2);x.extractContents().appendTo(w);w.trim();if(!c)w.appendBogus();x.insertNode(w);x.moveToBookmark(v);return w;},splitBlock:function(t){var D=this;var u=new d.elementPath(D.startContainer),v=new d.elementPath(D.endContainer),w=u.blockLimit,x=v.blockLimit,y=u.block,z=v.block,A=null;if(!w.equals(x))return null;if(t!='br'){if(!y){y=D.fixBlock(true,t);z=new d.elementPath(D.endContainer).block;}if(!z)z=D.fixBlock(false,t);}var B=y&&D.checkStartOfBlock(),C=z&&D.checkEndOfBlock();D.deleteContents();if(y&&y.equals(z))if(C){A=new d.elementPath(D.startContainer);D.moveToPosition(z,4);
z=null;}else if(B){A=new d.elementPath(D.startContainer);D.moveToPosition(y,3);y=null;}else{z=D.splitElement(y);if(!c&&!y.is('ul','ol'))y.appendBogus();}return{previousBlock:y,nextBlock:z,wasStartOfBlock:B,wasEndOfBlock:C,elementPath:A};},splitElement:function(t){var w=this;if(!w.collapsed)return null;w.setEndAt(t,2);var u=w.extractContents(),v=t.clone(false);u.appendTo(v);v.insertAfter(t);w.moveToPosition(t,4);return v;},checkBoundaryOfElement:function(t,u){var v=u==1,w=this.clone();w.collapse(v);w[v?'setStartAt':'setEndAt'](t,v?1:2);var x=new d.walker(w);x.evaluator=p;return x[v?'checkBackward':'checkForward']();},checkStartOfBlock:function(){var z=this;var t=z.startContainer,u=z.startOffset;if(u&&t.type==3){var v=e.ltrim(t.substring(0,u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.startContainer),x=z.clone();x.collapse(true);x.setStartAt(w.block||w.blockLimit,1);var y=new d.walker(x);y.evaluator=o(true);return y.checkBackward();},checkEndOfBlock:function(){var z=this;var t=z.endContainer,u=z.endOffset;if(t.type==3){var v=e.rtrim(t.substring(u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.endContainer),x=z.clone();x.collapse(false);x.setEndAt(w.block||w.blockLimit,2);var y=new d.walker(x);y.evaluator=o(false);return y.checkForward();},moveToElementEditablePosition:function(t,u){var v;if(f.$empty[t.getName()])return false;while(t&&t.type==1){v=t.isEditable();if(v)this.moveToPosition(t,u?2:1);else if(f.$inline[t.getName()]){this.moveToPosition(t,u?4:3);return true;}if(f.$empty[t.getName()])t=t[u?'getPrevious':'getNext'](s);else t=t[u?'getLast':'getFirst'](s);if(t&&t.type==3){this.moveToPosition(t,u?4:3);return true;}}return v;},moveToElementEditStart:function(t){return this.moveToElementEditablePosition(t);},moveToElementEditEnd:function(t){return this.moveToElementEditablePosition(t,true);},getEnclosedNode:function(){var t=this.clone();t.optimize();if(t.startContainer.type!=1||t.endContainer.type!=1)return null;var u=new d.walker(t),v=d.walker.bookmark(true),w=d.walker.whitespaces(true),x=function(z){return w(z)&&v(z);};t.evaluator=x;var y=u.next();u.reset();return y&&y.equals(u.previous())?y:null;},getTouchedStartNode:function(){var t=this.startContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.startOffset)||t;},getTouchedEndNode:function(){var t=this.endContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.endOffset-1)||t;}};})();a.POSITION_AFTER_START=1;a.POSITION_BEFORE_END=2;a.POSITION_BEFORE_START=3;
a.POSITION_AFTER_END=4;a.ENLARGE_ELEMENT=1;a.ENLARGE_BLOCK_CONTENTS=2;a.ENLARGE_LIST_ITEM_CONTENTS=3;a.START=1;a.END=2;a.STARTEND=3;a.SHRINK_ELEMENT=1;a.SHRINK_TEXT=2;(function(){d.rangeList=function(n){if(n instanceof d.rangeList)return n;if(!n)n=[];else if(n instanceof d.range)n=[n];return e.extend(n,l);};var l={createIterator:function(){var n=this,o=d.walker.bookmark(),p=function(s){return!(s.is&&s.is('tr'));},q=[],r;return{getNextRange:function(s){r=r==undefined?0:r+1;var t=n[r];if(t&&n.length>1){if(!r)for(var u=n.length-1;u>=0;u--)q.unshift(n[u].createBookmark(true));if(s){var v=0;while(n[r+v+1]){var w=t.document,x=0,y=w.getById(q[v].endNode),z=w.getById(q[v+1].startNode),A;while(1){A=y.getNextSourceNode(false);if(!z.equals(A)){if(o(A)||A.type==1&&A.isBlockBoundary()){y=A;continue;}}else x=1;break;}if(!x)break;v++;}}t.moveToBookmark(q.shift());var A;while(v--){A=n[++r];A.moveToBookmark(q.shift());t.setEnd(A.endContainer,A.endOffset);}}return t;}};},createBookmarks:function(n){var s=this;var o=[],p;for(var q=0;q<s.length;q++){o.push(p=s[q].createBookmark(n,true));for(var r=q+1;r<s.length;r++){s[r]=m(p,s[r]);s[r]=m(p,s[r],true);}}return o;},createBookmarks2:function(n){var o=[];for(var p=0;p<this.length;p++)o.push(this[p].createBookmark2(n));return o;},moveToBookmarks:function(n){for(var o=0;o<this.length;o++)this[o].moveToBookmark(n[o]);}};function m(n,o,p){var q=n.serializable,r=o[p?'endContainer':'startContainer'],s=p?'endOffset':'startOffset',t=q?o.document.getById(n.startNode):n.startNode,u=q?o.document.getById(n.endNode):n.endNode;if(r.equals(t.getPrevious())){o.startOffset=o.startOffset-r.getLength()-u.getPrevious().getLength();r=u.getNext();}else if(r.equals(u.getPrevious())){o.startOffset=o.startOffset-r.getLength();r=u.getNext();}r.equals(t.getParent())&&o[s]++;r.equals(u.getParent())&&o[s]++;o[p?'endContainer':'startContainer']=r;return o;};})();(function(){if(b.webkit){b.hc=false;return;}var l=c&&b.version<7,m=c&&b.version==7,n=l?a.basePath+'images/spacer.gif':m?'about:blank':'data:image/png;base64,',o=h.createFromHtml('<div style="width:0px;height:0px;position:absolute;left:-10000px;background-image:url('+n+')"></div>',a.document);o.appendTo(a.document.getHead());try{b.hc=o.getComputedStyle('background-image')=='none';}catch(p){b.hc=false;}if(b.hc)b.cssClass+=' cke_hc';o.remove();})();j.load(i.corePlugins.split(','),function(){a.status='loaded';a.fire('loaded');var l=a._.pending;if(l){delete a._.pending;for(var m=0;m<l.length;m++)a.add(l[m]);
}});if(c)try{document.execCommand('BackgroundImageCache',false,true);}catch(l){}a.skins.add('kama',(function(){var m=[],n='cke_ui_color';if(c&&b.version<7)m.push('icons.png','images/sprites_ie6.png','images/dialog_sides.gif');return{preload:m,editor:{css:['editor.css']},dialog:{css:['dialog.css']},templates:{css:['templates.css']},margins:[0,0,0,0],init:function(o){if(o.config.width&&!isNaN(o.config.width))o.config.width-=12;var p=[],q=/\$color/g,r='/* UI Color Support */.cke_skin_kama .cke_menuitem .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{\tbackground-color: transparent !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuseparator{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{\tbackground-color: $color !important;}';if(b.webkit){r=r.split('}').slice(0,-1);for(var s=0;s<r.length;s++)r[s]=r[s].split('{');}function t(w){var x=w.getById(n);if(!x){x=w.getHead().append('style');x.setAttribute('id',n);x.setAttribute('type','text/css');}return x;};function u(w,x,y){var z,A,B;for(var C=0;C<w.length;C++){if(b.webkit)for(A=0;A<x.length;A++){B=x[A][1];for(z=0;z<y.length;z++)B=B.replace(y[z][0],y[z][1]);w[C].$.sheet.addRule(x[A][0],B);}else{B=x;for(z=0;z<y.length;z++)B=B.replace(y[z][0],y[z][1]);if(c)w[C].$.styleSheet.cssText+=B;else w[C].$.innerHTML+=B;}}};var v=/\$color/g;e.extend(o,{uiColor:null,getUiColor:function(){return this.uiColor;
},setUiColor:function(w){var x,y=t(a.document),z='.'+o.id,A=[z+' .cke_wrapper',z+'_dialog .cke_dialog_contents',z+'_dialog a.cke_dialog_tab',z+'_dialog .cke_dialog_footer'].join(','),B='background-color: $color !important;';if(b.webkit)x=[[A,B]];else x=A+'{'+B+'}';return(this.setUiColor=function(C){var D=[[v,C]];o.uiColor=C;u([y],x,D);u(p,r,D);})(w);}});o.on('menuShow',function(w){var x=w.data[0],y=x.element.getElementsByTag('iframe').getItem(0).getFrameDocument();if(!y.getById('cke_ui_color')){var z=t(y);p.push(z);var A=o.getUiColor();if(A)u([z],r,[[v,A]]);}});if(o.config.uiColor)o.setUiColor(o.config.uiColor);}};})());(function(){a.dialog?m():a.on('dialogPluginReady',m);function m(){a.dialog.on('resize',function(n){var o=n.data,p=o.width,q=o.height,r=o.dialog,s=r.parts.contents;if(o.skin!='kama')return;s.setStyles({width:p+'px',height:q+'px'});setTimeout(function(){var t=r.parts.dialog.getChild([0,0,0]),u=t.getChild(0),v=t.getChild(2);v.setStyle('width',u.$.offsetWidth+'px');v=t.getChild(7);v.setStyle('width',u.$.offsetWidth-28+'px');v=t.getChild(4);v.setStyle('height',q+u.getChild(0).$.offsetHeight+'px');v=t.getChild(5);v.setStyle('height',q+u.getChild(0).$.offsetHeight+'px');},100);});};})();j.add('about',{requires:['dialog'],init:function(m){var n=m.addCommand('about',new a.dialogCommand('about'));n.modes={wysiwyg:1,source:1};n.canUndo=false;m.ui.addButton('About',{label:m.lang.about.title,command:'about'});a.dialog.add('about',this.path+'dialogs/about.js');}});(function(){var m='a11yhelp',n='a11yHelp';j.add(m,{availableLangs:{en:1,he:1},init:function(o){var p=this;o.addCommand(n,{exec:function(){var q=o.langCode;q=p.availableLangs[q]?q:'en';a.scriptLoader.load(a.getUrl(p.path+'lang/'+q+'.js'),function(){e.extend(o.lang,p.lang[q]);o.openDialog(n);});},modes:{wysiwyg:1,source:1},canUndo:false});a.dialog.add(n,this.path+'dialogs/a11yhelp.js');}});})();j.add('basicstyles',{requires:['styles','button'],init:function(m){var n=function(q,r,s,t){var u=new a.style(t);m.attachStyleStateChange(u,function(v){m.getCommand(s).setState(v);});m.addCommand(s,new a.styleCommand(u));m.ui.addButton(q,{label:r,command:s});},o=m.config,p=m.lang;n('Bold',p.bold,'bold',o.coreStyles_bold);n('Italic',p.italic,'italic',o.coreStyles_italic);n('Underline',p.underline,'underline',o.coreStyles_underline);n('Strike',p.strike,'strike',o.coreStyles_strike);n('Subscript',p.subscript,'subscript',o.coreStyles_subscript);n('Superscript',p.superscript,'superscript',o.coreStyles_superscript);
}});i.coreStyles_bold={element:'strong',overrides:'b'};i.coreStyles_italic={element:'em',overrides:'i'};i.coreStyles_underline={element:'u'};i.coreStyles_strike={element:'strike'};i.coreStyles_subscript={element:'sub'};i.coreStyles_superscript={element:'sup'};(function(){var m={table:1,tbody:1,ul:1,ol:1,blockquote:1,div:1,tr:1},n={},o={};e.extend(n,m,{tr:1,p:1,div:1,li:1});e.extend(o,n,{td:1});function p(w){q(w);r(w);};function q(w){var x=w.editor,y=w.data.path,z=x.config.useComputedState,A;z=z===undefined||z;if(!z)A=s(y.lastElement);A=A||y.block||y.blockLimit;if(!A||A.getName()=='body')return;var B=z?A.getComputedStyle('direction'):A.getStyle('direction')||A.getAttribute('dir');x.getCommand('bidirtl').setState(B=='rtl'?1:2);x.getCommand('bidiltr').setState(B=='ltr'?1:2);};function r(w){var x=w.editor,y=x.container.getChild(1),z=s(w.data.path.lastElement);if(z&&x.lang.dir!=z.getComputedStyle('direction'))y.addClass('cke_mixed_dir_content');else y.removeClass('cke_mixed_dir_content');};function s(w){while(w&&!(w.getName() in o||w.is('body'))){var x=w.getParent();if(!x)break;w=x;}return w;};function t(w,x,y,z){h.setMarker(z,w,'bidi_processed',1);var A=w;while((A=A.getParent())&&!A.is('body')){if(A.getCustomData('bidi_processed')){w.removeStyle('direction');w.removeAttribute('dir');return null;}}var B='useComputedState' in y.config?y.config.useComputedState:1,C=B?w.getComputedStyle('direction'):w.getStyle('direction')||w.hasAttribute('dir');if(C==x)return null;var D=B?C:w.getComputedStyle('direction');w.removeStyle('direction');if(B){w.removeAttribute('dir');if(x!=w.getComputedStyle('direction'))w.setAttribute('dir',x);}else w.setAttribute('dir',x);if(x!=D)y.fire('dirChanged',w);y.forceNextSelectionCheck();return null;};function u(w,x){var y=w.getCommonAncestor(false,true);w.enlarge(2);if(w.checkBoundaryOfElement(y,1)&&w.checkBoundaryOfElement(y,2)){var z;while(y&&y.type==1&&(z=y.getParent())&&z.getChildCount()==1&&(!(y.getName() in x)||z.getName() in x))y=z;return y.type==1&&y.getName() in x&&y;}};function v(w){return function(x){var y=x.getSelection(),z=x.config.enterMode,A=y.getRanges();if(A&&A.length){var B={},C=y.createBookmarks(),D=A.createIterator(),E,F=0;while(E=D.getNextRange(1)){var G=E.getEnclosedNode();if(!G||G&&!(G.type==1&&G.getName() in n))G=u(E,m);if(G&&!G.isReadOnly())t(G,w,x,B);var H,I,J=new d.walker(E),K=C[F].startNode,L=C[F++].endNode;J.evaluator=function(M){return!!(M.type==1&&M.getName() in m&&!(M.getName()==(z==1)?'p':'div'&&M.getParent().type==1&&M.getParent().getName()=='blockquote')&&M.getPosition(K)&2&&(M.getPosition(L)&4+16)==4);
};while(I=J.next())t(I,w,x,B);H=E.createIterator();H.enlargeBr=z!=2;while(I=H.getNextParagraph(z==1?'p':'div'))!I.isReadOnly()&&t(I,w,x,B);}h.clearAllMarkers(B);x.forceNextSelectionCheck();y.selectBookmarks(C);x.focus();}};};j.add('bidi',{requires:['styles','button'],init:function(w){var x=function(z,A,B,C){w.addCommand(B,new a.command(w,{exec:C}));w.ui.addButton(z,{label:A,command:B});},y=w.lang.bidi;x('BidiLtr',y.ltr,'bidiltr',v('ltr'));x('BidiRtl',y.rtl,'bidirtl',v('rtl'));w.on('selectionChange',p);}});})();(function(){function m(q,r){var s=r.block||r.blockLimit;if(!s||s.getName()=='body')return 2;if(s.getAscendant('blockquote',true))return 1;return 2;};function n(q){var r=q.editor,s=r.getCommand('blockquote');s.state=m(r,q.data.path);s.fire('state');};function o(q){for(var r=0,s=q.getChildCount(),t;r<s&&(t=q.getChild(r));r++){if(t.type==1&&t.isBlockBoundary())return false;}return true;};var p={exec:function(q){var r=q.getCommand('blockquote').state,s=q.getSelection(),t=s&&s.getRanges(true)[0];if(!t)return;var u=s.createBookmarks();if(c){var v=u[0].startNode,w=u[0].endNode,x;if(v&&v.getParent().getName()=='blockquote'){x=v;while(x=x.getNext()){if(x.type==1&&x.isBlockBoundary()){v.move(x,true);break;}}}if(w&&w.getParent().getName()=='blockquote'){x=w;while(x=x.getPrevious()){if(x.type==1&&x.isBlockBoundary()){w.move(x);break;}}}}var y=t.createIterator(),z;if(r==2){var A=[];while(z=y.getNextParagraph())A.push(z);if(A.length<1){var B=q.document.createElement(q.config.enterMode==1?'p':'div'),C=u.shift();t.insertNode(B);B.append(new d.text('\ufeff',q.document));t.moveToBookmark(C);t.selectNodeContents(B);t.collapse(true);C=t.createBookmark();A.push(B);u.unshift(C);}var D=A[0].getParent(),E=[];for(var F=0;F<A.length;F++){z=A[F];D=D.getCommonAncestor(z.getParent());}var G={table:1,tbody:1,tr:1,ol:1,ul:1};while(G[D.getName()])D=D.getParent();var H=null;while(A.length>0){z=A.shift();while(!z.getParent().equals(D))z=z.getParent();if(!z.equals(H))E.push(z);H=z;}while(E.length>0){z=E.shift();if(z.getName()=='blockquote'){var I=new d.documentFragment(q.document);while(z.getFirst()){I.append(z.getFirst().remove());A.push(I.getLast());}I.replace(z);}else A.push(z);}var J=q.document.createElement('blockquote');J.insertBefore(A[0]);while(A.length>0){z=A.shift();J.append(z);}}else if(r==1){var K=[],L={};while(z=y.getNextParagraph()){var M=null,N=null;while(z.getParent()){if(z.getParent().getName()=='blockquote'){M=z.getParent();N=z;break;}z=z.getParent();}if(M&&N&&!N.getCustomData('blockquote_moveout')){K.push(N);
h.setMarker(L,N,'blockquote_moveout',true);}}h.clearAllMarkers(L);var O=[],P=[];L={};while(K.length>0){var Q=K.shift();J=Q.getParent();if(!Q.getPrevious())Q.remove().insertBefore(J);else if(!Q.getNext())Q.remove().insertAfter(J);else{Q.breakParent(Q.getParent());P.push(Q.getNext());}if(!J.getCustomData('blockquote_processed')){P.push(J);h.setMarker(L,J,'blockquote_processed',true);}O.push(Q);}h.clearAllMarkers(L);for(F=P.length-1;F>=0;F--){J=P[F];if(o(J))J.remove();}if(q.config.enterMode==2){var R=true;while(O.length){Q=O.shift();if(Q.getName()=='div'){I=new d.documentFragment(q.document);var S=R&&Q.getPrevious()&&!(Q.getPrevious().type==1&&Q.getPrevious().isBlockBoundary());if(S)I.append(q.document.createElement('br'));var T=Q.getNext()&&!(Q.getNext().type==1&&Q.getNext().isBlockBoundary());while(Q.getFirst())Q.getFirst().remove().appendTo(I);if(T)I.append(q.document.createElement('br'));I.replace(Q);R=false;}}}}s.selectBookmarks(u);q.focus();}};j.add('blockquote',{init:function(q){q.addCommand('blockquote',p);q.ui.addButton('Blockquote',{label:q.lang.blockquote,command:'blockquote'});q.on('selectionChange',n);},requires:['domiterator']});})();j.add('button',{beforeInit:function(m){m.ui.addHandler(1,k.button.handler);}});a.UI_BUTTON=1;k.button=function(m){e.extend(this,m,{title:m.label,className:m.className||m.command&&'cke_button_'+m.command||'',click:m.click||(function(n){n.execCommand(m.command);})});this._={};};k.button.handler={create:function(m){return new k.button(m);}};k.button.prototype={canGroup:true,render:function(m,n){var o=b,p=this._.id=e.getNextId(),q='',r=this.command,s,t;this._.editor=m;var u={id:p,button:this,editor:m,focus:function(){var w=a.document.getById(p);w.focus();},execute:function(){this.button.click(m);}};u.clickFn=s=e.addFunction(u.execute,u);u.index=t=k.button._.instances.push(u)-1;if(this.modes)m.on('mode',function(){this.setState(this.modes[m.mode]?2:0);},this);else if(r){r=m.getCommand(r);if(r){r.on('state',function(){this.setState(r.state);},this);q+='cke_'+(r.state==1?'on':r.state==0?'disabled':'off');}}if(!r)q+='cke_off';if(this.className)q+=' '+this.className;n.push('<span class="cke_button">','<a id="',p,'" class="',q,'"',o.gecko&&o.version>=10900&&!o.hc?'':'" href="javascript:void(\''+(this.title||'').replace("'",'')+"')\"",' title="',this.title,'" tabindex="-1" hidefocus="true" role="button" aria-labelledby="'+p+'_label"'+(this.hasArrow?' aria-haspopup="true"':''));if(o.opera||o.gecko&&o.mac)n.push(' onkeypress="return false;"');
if(o.gecko)n.push(' onblur="this.style.cssText = this.style.cssText;"');n.push(' onkeydown="return CKEDITOR.ui.button._.keydown(',t,', event);" onfocus="return CKEDITOR.ui.button._.focus(',t,', event);" onclick="CKEDITOR.tools.callFunction(',s,', this); return false;"><span class="cke_icon"');if(this.icon){var v=(this.iconOffset||0)*-16;n.push(' style="background-image:url(',a.getUrl(this.icon),');background-position:0 '+v+'px;"');}n.push('>&nbsp;</span><span id="',p,'_label" class="cke_label">',this.label,'</span>');if(this.hasArrow)n.push('<span class="cke_buttonarrow">'+(b.hc?'&#9660;':'&nbsp;')+'</span>');n.push('</a>','</span>');if(this.onRender)this.onRender();return u;},setState:function(m){if(this._.state==m)return false;this._.state=m;var n=a.document.getById(this._.id);if(n){n.setState(m);m==0?n.setAttribute('aria-disabled',true):n.removeAttribute('aria-disabled');m==1?n.setAttribute('aria-pressed',true):n.removeAttribute('aria-pressed');return true;}else return false;}};k.button._={instances:[],keydown:function(m,n){var o=k.button._.instances[m];if(o.onkey){n=new d.event(n);return o.onkey(o,n.getKeystroke())!==false;}},focus:function(m,n){var o=k.button._.instances[m],p;if(o.onfocus)p=o.onfocus(o,new d.event(n))!==false;if(b.gecko&&b.version<10900)n.preventBubble();return p;}};k.prototype.addButton=function(m,n){this.add(m,1,n);};a.on('reset',function(){k.button._.instances=[];});(function(){var m=function(t,u){var v=t.document,w=v.getBody(),x=0,y=function(){x=1;};w.on(u,y);(b.version>7?v.$:v.$.selection.createRange()).execCommand(u);w.removeListener(u,y);return x;},n=c?function(t,u){return m(t,u);}:function(t,u){try{return t.document.$.execCommand(u);}catch(v){return false;}},o=function(t){this.type=t;this.canUndo=this.type=='cut';};o.prototype={exec:function(t,u){this.type=='cut'&&s(t);var v=n(t,this.type);if(!v)alert(t.lang.clipboard[this.type+'Error']);return v;}};var p={canUndo:false,exec:c?function(t){t.focus();if(!t.document.getBody().fire('beforepaste')&&!m(t,'paste')){t.fire('pasteDialog');return false;}}:function(t){try{if(!t.document.getBody().fire('beforepaste')&&!t.document.$.execCommand('Paste',false,null))throw 0;}catch(u){setTimeout(function(){t.fire('pasteDialog');},0);return false;}}},q=function(t){if(this.mode!='wysiwyg')return;switch(t.data.keyCode){case 1000+86:case 2000+45:var u=this.document.getBody();if(!c&&u.fire('beforepaste'))t.cancel();else if(b.opera||b.gecko&&b.version<10900)u.fire('paste');return;case 1000+88:case 2000+46:var v=this;
this.fire('saveSnapshot');setTimeout(function(){v.fire('saveSnapshot');},0);}};function r(t,u,v){var w=this.document;if(w.getById('cke_pastebin'))return;if(u=='text'&&t.data&&t.data.$.clipboardData){var x=t.data.$.clipboardData.getData('text/plain');if(x){t.data.preventDefault();v(x);return;}}var y=this.getSelection(),z=new d.range(w),A=new h(u=='text'?'textarea':b.webkit?'body':'div',w);A.setAttribute('id','cke_pastebin');b.webkit&&A.append(w.createText('\xa0'));w.getBody().append(A);A.setStyles({position:'absolute',top:y.getStartElement().getDocumentPosition().y+'px',width:'1px',height:'1px',overflow:'hidden'});A.setStyle(this.config.contentsLangDirection=='ltr'?'left':'right','-1000px');var B=y.createBookmarks();if(u=='text'){if(c){var C=w.getBody().$.createTextRange();C.moveToElementText(A.$);C.execCommand('Paste');t.data.preventDefault();}else{w.$.designMode='off';A.$.focus();}}else{z.setStartAt(A,1);z.setEndAt(A,2);z.select(true);}window.setTimeout(function(){u=='text'&&!c&&(w.$.designMode='on');A.remove();var D;A=b.webkit&&(D=A.getFirst())&&D.is&&D.hasClass('Apple-style-span')?D:A;y.selectBookmarks(B);v(A['get'+(u=='text'?'Value':'Html')]());},0);};function s(t){if(!c||b.quirks)return;var u=t.getSelection(),v;if(u.getType()==3&&(v=u.getSelectedElement())){var w=u.getRanges()[0],x=t.document.createText('');x.insertBefore(v);w.setStartBefore(x);w.setEndAfter(v);u.selectRanges([w]);setTimeout(function(){if(v.getParent()){x.remove();u.selectElement(v);}},0);}};j.add('clipboard',{requires:['dialog','htmldataprocessor'],init:function(t){t.on('paste',function(y){var z=y.data;if(z.html)t.insertHtml(z.html);else if(z.text)t.insertText(z.text);},null,null,1000);t.on('pasteDialog',function(y){setTimeout(function(){t.openDialog('paste');},0);});function u(y,z,A,B){var C=t.lang[z];t.addCommand(z,A);t.ui.addButton(y,{label:C,command:z});if(t.addMenuItems)t.addMenuItem(z,{label:C,command:z,group:'clipboard',order:B});};u('Cut','cut',new o('cut'),1);u('Copy','copy',new o('copy'),4);u('Paste','paste',p,8);a.dialog.add('paste',a.getUrl(this.path+'dialogs/paste.js'));t.on('key',q,t);var v=t.config.forcePasteAsPlainText?'text':'html';t.on('contentDom',function(){var y=t.document.getBody();y.on(v=='text'&&c||b.webkit?'paste':'beforepaste',function(z){if(w)return;r.call(t,z,v,function(A){if(!A)return;var B={};B[v]=A;t.fire('paste',B);});});y.on('beforecut',function(){!w&&s(t);});});if(t.contextMenu){var w;function x(y){c&&(w=1);var z=t.document.$.queryCommandEnabled(y)?2:0;
w=0;return z;};t.contextMenu.addListener(function(y,z){var A=z.getCommonAncestor().isReadOnly();return{cut:!A&&x('Cut'),copy:x('Copy'),paste:!A&&(b.webkit?2:x('Paste'))};});}}});})();j.add('colorbutton',{requires:['panelbutton','floatpanel','styles'],init:function(m){var n=m.config,o=m.lang.colorButton,p;if(!b.hc){q('TextColor','fore',o.textColorTitle);q('BGColor','back',o.bgColorTitle);}function q(s,t,u){m.ui.add(s,4,{label:u,title:u,className:'cke_button_'+s.toLowerCase(),modes:{wysiwyg:1},panel:{css:m.skin.editor.css,attributes:{role:'listbox','aria-label':o.panelTitle}},onBlock:function(v,w){w.autoSize=true;w.element.addClass('cke_colorblock');w.element.setHtml(r(v,t));w.element.getDocument().getBody().setStyle('overflow','hidden');var x=w.keys,y=m.lang.dir=='rtl';x[y?37:39]='next';x[40]='next';x[9]='next';x[y?39:37]='prev';x[38]='prev';x[2000+9]='prev';x[32]='click';}});};function r(s,t){var u=[],v=n.colorButton_colors.split(','),w=v.length+(n.colorButton_enableMore?2:1),x=e.addFunction(function(D,E){if(D=='?'){var F=arguments.callee;function G(I){this.removeListener('ok',G);this.removeListener('cancel',G);I.name=='ok'&&F(this.getContentElement('picker','selectedColor').getValue(),E);};m.openDialog('colordialog',function(){this.on('ok',G);this.on('cancel',G);});return;}m.focus();s.hide();m.fire('saveSnapshot');new a.style(n['colorButton_'+E+'Style'],{color:'inherit'}).remove(m.document);if(D){var H=n['colorButton_'+E+'Style'];H.childRule=E=='back'?function(){return false;}:function(I){return I.getName()!='a';};new a.style(H,{color:D}).apply(m.document);}m.fire('saveSnapshot');});u.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="',o.auto,'" onclick="CKEDITOR.tools.callFunction(',x,",null,'",t,"');return false;\" href=\"javascript:void('",o.auto,'\')" role="option" aria-posinset="1" aria-setsize="',w,'"><table role="presentation" cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" style="background-color:#000"></span></td><td colspan=7 align=center>',o.auto,'</td></tr></table></a><table role="presentation" cellspacing=0 cellpadding=0 width="100%">');for(var y=0;y<v.length;y++){if(y%8===0)u.push('</tr><tr>');var z=v[y].split('/'),A=z[0],B=z[1]||A;if(!z[1])A='#'+A.replace(/^(.)(.)(.)$/,'$1$1$2$2$3$3');var C=m.lang.colors[B]||B;u.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="',C,'" onclick="CKEDITOR.tools.callFunction(',x,",'",A,"','",t,"'); return false;\" href=\"javascript:void('",C,'\')" role="option" aria-posinset="',y+2,'" aria-setsize="',w,'"><span class="cke_colorbox" style="background-color:#',B,'"></span></a></td>');
}if(n.colorButton_enableMore===undefined||n.colorButton_enableMore)u.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="',o.more,'" onclick="CKEDITOR.tools.callFunction(',x,",'?','",t,"');return false;\" href=\"javascript:void('",o.more,"')\"",' role="option" aria-posinset="',w,'" aria-setsize="',w,'">',o.more,'</a></td>');u.push('</tr></table>');return u.join('');};}});i.colorButton_colors='000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF';i.colorButton_foreStyle={element:'span',styles:{color:'#(color)'},overrides:[{element:'font',attributes:{color:null}}]};i.colorButton_backStyle={element:'span',styles:{'background-color':'#(color)'}};(function(){j.colordialog={init:function(m){m.addCommand('colordialog',new a.dialogCommand('colordialog'));a.dialog.add('colordialog',this.path+'dialogs/colordialog.js');}};j.add('colordialog',j.colordialog);})();j.add('contextmenu',{requires:['menu'],beforeInit:function(m){m.contextMenu=new j.contextMenu(m);m.addCommand('contextMenu',{exec:function(){m.contextMenu.show(m.document.getBody());}});}});j.contextMenu=e.createClass({$:function(m){this.id=e.getNextId();this.editor=m;this._.listeners=[];this._.functionId=e.addFunction(function(n){this._.panel.hide();m.focus();m.execCommand(n);},this);this.definition={panel:{className:m.skinClass+' cke_contextmenu',attributes:{'aria-label':m.lang.contextmenu.options}}};},_:{onMenu:function(m,n,o,p){var q=this._.menu,r=this.editor;if(q){q.hide();q.removeAll();}else{q=this._.menu=new a.menu(r,this.definition);q.onClick=e.bind(function(A){q.hide();if(A.onClick)A.onClick();else if(A.command)r.execCommand(A.command);},this);q.onEscape=function(A){var B=this.parent;if(B){B._.panel.hideChild();var C=B._.panel._.panel._.currentBlock,D=C._.focusIndex;C._.markItem(D);}else if(A==27){this.hide();r.focus();}return false;};}var s=this._.listeners,t=[],u=this.editor.getSelection(),v=u&&u.getStartElement();q.onHide=e.bind(function(){q.onHide=null;if(c){var A=r.getSelection();A&&A.unlock();}this.onHide&&this.onHide();},this);for(var w=0;w<s.length;w++){var x=s[w](v,u);if(x)for(var y in x){var z=this.editor.getMenuItem(y);if(z){z.state=x[y];q.add(z);}}}q.items.length&&q.show(m,n||(r.lang.dir=='rtl'?2:1),o,p);}},proto:{addTarget:function(m,n){if(b.opera&&!('oncontextmenu' in document.body)){var o;
m.on('mousedown',function(s){s=s.data;if(s.$.button!=2){if(s.getKeystroke()==1000+1)m.fire('contextmenu',s);return;}if(n&&(b.mac?s.$.metaKey:s.$.ctrlKey))return;var t=s.getTarget();if(!o){var u=t.getDocument();o=u.createElement('input');o.$.type='button';u.getBody().append(o);}o.setAttribute('style','position:absolute;top:'+(s.$.clientY-2)+'px;left:'+(s.$.clientX-2)+'px;width:5px;height:5px;opacity:0.01');});m.on('mouseup',function(s){if(o){o.remove();o=undefined;m.fire('contextmenu',s.data);}});}m.on('contextmenu',function(s){var t=s.data;if(n&&(b.webkit?p:b.mac?t.$.metaKey:t.$.ctrlKey))return;t.preventDefault();var u=t.getTarget().getDocument().getDocumentElement(),v=t.$.clientX,w=t.$.clientY;e.setTimeout(function(){this.show(u,null,v,w);},0,this);},this);if(b.opera)m.on('keypress',function(s){var t=s.data;if(t.$.keyCode===0)t.preventDefault();});if(b.webkit){var p,q=function(s){p=b.mac?s.data.$.metaKey:s.data.$.ctrlKey;},r=function(){p=0;};m.on('keydown',q);m.on('keyup',r);m.on('contextmenu',r);}},addListener:function(m){this._.listeners.push(m);},show:function(m,n,o,p){this.editor.focus();if(c){var q=this.editor.getSelection();q&&q.lock();}this._.onMenu(m||a.document.getDocumentElement(),n,o||0,p||0);}}});(function(){function m(o){var p=this.att,q=o&&o.hasAttribute(p)&&o.getAttribute(p)||'';if(q!==undefined)this.setValue(q);};function n(){var o;for(var p=0;p<arguments.length;p++){if(arguments[p] instanceof h){o=arguments[p];break;}}if(o){var q=this.att,r=this.getValue();if(q=='dir'){var s=o.getAttribute(q,r);if(s!=r&&o.getParent())this._.dialog._.editor.fire('dirChanged',o);}if(r)o.setAttribute(q,r);else o.removeAttribute(q,r);}};j.add('dialogadvtab',{createAdvancedTab:function(o,p){if(!p)p={id:1,dir:1,classes:1,styles:1};var q=o.lang.common,r={id:'advanced',label:q.advancedTab,title:q.advancedTab,elements:[{type:'vbox',padding:1,children:[]}]},s=[];if(p.id||p.dir){if(p.id)s.push({id:'advId',att:'id',type:'text',label:q.id,setup:m,commit:n});if(p.dir)s.push({id:'advLangDir',att:'dir',type:'select',label:q.langDir,'default':'',style:'width:100%',items:[[q.notSet,''],[q.langDirLTR,'ltr'],[q.langDirRTL,'rtl']],setup:m,commit:n});r.elements[0].children.push({type:'hbox',widths:['50%','50%'],children:[].concat(s)});}if(p.styles||p.classes){s=[];if(p.styles)s.push({id:'advStyles',att:'style',type:'text',label:q.styles,'default':'',getStyle:function(t,u){var v=this.getValue().match(new RegExp(t+'\\s*:s*([^;]*)','i'));return v?v[1]:u;},updateStyle:function(t,u){var v=this.getValue();
if(v)v=v.replace(new RegExp('\\s*'+t+'s*:[^;]*(?:$|;s*)','i'),'').replace(/^[;\s]+/,'').replace(/\s+$/,'');if(u){v&&!/;\s*$/.test(v)&&(v+='; ');v+=t+': '+u;}this.setValue(v,1);},setup:m,commit:n});if(p.classes)s.push({type:'hbox',widths:['45%','55%'],children:[{id:'advCSSClasses',att:'class',type:'text',label:q.cssClasses,'default':'',setup:m,commit:n}]});r.elements[0].children.push({type:'hbox',widths:['50%','50%'],children:[].concat(s)});}return r;}});})();(function(){j.add('div',{requires:['editingblock','domiterator','styles'],init:function(m){var n=m.lang.div;m.addCommand('creatediv',new a.dialogCommand('creatediv'));m.addCommand('editdiv',new a.dialogCommand('editdiv'));m.addCommand('removediv',{exec:function(o){var p=o.getSelection(),q=p&&p.getRanges(),r,s=p.createBookmarks(),t,u=[];function v(x){var y=new d.elementPath(x),z=y.blockLimit,A=z.is('div')&&z;if(A&&!A.getAttribute('_cke_div_added')){u.push(A);A.setAttribute('_cke_div_added');}};for(var w=0;w<q.length;w++){r=q[w];if(r.collapsed)v(p.getStartElement());else{t=new d.walker(r);t.evaluator=v;t.lastForward();}}for(w=0;w<u.length;w++)u[w].remove(true);p.selectBookmarks(s);}});m.ui.addButton('CreateDiv',{label:n.toolbar,command:'creatediv'});if(m.addMenuItems){m.addMenuItems({editdiv:{label:n.edit,command:'editdiv',group:'div',order:1},removediv:{label:n.remove,command:'removediv',group:'div',order:5}});if(m.contextMenu)m.contextMenu.addListener(function(o,p){if(!o||o.isReadOnly())return null;var q=new d.elementPath(o),r=q.blockLimit;if(r&&r.getAscendant('div',true))return{editdiv:2,removediv:2};return null;});}a.dialog.add('creatediv',this.path+'dialogs/div.js');a.dialog.add('editdiv',this.path+'dialogs/div.js');}});})();(function(){var m={toolbarFocus:{exec:function(o){var p=o._.elementsPath.idBase,q=a.document.getById(p+'0');if(q)q.focus();}}},n='<span class="cke_empty">&nbsp;</span>';j.add('elementspath',{requires:['selection'],init:function(o){var p='cke_path_'+o.name,q,r=function(){if(!q)q=a.document.getById(p);return q;},s='cke_elementspath_'+e.getNextNumber()+'_';o._.elementsPath={idBase:s,filters:[]};o.on('themeSpace',function(t){if(t.data.space=='bottom')t.data.html+='<span id="'+p+'_label" class="cke_voice_label">'+o.lang.elementsPath.eleLabel+'</span>'+'<div id="'+p+'" class="cke_path" role="group" aria-labelledby="'+p+'_label">'+n+'</div>';});o.on('selectionChange',function(t){var u=b,v=t.data.selection,w=v.getStartElement(),x=[],y=t.editor,z=y._.elementsPath.list=[],A=y._.elementsPath.filters;
while(w){var B=0;for(var C=0;C<A.length;C++){if(A[C](w)===false){B=1;break;}}if(!B){var D=z.push(w)-1,E;if(w.getAttribute('_cke_real_element_type'))E=w.getAttribute('_cke_real_element_type');else E=w.getName();var F='';if(u.opera||u.gecko&&u.mac)F+=' onkeypress="return false;"';if(u.gecko)F+=' onblur="this.style.cssText = this.style.cssText;"';var G=y.lang.elementsPath.eleTitle.replace(/%1/,E);x.unshift('<a id="',s,D,'" href="javascript:void(\'',E,'\')" tabindex="-1" title="',G,'"'+(b.gecko&&b.version<10900?' onfocus="event.preventBubble();"':'')+' hidefocus="true" '+" onkeydown=\"return CKEDITOR._.elementsPath.keydown('",y.name,"',",D,', event);"'+F," onclick=\"return CKEDITOR._.elementsPath.click('",y.name,"',",D,');"',' role="button" aria-labelledby="'+s+D+'_label">',E,'<span id="',s,D,'_label" class="cke_label">'+G+'</span>','</a>');}if(E=='body')break;w=w.getParent();}r().setHtml(x.join('')+n);});o.on('contentDomUnload',function(){q&&q.setHtml(n);});o.addCommand('elementsPathFocus',m.toolbarFocus);}});})();a._.elementsPath={click:function(m,n){var o=a.instances[m];o.focus();var p=o._.elementsPath.list[n];o.getSelection().selectElement(p);return false;},keydown:function(m,n,o){var p=k.button._.instances[n],q=a.instances[m],r=q._.elementsPath.idBase,s;o=new d.event(o);var t=q.lang.dir=='rtl';switch(o.getKeystroke()){case t?39:37:case 9:s=a.document.getById(r+(n+1));if(!s)s=a.document.getById(r+'0');s.focus();return false;case t?37:39:case 2000+9:s=a.document.getById(r+(n-1));if(!s)s=a.document.getById(r+(q._.elementsPath.list.length-1));s.focus();return false;case 27:q.focus();return false;case 13:case 32:this.click(m,n);return false;}return true;}};(function(){j.add('enterkey',{requires:['keystrokes','indent'],init:function(t){var u=t.specialKeys;u[13]=r;u[2000+13]=q;}});j.enterkey={enterBlock:function(t,u,v,w){v=v||s(t);if(!v)return;var x=v.document;if(v.checkStartOfBlock()&&v.checkEndOfBlock()){var y=new d.elementPath(v.startContainer),z=y.block;if(z&&(z.is('li')||z.getParent().is('li'))){t.execCommand('outdent');return;}}var A=u==3?'div':'p',B=v.splitBlock(A);if(!B)return;var C=B.previousBlock,D=B.nextBlock,E=B.wasStartOfBlock,F=B.wasEndOfBlock,G;if(D){G=D.getParent();if(G.is('li')){D.breakParent(G);D.move(D.getNext(),1);}}else if(C&&(G=C.getParent())&&G.is('li')){C.breakParent(G);v.moveToElementEditStart(C.getNext());C.move(C.getPrevious());}if(!E&&!F){if(D.is('li')&&(G=D.getFirst(d.walker.invisible(true)))&&G.is&&G.is('ul','ol'))(c?x.createText('\xa0'):x.createElement('br')).insertBefore(G);
if(D)v.moveToElementEditStart(D);}else{var H;if(C){if(C.is('li')||!p.test(C.getName()))H=C.clone();}else if(D)H=D.clone();if(!H)H=x.createElement(A);else if(w&&!H.is('li'))H.renameNode(A);var I=B.elementPath;if(I)for(var J=0,K=I.elements.length;J<K;J++){var L=I.elements[J];if(L.equals(I.block)||L.equals(I.blockLimit))break;if(f.$removeEmpty[L.getName()]){L=L.clone();H.moveChildren(L);H.append(L);}}if(!c)H.appendBogus();v.insertNode(H);if(c&&E&&(!F||!C.getChildCount())){v.moveToElementEditStart(F?C:H);v.select();}v.moveToElementEditStart(E&&!F?D:H);}if(!c)if(D){var M=x.createElement('span');M.setHtml('&nbsp;');v.insertNode(M);M.scrollIntoView();v.deleteContents();}else H.scrollIntoView();v.select();},enterBr:function(t,u,v,w){v=v||s(t);if(!v)return;var x=v.document,y=u==3?'div':'p',z=v.checkEndOfBlock(),A=new d.elementPath(t.getSelection().getStartElement()),B=A.block,C=B&&A.block.getName(),D=false;if(!w&&C=='li'){o(t,u,v,w);return;}if(!w&&z&&p.test(C)){x.createElement('br').insertAfter(B);if(b.gecko)x.createText('').insertAfter(B);v.setStartAt(B.getNext(),c?3:1);}else{var E;D=C=='pre';if(D&&!b.gecko)E=x.createText(c?'\r':'\n');else E=x.createElement('br');v.deleteContents();v.insertNode(E);if(!c)x.createText('\ufeff').insertAfter(E);if(z&&!c)E.getParent().appendBogus();if(!c)E.getNext().$.nodeValue='';if(c)v.setStartAt(E,4);else v.setStartAt(E.getNext(),1);if(!c){var F=null;if(!b.gecko){F=x.createElement('span');F.setHtml('&nbsp;');}else F=x.createElement('br');F.insertBefore(E.getNext());F.scrollIntoView();F.remove();}}v.collapse(true);v.select(D);}};var m=j.enterkey,n=m.enterBr,o=m.enterBlock,p=/^h[1-6]$/;function q(t){if(t.mode!='wysiwyg')return false;if(t.getSelection().getStartElement().hasAscendant('pre',true)){setTimeout(function(){o(t,t.config.enterMode,null,true);},0);return true;}else return r(t,t.config.shiftEnterMode,1);};function r(t,u,v){v=t.config.forceEnterMode||v;if(t.mode!='wysiwyg')return false;if(!u)u=t.config.enterMode;setTimeout(function(){t.fire('saveSnapshot');if(u==2||t.getSelection().getStartElement().hasAscendant('pre',1))n(t,u,null,v);else o(t,u,null,v);},0);return true;};function s(t){var u=t.getSelection().getRanges(true);for(var v=u.length-1;v>0;v--)u[v].deleteContents();return u[0];};})();(function(){var m='nbsp,gt,lt,quot',n='iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro',o='Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml',p='Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv';
function q(r,s){var t={},u=[],v={nbsp:'\xa0',shy:'­',gt:'>',lt:'<'};r=r.replace(/\b(nbsp|shy|gt|lt|amp)(?:,|$)/g,function(A,B){var C=s?'&'+B+';':v[B],D=s?v[B]:'&'+B+';';t[C]=D;u.push(C);return '';});if(!s){r=r.split(',');var w=document.createElement('div'),x;w.innerHTML='&'+r.join(';&')+';';x=w.innerHTML;w=null;for(var y=0;y<x.length;y++){var z=x.charAt(y);t[z]='&'+r[y]+';';u.push(z);}}t.regex=u.join(s?'|':'');return t;};j.add('entities',{afterInit:function(r){var s=r.config,t=r.dataProcessor,u=t&&t.htmlFilter;if(u){var v=m;if(s.entities){v+=','+n;if(s.entities_latin)v+=','+o;if(s.entities_greek)v+=','+p;if(s.entities_additional)v+=','+s.entities_additional;}var w=q(v),x='['+w.regex+']';delete w.regex;if(s.entities&&s.entities_processNumerical)x='[^ -~]|'+x;x=new RegExp(x,'g');function y(C){return s.entities_processNumerical=='force'||!w[C]?'&#'+C.charCodeAt(0)+';':w[C];};var z=q([m,'shy'].join(','),true),A=new RegExp(z.regex,'g');function B(C){return z[C];};u.addRules({text:function(C){return C.replace(A,B).replace(x,y);}});}}});})();i.entities=true;i.entities_latin=true;i.entities_greek=true;i.entities_additional='#39';(function(){function m(v,w){var x=[];if(!w)return v;else for(var y in w)x.push(y+'='+encodeURIComponent(w[y]));return v+(v.indexOf('?')!=-1?'&':'?')+x.join('&');};function n(v){v+='';var w=v.charAt(0).toUpperCase();return w+v.substr(1);};function o(v){var C=this;var w=C.getDialog(),x=w.getParentEditor();x._.filebrowserSe=C;var y=x.config['filebrowser'+n(w.getName())+'WindowWidth']||x.config.filebrowserWindowWidth||'80%',z=x.config['filebrowser'+n(w.getName())+'WindowHeight']||x.config.filebrowserWindowHeight||'70%',A=C.filebrowser.params||{};A.CKEditor=x.name;A.CKEditorFuncNum=x._.filebrowserFn;if(!A.langCode)A.langCode=x.langCode;var B=m(C.filebrowser.url,A);x.popup(B,y,z,x.config.fileBrowserWindowFeatures);};function p(v){var y=this;var w=y.getDialog(),x=w.getParentEditor();x._.filebrowserSe=y;if(!w.getContentElement(y['for'][0],y['for'][1]).getInputElement().$.value)return false;if(!w.getContentElement(y['for'][0],y['for'][1]).getAction())return false;return true;};function q(v,w,x){var y=x.params||{};y.CKEditor=v.name;y.CKEditorFuncNum=v._.filebrowserFn;if(!y.langCode)y.langCode=v.langCode;w.action=m(x.url,y);w.filebrowser=x;};function r(v,w,x,y){var z,A;for(var B in y){z=y[B];if(z.type=='hbox'||z.type=='vbox')r(v,w,x,z.children);if(!z.filebrowser)continue;if(typeof z.filebrowser=='string'){var C={action:z.type=='fileButton'?'QuickUpload':'Browse',target:z.filebrowser};
z.filebrowser=C;}if(z.filebrowser.action=='Browse'){var D=z.filebrowser.url;if(D===undefined){D=v.config['filebrowser'+n(w)+'BrowseUrl'];if(D===undefined)D=v.config.filebrowserBrowseUrl;}if(D){z.onClick=o;z.filebrowser.url=D;z.hidden=false;}}else if(z.filebrowser.action=='QuickUpload'&&z['for']){var D=z.filebrowser.url;if(D===undefined){D=v.config['filebrowser'+n(w)+'UploadUrl'];if(D===undefined)D=v.config.filebrowserUploadUrl;}if(D){var E=z.onClick;z.onClick=function(F){var G=F.sender;if(E&&E.call(G,F)===false)return false;return p.call(G,F);};z.filebrowser.url=D;z.hidden=false;q(v,x.getContents(z['for'][0]).get(z['for'][1]),z.filebrowser);}}}};function s(v,w){var x=w.getDialog(),y=w.filebrowser.target||null;v=v.replace(/#/g,'%23');if(y){var z=y.split(':'),A=x.getContentElement(z[0],z[1]);if(A){A.setValue(v);x.selectPage(z[0]);}}};function t(v,w,x){if(x.indexOf(';')!==-1){var y=x.split(';');for(var z=0;z<y.length;z++){if(t(v,w,y[z]))return true;}return false;}var A=v.getContents(w).get(x).filebrowser;return A&&A.url;};function u(v,w){var A=this;var x=A._.filebrowserSe.getDialog(),y=A._.filebrowserSe['for'],z=A._.filebrowserSe.filebrowser.onSelect;if(y)x.getContentElement(y[0],y[1]).reset();if(typeof w=='function'&&w.call(A._.filebrowserSe)===false)return;if(z&&z.call(A._.filebrowserSe,v,w)===false)return;if(typeof w=='string'&&w)alert(w);if(v)s(v,A._.filebrowserSe);};j.add('filebrowser',{init:function(v,w){v._.filebrowserFn=e.addFunction(u,v);}});a.on('dialogDefinition',function(v){var w=v.data.definition,x;for(var y in w.contents){if(x=w.contents[y]){r(v.editor,v.data.name,w,x.elements);if(x.hidden&&x.filebrowser)x.hidden=!t(w,x.id,x.filebrowser);}}});})();j.add('find',{init:function(m){var n=j.find;m.ui.addButton('Find',{label:m.lang.findAndReplace.find,command:'find'});var o=m.addCommand('find',new a.dialogCommand('find'));o.canUndo=false;m.ui.addButton('Replace',{label:m.lang.findAndReplace.replace,command:'replace'});var p=m.addCommand('replace',new a.dialogCommand('replace'));p.canUndo=false;a.dialog.add('find',this.path+'dialogs/find.js');a.dialog.add('replace',this.path+'dialogs/find.js');},requires:['styles']});i.find_highlight={element:'span',styles:{'background-color':'#004',color:'#fff'}};(function(){var m=/\.swf(?:$|\?)/i,n=e.cssLength;function o(q){var r=q.attributes;return r.type=='application/x-shockwave-flash'||m.test(r.src||'');};function p(q,r){var s=q.createFakeParserElement(r,'cke_flash','flash',true),t=s.attributes.style||'',u=r.attributes.width,v=r.attributes.height;
if(typeof u!='undefined')t=s.attributes.style=t+'width:'+n(u)+';';if(typeof v!='undefined')t=s.attributes.style=t+'height:'+n(v)+';';return s;};j.add('flash',{init:function(q){q.addCommand('flash',new a.dialogCommand('flash'));q.ui.addButton('Flash',{label:q.lang.common.flash,command:'flash'});a.dialog.add('flash',this.path+'dialogs/flash.js');q.addCss('img.cke_flash{background-image: url('+a.getUrl(this.path+'images/placeholder.png')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 80px;'+'height: 80px;'+'}');if(q.addMenuItems)q.addMenuItems({flash:{label:q.lang.flash.properties,command:'flash',group:'flash'}});q.on('doubleclick',function(r){var s=r.data.element;if(s.is('img')&&s.getAttribute('_cke_real_element_type')=='flash')r.data.dialog='flash';});if(q.contextMenu)q.contextMenu.addListener(function(r,s){if(r&&r.is('img')&&!r.isReadOnly()&&r.getAttribute('_cke_real_element_type')=='flash')return{flash:2};});},afterInit:function(q){var r=q.dataProcessor,s=r&&r.dataFilter;if(s)s.addRules({elements:{'cke:object':function(t){var u=t.attributes,v=u.classid&&String(u.classid).toLowerCase();if(!v){for(var w=0;w<t.children.length;w++){if(t.children[w].name=='cke:embed'){if(!o(t.children[w]))return null;return p(q,t);}}return null;}return p(q,t);},'cke:embed':function(t){if(!o(t))return null;return p(q,t);}}},5);},requires:['fakeobjects']});})();e.extend(i,{flashEmbedTagOnly:false,flashAddEmbedTag:true,flashConvertOnEdit:false});(function(){function m(n,o,p,q,r,s,t){var u=n.config,v=r.split(';'),w=[],x={};for(var y=0;y<v.length;y++){var z=v[y];if(z){z=z.split('/');var A={},B=v[y]=z[0];A[p]=w[y]=z[1]||B;x[B]=new a.style(t,A);x[B]._.definition.name=B;}else v.splice(y--,1);}n.ui.addRichCombo(o,{label:q.label,title:q.panelTitle,className:'cke_'+(p=='size'?'fontSize':'font'),panel:{css:n.skin.editor.css.concat(u.contentsCss),multiSelect:false,attributes:{'aria-label':q.panelTitle}},init:function(){this.startGroup(q.panelTitle);for(var C=0;C<v.length;C++){var D=v[C];this.add(D,x[D].buildPreview(),D);}},onClick:function(C){n.focus();n.fire('saveSnapshot');var D=x[C];if(this.getValue()==C)D.remove(n.document);else D.apply(n.document);n.fire('saveSnapshot');},onRender:function(){n.on('selectionChange',function(C){var D=this.getValue(),E=C.data.path,F=E.elements;for(var G=0,H;G<F.length;G++){H=F[G];for(var I in x){if(x[I].checkElementRemovable(H,true)){if(I!=D)this.setValue(I);return;}}}this.setValue('',s);},this);
}});};j.add('font',{requires:['richcombo','styles'],init:function(n){var o=n.config;m(n,'Font','family',n.lang.font,o.font_names,o.font_defaultLabel,o.font_style);m(n,'FontSize','size',n.lang.fontSize,o.fontSize_sizes,o.fontSize_defaultLabel,o.fontSize_style);}});})();i.font_names='Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif';i.font_defaultLabel='';i.font_style={element:'span',styles:{'font-family':'#(family)'},overrides:[{element:'font',attributes:{face:null}}]};i.fontSize_sizes='8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px';i.fontSize_defaultLabel='';i.fontSize_style={element:'span',styles:{'font-size':'#(size)'},overrides:[{element:'font',attributes:{size:null}}]};j.add('format',{requires:['richcombo','styles'],init:function(m){var n=m.config,o=m.lang.format,p=n.format_tags.split(';'),q={};for(var r=0;r<p.length;r++){var s=p[r];q[s]=new a.style(n['format_'+s]);q[s]._.enterMode=m.config.enterMode;}m.ui.addRichCombo('Format',{label:o.label,title:o.panelTitle,className:'cke_format',panel:{css:m.skin.editor.css.concat(n.contentsCss),multiSelect:false,attributes:{'aria-label':o.panelTitle}},init:function(){this.startGroup(o.panelTitle);for(var t in q){var u=o['tag_'+t];this.add(t,'<'+t+'>'+u+'</'+t+'>',u);}},onClick:function(t){m.focus();m.fire('saveSnapshot');q[t].apply(m.document);setTimeout(function(){m.fire('saveSnapshot');},0);},onRender:function(){m.on('selectionChange',function(t){var u=this.getValue(),v=t.data.path;for(var w in q){if(q[w].checkActive(v)){if(w!=u)this.setValue(w,m.lang.format['tag_'+w]);return;}}this.setValue('');},this);}});}});i.format_tags='p;h1;h2;h3;h4;h5;h6;pre;address;div';i.format_p={element:'p'};i.format_div={element:'div'};i.format_pre={element:'pre'};i.format_address={element:'address'};i.format_h1={element:'h1'};i.format_h2={element:'h2'};i.format_h3={element:'h3'};i.format_h4={element:'h4'};i.format_h5={element:'h5'};i.format_h6={element:'h6'};j.add('forms',{init:function(m){var n=m.lang;m.addCss('form{border: 1px dotted #FF0000;padding: 2px;}\n');m.addCss('img.cke_hidden{background-image: url('+a.getUrl(this.path+'images/hiddenfield.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 16px !important;'+'height: 16px !important;'+'}');
var o=function(q,r,s){m.addCommand(r,new a.dialogCommand(r));m.ui.addButton(q,{label:n.common[q.charAt(0).toLowerCase()+q.slice(1)],command:r});a.dialog.add(r,s);},p=this.path+'dialogs/';o('Form','form',p+'form.js');o('Checkbox','checkbox',p+'checkbox.js');o('Radio','radio',p+'radio.js');o('TextField','textfield',p+'textfield.js');o('Textarea','textarea',p+'textarea.js');o('Select','select',p+'select.js');o('Button','button',p+'button.js');o('ImageButton','imagebutton',j.getPath('image')+'dialogs/image.js');o('HiddenField','hiddenfield',p+'hiddenfield.js');if(m.addMenuItems)m.addMenuItems({form:{label:n.form.menu,command:'form',group:'form'},checkbox:{label:n.checkboxAndRadio.checkboxTitle,command:'checkbox',group:'checkbox'},radio:{label:n.checkboxAndRadio.radioTitle,command:'radio',group:'radio'},textfield:{label:n.textfield.title,command:'textfield',group:'textfield'},hiddenfield:{label:n.hidden.title,command:'hiddenfield',group:'hiddenfield'},imagebutton:{label:n.image.titleButton,command:'imagebutton',group:'imagebutton'},button:{label:n.button.title,command:'button',group:'button'},select:{label:n.select.title,command:'select',group:'select'},textarea:{label:n.textarea.title,command:'textarea',group:'textarea'}});if(m.contextMenu){m.contextMenu.addListener(function(q){if(q&&q.hasAscendant('form',true)&&!q.isReadOnly())return{form:2};});m.contextMenu.addListener(function(q){if(q&&!q.isReadOnly()){var r=q.getName();if(r=='select')return{select:2};if(r=='textarea')return{textarea:2};if(r=='input'){var s=q.getAttribute('type');if(s=='text'||s=='password')return{textfield:2};if(s=='button'||s=='submit'||s=='reset')return{button:2};if(s=='checkbox')return{checkbox:2};if(s=='radio')return{radio:2};if(s=='image')return{imagebutton:2};}if(r=='img'&&q.getAttribute('_cke_real_element_type')=='hiddenfield')return{hiddenfield:2};}});}m.on('doubleclick',function(q){var r=q.data.element;if(r.is('form'))q.data.dialog='form';else if(r.is('select'))q.data.dialog='select';else if(r.is('textarea'))q.data.dialog='textarea';else if(r.is('img')&&r.getAttribute('_cke_real_element_type')=='hiddenfield')q.data.dialog='hiddenfield';else if(r.is('input')){var s=r.getAttribute('type');switch(s){case 'text':case 'password':q.data.dialog='textfield';break;case 'button':case 'submit':case 'reset':q.data.dialog='button';break;case 'checkbox':q.data.dialog='checkbox';break;case 'radio':q.data.dialog='radio';break;case 'image':q.data.dialog='imagebutton';break;}}});},afterInit:function(m){var n=m.dataProcessor,o=n&&n.htmlFilter,p=n&&n.dataFilter;
if(c)o&&o.addRules({elements:{input:function(q){var r=q.attributes,s=r.type;if(s=='checkbox'||s=='radio')r.value=='on'&&delete r.value;}}});if(p)p.addRules({elements:{input:function(q){if(q.attributes.type=='hidden')return m.createFakeParserElement(q,'cke_hidden','hiddenfield');}}});},requires:['image','fakeobjects']});if(c)h.prototype.hasAttribute=function(m){var p=this;var n=p.$.attributes.getNamedItem(m);if(p.getName()=='input')switch(m){case 'class':return p.$.className.length>0;case 'checked':return!!p.$.checked;case 'value':var o=p.getAttribute('type');if(o=='checkbox'||o=='radio')return p.$.value!='on';break;default:}return!!(n&&n.specified);};(function(){var m={canUndo:false,exec:function(o){o.insertElement(o.document.createElement('hr'));}},n='horizontalrule';j.add(n,{init:function(o){o.addCommand(n,m);o.ui.addButton('HorizontalRule',{label:o.lang.horizontalrule,command:n});}});})();(function(){var m=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,n='{cke_protected}';function o(T){var U=T.children.length,V=T.children[U-1];while(V&&V.type==3&&!e.trim(V.value))V=T.children[--U];return V;};function p(T,U){var V=T.children,W=o(T);if(W){if((U||!c)&&W.type==1&&W.name=='br')V.pop();if(W.type==3&&m.test(W.value))V.pop();}};function q(T){var U=o(T);return!U||U.type==1&&U.name=='br'||T.name=='form'&&U.name=='input';};function r(T){p(T,true);if(q(T))if(c)T.add(new a.htmlParser.text('\xa0'));else T.add(new a.htmlParser.element('br',{}));};function s(T){p(T);if(q(T))T.add(new a.htmlParser.text('\xa0'));};var t=f,u=e.extend({},t.$block,t.$listItem,t.$tableContent);for(var v in u){if(!('br' in t[v]))delete u[v];}delete u.pre;var w={elements:{},attributeNames:[[/^on/,'_cke_pa_on']]},x={elements:{}};for(v in u)x.elements[v]=r;var y={elementNames:[[/^cke:/,''],[/^\?xml:namespace$/,'']],attributeNames:[[/^_cke_(saved|pa)_/,''],[/^_cke.*/,''],['hidefocus','']],elements:{$:function(T){var U=T.attributes;if(U){if(U.cke_temp)return false;var V=['name','href','src'],W;for(var X=0;X<V.length;X++){W='_cke_saved_'+V[X];W in U&&delete U[V[X]];}}return T;},embed:function(T){var U=T.parent;if(U&&U.name=='object'){var V=U.attributes.width,W=U.attributes.height;V&&(T.attributes.width=V);W&&(T.attributes.height=W);}},param:function(T){T.children=[];T.isEmpty=true;return T;},a:function(T){if(!(T.children.length||T.attributes.name||T.attributes._cke_saved_name))return false;},html:function(T){delete T.attributes.contenteditable;delete T.attributes['class'];},body:function(T){delete T.attributes.spellcheck;
delete T.attributes.contenteditable;},style:function(T){var U=T.children[0];U&&U.value&&(U.value=e.trim(U.value));if(!T.attributes.type)T.attributes.type='text/css';},title:function(T){var U=T.children[0];U&&(U.value=T.attributes._cke_title||'');}},attributes:{'class':function(T,U){return e.ltrim(T.replace(/(?:^|\s+)cke_[^\s]*/g,''))||false;}},comment:function(T){if(T.substr(0,n.length)==n){if(T.substr(n.length,3)=='{C}')T=T.substr(n.length+3);else T=T.substr(n.length);return new a.htmlParser.cdata(decodeURIComponent(T));}return T;}},z={elements:{}};for(v in u)z.elements[v]=s;if(c)y.attributes.style=function(T,U){return T.toLowerCase();};function A(T){T.attributes.contenteditable='false';};function B(T){delete T.attributes.contenteditable;};for(v in {input:1,textarea:1}){w.elements[v]=A;y.elements[v]=B;}var C=/<((?:a|area|img|input)[\s\S]*?\s)((href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))([^>]*)>/gi,D=/\s_cke_saved_src\s*=/,E=/(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,F=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,G=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,H=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,I=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi;function J(T){return T.replace(C,function(U,V,W,X,Y){if(X=='src'&&D.test(U))return U;else return '<'+V+W+' _cke_saved_'+W+Y+'>';});};function K(T){return T.replace(E,function(U){return '<cke:encoded>'+encodeURIComponent(U)+'</cke:encoded>';});};function L(T){return T.replace(F,function(U,V){return decodeURIComponent(V);});};function M(T){return T.replace(G,'$1cke:$2');};function N(T){return T.replace(H,'$1$2');};function O(T){return T.replace(I,'<cke:$1$2></cke:$1>');};function P(T){return T.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,'$1$2$2');};function Q(T){return T.replace(/<!--(?!{cke_protected})[\s\S]+?-->/g,function(U){return '<!--'+n+'{C}'+encodeURIComponent(U).replace(/--/g,'%2D%2D')+'-->';});};function R(T){return T.replace(/<!--\{cke_protected\}\{C\}([\s\S]+?)-->/g,function(U,V){return decodeURIComponent(V);});};function S(T,U){var V=[],W=/<\!--\{cke_temp(comment)?\}(\d*?)-->/g,X=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi].concat(U);T=T.replace(/<!--[\s\S]*?-->/g,function(Z){return '<!--{cke_tempcomment}'+(V.push(Z)-1)+'-->';});for(var Y=0;Y<X.length;Y++)T=T.replace(X[Y],function(Z){Z=Z.replace(W,function(aa,ab,ac){return V[ac];});return '<!--{cke_temp}'+(V.push(Z)-1)+'-->';});T=T.replace(W,function(Z,aa,ab){return '<!--'+n+(aa?'{C}':'')+encodeURIComponent(V[ab]).replace(/--/g,'%2D%2D')+'-->';
});return T;};j.add('htmldataprocessor',{requires:['htmlwriter'],init:function(T){var U=T.dataProcessor=new a.htmlDataProcessor(T);U.writer.forceSimpleAmpersand=T.config.forceSimpleAmpersand;U.dataFilter.addRules(w);U.dataFilter.addRules(x);U.htmlFilter.addRules(y);U.htmlFilter.addRules(z);}});a.htmlDataProcessor=function(T){var U=this;U.editor=T;U.writer=new a.htmlWriter();U.dataFilter=new a.htmlParser.filter();U.htmlFilter=new a.htmlParser.filter();};a.htmlDataProcessor.prototype={toHtml:function(T,U){T=S(T,this.editor.config.protectedSource);T=J(T);T=K(T);T=M(T);T=O(T);T=P(T);var V=new h('div');V.setHtml('a'+T);T=V.getHtml().substr(1);T=N(T);T=L(T);T=R(T);var W=a.htmlParser.fragment.fromHtml(T,U),X=new a.htmlParser.basicWriter();W.writeHtml(X,this.dataFilter);T=X.getHtml(true);T=Q(T);return T;},toDataFormat:function(T,U){var V=this.writer,W=a.htmlParser.fragment.fromHtml(T,U);V.reset();W.writeHtml(V,this.htmlFilter);return V.getHtml(true);}};})();j.add('image',{init:function(m){var n='image';a.dialog.add(n,this.path+'dialogs/image.js');m.addCommand(n,new a.dialogCommand(n));m.ui.addButton('Image',{label:m.lang.common.image,command:n});m.on('doubleclick',function(o){var p=o.data.element;if(p.is('img')&&!p.getAttribute('_cke_realelement'))o.data.dialog='image';});if(m.addMenuItems)m.addMenuItems({image:{label:m.lang.image.menu,command:'image',group:'image'}});if(m.contextMenu)m.contextMenu.addListener(function(o,p){if(!o||!o.is('img')||o.getAttribute('_cke_realelement')||o.isReadOnly())return null;return{image:2};});}});i.image_removeLinkByEmptyURL=true;(function(){var m={ol:1,ul:1},n=d.walker.whitespaces(true),o=d.walker.bookmark(false,true);function p(u,v){u.getCommand(this.name).setState(v);};function q(u){var D=this;var v=u.editor,w=u.data.path,x=w&&w.contains(m);if(x)return p.call(D,v,2);if(!D.useIndentClasses&&D.name=='indent')return p.call(D,v,2);var y=u.data.path,z=y.block||y.blockLimit;if(!z)return p.call(D,v,0);if(D.useIndentClasses){var A=z.$.className.match(D.classNameRegex),B=0;if(A){A=A[1];B=D.indentClassMap[A];}if(D.name=='outdent'&&!B||D.name=='indent'&&B==v.config.indentClasses.length)return p.call(D,v,0);return p.call(D,v,2);}else{var C=parseInt(z.getStyle(s(z)),10);if(isNaN(C))C=0;if(C<=0)return p.call(D,v,0);return p.call(D,v,2);}};function r(u,v){var x=this;x.name=v;x.useIndentClasses=u.config.indentClasses&&u.config.indentClasses.length>0;if(x.useIndentClasses){x.classNameRegex=new RegExp('(?:^|\\s+)('+u.config.indentClasses.join('|')+')(?=$|\\s)');
x.indentClassMap={};for(var w=0;w<u.config.indentClasses.length;w++)x.indentClassMap[u.config.indentClasses[w]]=w+1;}x.startDisabled=v=='outdent';};function s(u){return u.getComputedStyle('direction')=='ltr'?'margin-left':'margin-right';};function t(u){return u.type=1&&u.is('li');};r.prototype={exec:function(u){var v=this,w={};function x(M){var N=D.startContainer,O=D.endContainer;while(N&&!N.getParent().equals(M))N=N.getParent();while(O&&!O.getParent().equals(M))O=O.getParent();if(!N||!O)return;var P=N,Q=[],R=false;while(!R){if(P.equals(O))R=true;Q.push(P);P=P.getNext();}if(Q.length<1)return;var S=M.getParents(true);for(var T=0;T<S.length;T++){if(S[T].getName&&m[S[T].getName()]){M=S[T];break;}}var U=v.name=='indent'?1:-1,V=Q[0],W=Q[Q.length-1],X=j.list.listToArray(M,w),Y=X[W.getCustomData('listarray_index')].indent;for(T=V.getCustomData('listarray_index');T<=W.getCustomData('listarray_index');T++){X[T].indent+=U;var Z=X[T].parent;X[T].parent=new h(Z.getName(),Z.getDocument());}for(T=W.getCustomData('listarray_index')+1;T<X.length&&X[T].indent>Y;T++)X[T].indent+=U;var aa=M.getAttribute('dir')||M.getStyle('direction'),ab=j.list.arrayToList(X,w,null,u.config.enterMode,aa);if(v.name=='outdent'){var ac;if((ac=M.getParent())&&ac.is('li')){var ad=ab.listNode.getChildren(),ae=[],af=ad.count(),ag;for(T=af-1;T>=0;T--){if((ag=ad.getItem(T))&&ag.is&&ag.is('li'))ae.push(ag);}}}if(ab)ab.listNode.replace(M);if(ae&&ae.length)for(T=0;T<ae.length;T++){var ah=ae[T],ai=ah;while((ai=ai.getNext())&&ai.is&&ai.getName() in m){if(c&&!ah.getFirst(function(aj){return n(aj)&&o(aj);}))ah.append(D.document.createText('\xa0'));ah.append(ai);}ah.insertAfter(ac);}};function y(){var M=D.createIterator(),N=u.config.enterMode;M.enforceRealBlocks=true;M.enlargeBr=N!=2;var O;while(O=M.getNextParagraph())z(O);};function z(M){if(M.getCustomData('indent_processed'))return false;if(v.useIndentClasses){var N=M.$.className.match(v.classNameRegex),O=0;if(N){N=N[1];O=v.indentClassMap[N];}if(v.name=='outdent')O--;else O++;if(O<0)return false;O=Math.min(O,u.config.indentClasses.length);O=Math.max(O,0);var P=e.ltrim(M.$.className.replace(v.classNameRegex,''));if(O<1)M.$.className=P;else M.addClass(u.config.indentClasses[O-1]);}else{var Q=s(M),R=parseInt(M.getStyle(Q),10);if(isNaN(R))R=0;var S=u.config.indentOffset||40;R+=(v.name=='indent'?1:-1)*S;if(R<0)return false;R=Math.max(R,0);R=Math.ceil(R/S)*S;M.setStyle(Q,R?R+(u.config.indentUnit||'px'):'');if(M.getAttribute('style')==='')M.removeAttribute('style');
}h.setMarker(w,M,'indent_processed',1);return true;};var A=u.getSelection(),B=A.createBookmarks(1),C=A&&A.getRanges(1),D,E=C.createIterator();while(D=E.getNextRange()){var F=D.getCommonAncestor(),G=F;while(G&&!(G.type==1&&m[G.getName()]))G=G.getParent();if(!G){var H=D.getEnclosedNode();if(H&&H.type==1&&H.getName() in m){D.setStartAt(H,1);D.setEndAt(H,2);G=H;}}if(G&&D.startContainer.type==1&&D.startContainer.getName() in m){var I=new d.walker(D);I.evaluator=t;D.startContainer=I.next();}if(G&&D.endContainer.type==1&&D.endContainer.getName() in m){I=new d.walker(D);I.evaluator=t;D.endContainer=I.previous();}if(G){var J=G.getFirst(function(M){return M.type==1&&M.is('li');}),K=D.startContainer,L=J.equals(K)||J.contains(K);if(!(L&&(v.name=='indent'||v.useIndentClasses||parseInt(G.getStyle(s(G)),10))&&z(G)))x(G);}else y();}h.clearAllMarkers(w);u.forceNextSelectionCheck();A.selectBookmarks(B);}};j.add('indent',{init:function(u){var v=new r(u,'indent'),w=new r(u,'outdent');u.addCommand('indent',v);u.addCommand('outdent',w);u.ui.addButton('Indent',{label:u.lang.indent,command:'indent'});u.ui.addButton('Outdent',{label:u.lang.outdent,command:'outdent'});u.on('selectionChange',e.bind(q,v));u.on('selectionChange',e.bind(q,w));if(b.ie6Compat||b.ie7Compat)u.addCss('ul,ol{\tmargin-left: 0px;\tpadding-left: 40px;}');u.on('dirChanged',function(x){var y=new d.range(u.document);y.setStartBefore(x.data);y.setEndAfter(x.data);var z=new d.walker(y),A;while(A=z.next()){if(A.type==1){if(!A.equals(x.data)&&A.getDirection()){y.setStartAfter(A);z=new d.walker(y);continue;}var B=A.getStyle('margin-right'),C=A.getStyle('margin-left');B?A.setStyle('margin-left',B):A.removeStyle('margin-left');C?A.setStyle('margin-right',C):A.removeStyle('margin-right');}}});},requires:['domiterator','list']});})();(function(){function m(r,s){var t=s.block||s.blockLimit;if(!t||t.getName()=='body')return 2;return n(t,r.config.useComputedState)==this.value?1:2;};function n(r,s){s=s===undefined||s;var t;if(s)t=r.getComputedStyle('text-align');else{while(!r.hasAttribute||!(r.hasAttribute('align')||r.getStyle('text-align'))){var u=r.getParent();if(!u)break;r=u;}t=r.getStyle('text-align')||r.getAttribute('align')||'';}t&&(t=t.replace(/-moz-|-webkit-|start|auto/i,''));!t&&s&&(t=r.getComputedStyle('direction')=='rtl'?'right':'left');return t;};function o(r){var s=r.editor.getCommand(this.name);s.state=m.call(this,r.editor,r.data.path);s.fire('state');};function p(r,s,t){var v=this;v.name=s;v.value=t;var u=r.config.justifyClasses;
if(u){switch(t){case 'left':v.cssClassName=u[0];break;case 'center':v.cssClassName=u[1];break;case 'right':v.cssClassName=u[2];break;case 'justify':v.cssClassName=u[3];break;}v.cssClassRegex=new RegExp('(?:^|\\s+)(?:'+u.join('|')+')(?=$|\\s)');}};function q(r){var s=r.editor,t=new d.range(s.document);t.setStartBefore(r.data);t.setEndAfter(r.data);var u=new d.walker(t),v;while(v=u.next()){if(v.type==1){if(!v.equals(r.data)&&v.getDirection()){t.setStartAfter(v);u=new d.walker(t);continue;}var w='text-align',x=v.getStyle(w);if(x=='left')v.setStyle(w,'right');else if(x=='right')v.setStyle(w,'left');}}};p.prototype={exec:function(r){var D=this;var s=r.getSelection(),t=r.config.enterMode;if(!s)return;var u=s.createBookmarks(),v=s.getRanges(true),w=D.cssClassName,x,y,z=r.config.useComputedState;z=z===undefined||z;for(var A=v.length-1;A>=0;A--){x=v[A].createIterator();x.enlargeBr=t!=2;while(y=x.getNextParagraph()){y.removeAttribute('align');y.removeStyle('text-align');var B=w&&(y.$.className=e.ltrim(y.$.className.replace(D.cssClassRegex,''))),C=D.state==2&&(!z||n(y,true)!=D.value);if(w){if(C)y.addClass(w);else if(!B)y.removeAttribute('class');}else if(C)y.setStyle('text-align',D.value);}}r.focus();r.forceNextSelectionCheck();s.selectBookmarks(u);}};j.add('justify',{init:function(r){var s=new p(r,'justifyleft','left'),t=new p(r,'justifycenter','center'),u=new p(r,'justifyright','right'),v=new p(r,'justifyblock','justify');r.addCommand('justifyleft',s);r.addCommand('justifycenter',t);r.addCommand('justifyright',u);r.addCommand('justifyblock',v);r.ui.addButton('JustifyLeft',{label:r.lang.justify.left,command:'justifyleft'});r.ui.addButton('JustifyCenter',{label:r.lang.justify.center,command:'justifycenter'});r.ui.addButton('JustifyRight',{label:r.lang.justify.right,command:'justifyright'});r.ui.addButton('JustifyBlock',{label:r.lang.justify.block,command:'justifyblock'});r.on('selectionChange',e.bind(o,s));r.on('selectionChange',e.bind(o,u));r.on('selectionChange',e.bind(o,t));r.on('selectionChange',e.bind(o,v));r.on('dirChanged',q);},requires:['domiterator']});})();j.add('keystrokes',{beforeInit:function(m){m.keystrokeHandler=new a.keystrokeHandler(m);m.specialKeys={};},init:function(m){var n=m.config.keystrokes,o=m.config.blockedKeystrokes,p=m.keystrokeHandler.keystrokes,q=m.keystrokeHandler.blockedKeystrokes;for(var r=0;r<n.length;r++)p[n[r][0]]=n[r][1];for(r=0;r<o.length;r++)q[o[r]]=1;}});a.keystrokeHandler=function(m){var n=this;if(m.keystrokeHandler)return m.keystrokeHandler;
n.keystrokes={};n.blockedKeystrokes={};n._={editor:m};return n;};(function(){var m,n=function(p){p=p.data;var q=p.getKeystroke(),r=this.keystrokes[q],s=this._.editor;m=s.fire('key',{keyCode:q})===true;if(!m){if(r){var t={from:'keystrokeHandler'};m=s.execCommand(r,t)!==false;}if(!m){var u=s.specialKeys[q];m=u&&u(s)===true;if(!m)m=!!this.blockedKeystrokes[q];}}if(m)p.preventDefault(true);return!m;},o=function(p){if(m){m=false;p.data.preventDefault(true);}};a.keystrokeHandler.prototype={attach:function(p){p.on('keydown',n,this);if(b.opera||b.gecko&&b.mac)p.on('keypress',o,this);}};})();i.blockedKeystrokes=[1000+66,1000+73,1000+85];i.keystrokes=[[4000+121,'toolbarFocus'],[4000+122,'elementsPathFocus'],[2000+121,'contextMenu'],[1000+2000+121,'contextMenu'],[1000+90,'undo'],[1000+89,'redo'],[1000+2000+90,'redo'],[1000+76,'link'],[1000+66,'bold'],[1000+73,'italic'],[1000+85,'underline'],[4000+109,'toolbarCollapse'],[4000+48,'a11yHelp']];j.add('link',{init:function(m){m.addCommand('link',new a.dialogCommand('link'));m.addCommand('anchor',new a.dialogCommand('anchor'));m.addCommand('unlink',new a.unlinkCommand());m.ui.addButton('Link',{label:m.lang.link.toolbar,command:'link'});m.ui.addButton('Unlink',{label:m.lang.unlink,command:'unlink'});m.ui.addButton('Anchor',{label:m.lang.anchor.toolbar,command:'anchor'});a.dialog.add('link',this.path+'dialogs/link.js');a.dialog.add('anchor',this.path+'dialogs/anchor.js');m.addCss('img.cke_anchor{background-image: url('+a.getUrl(this.path+'images/anchor.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 18px !important;'+'height: 18px !important;'+'}\n'+'a.cke_anchor'+'{'+'background-image: url('+a.getUrl(this.path+'images/anchor.gif')+');'+'background-position: 0 center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'padding-left: 18px;'+'}');m.on('selectionChange',function(n){var o=m.getCommand('unlink'),p=n.data.path.lastElement&&n.data.path.lastElement.getAscendant('a',true);if(p&&p.getName()=='a'&&p.getAttribute('href'))o.setState(2);else o.setState(0);});m.on('doubleclick',function(n){var o=j.link.getSelectedLink(m)||n.data.element;if(o.is('a'))n.data.dialog=o.getAttribute('name')&&!o.getAttribute('href')?'anchor':'link';else if(o.is('img')&&o.getAttribute('_cke_real_element_type')=='anchor')n.data.dialog='anchor';});if(m.addMenuItems)m.addMenuItems({anchor:{label:m.lang.anchor.menu,command:'anchor',group:'anchor'},link:{label:m.lang.link.menu,command:'link',group:'link',order:1},unlink:{label:m.lang.unlink,command:'unlink',group:'link',order:5}});
if(m.contextMenu)m.contextMenu.addListener(function(n,o){if(!n||n.isReadOnly())return null;var p=n.is('img')&&n.getAttribute('_cke_real_element_type')=='anchor';if(!p){if(!(n=j.link.getSelectedLink(m)))return null;p=n.getAttribute('name')&&!n.getAttribute('href');}return p?{anchor:2}:{link:2,unlink:2};});},afterInit:function(m){var n=m.dataProcessor,o=n&&n.dataFilter;if(o)o.addRules({elements:{a:function(p){var q=p.attributes;if(q.name&&!q.href)return m.createFakeParserElement(p,'cke_anchor','anchor');}}});},requires:['fakeobjects']});j.link={getSelectedLink:function(m){try{var n=m.getSelection();if(n.getType()==3){var o=n.getSelectedElement();if(o.is('a'))return o;}var p=n.getRanges(true)[0];p.shrink(2);var q=p.getCommonAncestor();return q.getAscendant('a',true);}catch(r){return null;}}};a.unlinkCommand=function(){};a.unlinkCommand.prototype={exec:function(m){var n=m.getSelection(),o=n.createBookmarks(),p=n.getRanges(),q,r;for(var s=0;s<p.length;s++){q=p[s].getCommonAncestor(true);r=q.getAscendant('a',true);if(!r)continue;p[s].selectNodeContents(r);}n.selectRanges(p);m.document.$.execCommand('unlink',false,null);n.selectBookmarks(o);},startDisabled:true};e.extend(i,{linkShowAdvancedTab:true,linkShowTargetTab:true});(function(){var m={ol:1,ul:1},n=/^[\n\r\t ]*$/;j.list={listToArray:function(C,D,E,F,G){if(!m[C.getName()])return[];if(!F)F=0;if(!E)E=[];for(var H=0,I=C.getChildCount();H<I;H++){var J=C.getChild(H);if(J.$.nodeName.toLowerCase()!='li')continue;var K={parent:C,indent:F,element:J,contents:[]};if(!G){K.grandparent=C.getParent();if(K.grandparent&&K.grandparent.$.nodeName.toLowerCase()=='li')K.grandparent=K.grandparent.getParent();}else K.grandparent=G;if(D)h.setMarker(D,J,'listarray_index',E.length);E.push(K);for(var L=0,M=J.getChildCount(),N;L<M;L++){N=J.getChild(L);if(N.type==1&&m[N.getName()])j.list.listToArray(N,D,E,F+1,K.grandparent);else K.contents.push(N);}}return E;},arrayToList:function(C,D,E,F,G){if(!E)E=0;if(!C||C.length<E+1)return null;var H=C[E].parent.getDocument(),I=new d.documentFragment(H),J=null,K=E,L=Math.max(C[E].indent,0),M=null,N=F==1?'p':'div';while(1){var O=C[K];if(O.indent==L){if(!J||C[K].parent.getName()!=J.getName()){J=C[K].parent.clone(false,1);I.append(J);}M=J.append(O.element.clone(0,1));for(var P=0;P<O.contents.length;P++)M.append(O.contents[P].clone(1,1));K++;}else if(O.indent==Math.max(L,0)+1){var Q=j.list.arrayToList(C,null,K,F);M.append(Q.listNode);K=Q.nextIndex;}else if(O.indent==-1&&!E&&O.grandparent){M;if(m[O.grandparent.getName()])M=O.element.clone(false,true);
else if(G||O.element.hasAttributes()||F!=2&&O.grandparent.getName()!='td'){M=H.createElement(N);O.element.copyAttributes(M,{type:1,value:1});G&&M.setAttribute('dir',G);if(!G&&F==2&&!M.hasAttributes())M=new d.documentFragment(H);}else M=new d.documentFragment(H);for(P=0;P<O.contents.length;P++)M.append(O.contents[P].clone(1,1));if(M.type==11&&K!=C.length-1){if(M.getLast()&&M.getLast().type==1&&M.getLast().getAttribute('type')=='_moz')M.getLast().remove();M.appendBogus();}if(M.type==1&&M.getName()==N&&M.$.firstChild){M.trim();var R=M.getFirst();if(R.type==1&&R.isBlockBoundary()){var S=new d.documentFragment(H);M.moveChildren(S);M=S;}}var T=M.$.nodeName.toLowerCase();if(!c&&(T=='div'||T=='p'))M.appendBogus();I.append(M);J=null;K++;}else return null;if(C.length<=K||Math.max(C[K].indent,0)<L)break;}if(D){var U=I.getFirst();while(U){if(U.type==1)h.clearMarkers(D,U);U=U.getNextSourceNode();}}return{listNode:I,nextIndex:K};}};function o(C,D){C.getCommand(this.name).setState(D);};function p(C){var D=C.data.path,E=D.blockLimit,F=D.elements,G;for(var H=0;H<F.length&&(G=F[H])&&!G.equals(E);H++){if(m[F[H].getName()])return o.call(this,C.editor,this.type==F[H].getName()?1:2);}return o.call(this,C.editor,2);};function q(C,D,E,F){var G=j.list.listToArray(D.root,E),H=[];for(var I=0;I<D.contents.length;I++){var J=D.contents[I];J=J.getAscendant('li',true);if(!J||J.getCustomData('list_item_processed'))continue;H.push(J);h.setMarker(E,J,'list_item_processed',true);}var K=D.root,L=K.getDocument().createElement(this.type);K.copyAttributes(L,{start:1,type:1});L.removeStyle('list-style-type');for(I=0;I<H.length;I++){var M=H[I].getCustomData('listarray_index');G[M].parent=L;}var N=j.list.arrayToList(G,E,null,C.config.enterMode),O,P=N.listNode.getChildCount();for(I=0;I<P&&(O=N.listNode.getChild(I));I++){if(O.getName()==this.type)F.push(O);}N.listNode.replace(D.root);};var r=/^h[1-6]$/;function s(C,D,E){var F=D.contents,G=D.root.getDocument(),H=[];if(F.length==1&&F[0].equals(D.root)){var I=G.createElement('div');F[0].moveChildren&&F[0].moveChildren(I);F[0].append(I);F[0]=I;}var J=D.contents[0].getParent();for(var K=0;K<F.length;K++)J=J.getCommonAncestor(F[K].getParent());var L=C.config.useComputedState,M,N;L=L===undefined||L;for(K=0;K<F.length;K++){var O=F[K],P;while(P=O.getParent()){if(P.equals(J)){H.push(O);if(!N&&O.getDirection())N=1;var Q=O.getDirection(L);if(M!==null)if(M&&M!=Q)M=null;else M=Q;break;}O=P;}}if(H.length<1)return;var R=H[H.length-1].getNext(),S=G.createElement(this.type);
E.push(S);var T,U;while(H.length){T=H.shift();U=G.createElement('li');if(T.is('pre')||r.test(T.getName()))T.appendTo(U);else{if(M&&T.getDirection()){T.removeStyle('direction');T.removeAttribute('dir');}T.copyAttributes(U);T.moveChildren(U);T.remove();}U.appendTo(S);}if(M&&N)S.setAttribute('dir',M);if(R)S.insertBefore(R);else S.appendTo(J);};function t(C,D,E){var F=j.list.listToArray(D.root,E),G=[];for(var H=0;H<D.contents.length;H++){var I=D.contents[H];I=I.getAscendant('li',true);if(!I||I.getCustomData('list_item_processed'))continue;G.push(I);h.setMarker(E,I,'list_item_processed',true);}var J=null;for(H=0;H<G.length;H++){var K=G[H].getCustomData('listarray_index');F[K].indent=-1;J=K;}for(H=J+1;H<F.length;H++){if(F[H].indent>F[H-1].indent+1){var L=F[H-1].indent+1-F[H].indent,M=F[H].indent;while(F[H]&&F[H].indent>=M){F[H].indent+=L;H++;}H--;}}var N=j.list.arrayToList(F,E,null,C.config.enterMode,D.root.getAttribute('dir')),O=N.listNode,P,Q;function R(S){if((P=O[S?'getFirst':'getLast']())&&!(P.is&&P.isBlockBoundary())&&(Q=D.root[S?'getPrevious':'getNext'](d.walker.whitespaces(true)))&&!(Q.is&&Q.isBlockBoundary({br:1})))C.document.createElement('br')[S?'insertBefore':'insertAfter'](P);};R(true);R();O.replace(D.root);};function u(C,D){this.name=C;this.type=D;};u.prototype={exec:function(C){C.focus();var D=C.document,E=C.getSelection(),F=E&&E.getRanges(true);if(!F||F.length<1)return;if(this.state==2){var G=D.getBody();G.trim();if(!G.getFirst()){var H=D.createElement(C.config.enterMode==1?'p':C.config.enterMode==3?'div':'br');H.appendTo(G);F=new d.rangeList([new d.range(D)]);if(H.is('br')){F[0].setStartBefore(H);F[0].setEndAfter(H);}else F[0].selectNodeContents(H);E.selectRanges(F);}else{var I=F.length==1&&F[0],J=I&&I.getEnclosedNode();if(J&&J.is&&this.type==J.getName())o.call(this,C,1);}}var K=E.createBookmarks(true),L=[],M={},N=F.createIterator(),O=0;while((I=N.getNextRange())&&++O){var P=I.getBoundaryNodes(),Q=P.startNode,R=P.endNode;if(Q.type==1&&Q.getName()=='td')I.setStartAt(P.startNode,1);if(R.type==1&&R.getName()=='td')I.setEndAt(P.endNode,2);var S=I.createIterator(),T;S.forceBrBreak=this.state==2;while(T=S.getNextParagraph()){if(T.getCustomData('list_block'))continue;else h.setMarker(M,T,'list_block',1);var U=new d.elementPath(T),V=U.elements,W=V.length,X=null,Y=0,Z=U.blockLimit,aa;for(var ab=W-1;ab>=0&&(aa=V[ab]);ab--){if(m[aa.getName()]&&Z.contains(aa)){Z.removeCustomData('list_group_object_'+O);var ac=aa.getCustomData('list_group_object');if(ac)ac.contents.push(T);
else{ac={root:aa,contents:[T]};L.push(ac);h.setMarker(M,aa,'list_group_object',ac);}Y=1;break;}}if(Y)continue;var ad=Z;if(ad.getCustomData('list_group_object_'+O))ad.getCustomData('list_group_object_'+O).contents.push(T);else{ac={root:ad,contents:[T]};h.setMarker(M,ad,'list_group_object_'+O,ac);L.push(ac);}}}var ae=[];while(L.length>0){ac=L.shift();if(this.state==2){if(m[ac.root.getName()])q.call(this,C,ac,M,ae);else s.call(this,C,ac,ae);}else if(this.state==1&&m[ac.root.getName()])t.call(this,C,ac,M);}for(ab=0;ab<ae.length;ab++){X=ae[ab];var af,ag=this;(af=function(ah){var ai=X[ah?'getPrevious':'getNext'](d.walker.whitespaces(true));if(ai&&ai.getName&&ai.getName()==ag.type){ai.remove();ai.moveChildren(X,ah);}})();af(1);}h.clearAllMarkers(M);E.selectBookmarks(K);C.focus();}};var v=f,w=/[\t\r\n ]*(?:&nbsp;|\xa0)$/;function x(C,D){var E,F=C.children,G=F.length;for(var H=0;H<G;H++){E=F[H];if(E.name&&E.name in D)return H;}return G;};function y(C){return function(D){var E=D.children,F=x(D,v.$list),G=E[F],H=G&&G.previous,I;if(H&&(H.name&&H.name=='br'||H.value&&(I=H.value.match(w)))){var J=H;if(!(I&&I.index)&&J==E[0])E[0]=C||c?new a.htmlParser.text('\xa0'):new a.htmlParser.element('br',{});else if(J.name=='br')E.splice(F-1,1);else J.value=J.value.replace(w,'');}};};var z={elements:{}};for(var A in v.$listItem)z.elements[A]=y();var B={elements:{}};for(A in v.$listItem)B.elements[A]=y(true);j.add('list',{init:function(C){var D=new u('numberedlist','ol'),E=new u('bulletedlist','ul');C.addCommand('numberedlist',D);C.addCommand('bulletedlist',E);C.ui.addButton('NumberedList',{label:C.lang.numberedlist,command:'numberedlist'});C.ui.addButton('BulletedList',{label:C.lang.bulletedlist,command:'bulletedlist'});C.on('selectionChange',e.bind(p,D));C.on('selectionChange',e.bind(p,E));},afterInit:function(C){var D=C.dataProcessor;if(D){D.dataFilter.addRules(z);D.htmlFilter.addRules(B);}},requires:['domiterator']});})();(function(){j.liststyle={requires:['dialog'],init:function(m){m.addCommand('numberedListStyle',new a.dialogCommand('numberedListStyle'));a.dialog.add('numberedListStyle',this.path+'dialogs/liststyle.js');m.addCommand('bulletedListStyle',new a.dialogCommand('bulletedListStyle'));a.dialog.add('bulletedListStyle',this.path+'dialogs/liststyle.js');if(m.addMenuItems){m.addMenuGroup('list',108);m.addMenuItems({numberedlist:{label:m.lang.list.numberedTitle,group:'list',command:'numberedListStyle'},bulletedlist:{label:m.lang.list.bulletedTitle,group:'list',command:'bulletedListStyle'}});
}if(m.contextMenu)m.contextMenu.addListener(function(n,o){if(!n||n.isReadOnly())return null;while(n){var p=n.getName();if(p=='ol')return{numberedlist:2};else if(p=='ul')return{bulletedlist:2};n=n.getParent();}return null;});}};j.add('liststyle',j.liststyle);})();(function(){function m(s){if(!s||s.type!=1||s.getName()!='form')return[];var t=[],u=['style','className'];for(var v=0;v<u.length;v++){var w=u[v],x=s.$.elements.namedItem(w);if(x){var y=new h(x);t.push([y,y.nextSibling]);y.remove();}}return t;};function n(s,t){if(!s||s.type!=1||s.getName()!='form')return;if(t.length>0)for(var u=t.length-1;u>=0;u--){var v=t[u][0],w=t[u][1];if(w)v.insertBefore(w);else v.appendTo(s);}};function o(s,t){var u=m(s),v={},w=s.$;if(!t){v['class']=w.className||'';w.className='';}v.inline=w.style.cssText||'';if(!t)w.style.cssText='position: static; overflow: visible';n(u);return v;};function p(s,t){var u=m(s),v=s.$;if('class' in t)v.className=t['class'];if('inline' in t)v.style.cssText=t.inline;n(u);};function q(s){var t=a.instances;for(var u in t){var v=t[u];if(v.mode=='wysiwyg'){var w=v.document.getBody();w.setAttribute('contentEditable',false);w.setAttribute('contentEditable',true);}}if(s.focusManager.hasFocus){s.toolbox.focus();s.focus();}};function r(s){if(!c||b.version>6)return null;var t=h.createFromHtml('<iframe frameborder="0" tabindex="-1" src="javascript:void((function(){document.open();'+(b.isCustomDomain()?"document.domain='"+this.getDocument().$.domain+"';":'')+'document.close();'+'})())"'+' style="display:block;position:absolute;z-index:-1;'+'progid:DXImageTransform.Microsoft.Alpha(opacity=0);'+'"></iframe>');return s.append(t,true);};j.add('maximize',{init:function(s){var t=s.lang,u=a.document,v=u.getWindow(),w,x,y,z;function A(){var C=v.getViewPaneSize();z&&z.setStyles({width:C.width+'px',height:C.height+'px'});s.resize(C.width,C.height,null,true);};var B=2;s.addCommand('maximize',{modes:{wysiwyg:1,source:1},editorFocus:false,exec:function(){var C=s.container.getChild(1),D=s.getThemeSpace('contents');if(s.mode=='wysiwyg'){var E=s.getSelection();w=E&&E.getRanges();x=v.getScrollPosition();}else{var F=s.textarea.$;w=!c&&[F.selectionStart,F.selectionEnd];x=[F.scrollLeft,F.scrollTop];}if(this.state==2){v.on('resize',A);y=v.getScrollPosition();var G=s.container;while(G=G.getParent()){G.setCustomData('maximize_saved_styles',o(G));G.setStyle('z-index',s.config.baseFloatZIndex-1);}D.setCustomData('maximize_saved_styles',o(D,true));C.setCustomData('maximize_saved_styles',o(C,true));
var H=v.getViewPaneSize(),I={overflow:'hidden',width:(b.opera?H.width:0)+'px',height:(b.opera?H.height-16:0)+'px'};if(c)u.$.documentElement.style.overflow=u.getBody().$.style.overflow='hidden';else u.getBody().setStyles(I);if(b.opera)u.getBody().getParent().setStyles(I);c?setTimeout(function(){v.$.scrollTo(0,0);},0):v.$.scrollTo(0,0);C.setStyle('position','absolute');C.$.offsetLeft;C.setStyles({'z-index':s.config.baseFloatZIndex-1,left:'0px',top:'0px'});z=r(C);C.addClass('cke_maximized');A();var J=C.getDocumentPosition();C.setStyles({left:-1*J.x+'px',top:-1*J.y+'px'});b.gecko&&q(s);}else if(this.state==1){v.removeListener('resize',A);var K=[D,C];for(var L=0;L<K.length;L++){p(K[L],K[L].getCustomData('maximize_saved_styles'));K[L].removeCustomData('maximize_saved_styles');}G=s.container;while(G=G.getParent()){p(G,G.getCustomData('maximize_saved_styles'));G.removeCustomData('maximize_saved_styles');}c?setTimeout(function(){v.$.scrollTo(y.x,y.y);},0):v.$.scrollTo(y.x,y.y);C.removeClass('cke_maximized');if(z){z.remove();z=null;}s.fire('resize');}this.toggleState();var M=this.uiItems[0],N=this.state==2?t.maximize:t.minimize,O=s.element.getDocument().getById(M._.id);O.getChild(1).setHtml(N);O.setAttribute('title',N);O.setAttribute('href','javascript:void("'+N+'");');if(s.mode=='wysiwyg'){if(w){b.gecko&&q(s);s.getSelection().selectRanges(w);var P=s.getSelection().getStartElement();P&&P.scrollIntoView(true);}else v.$.scrollTo(x.x,x.y);}else{if(w){F.selectionStart=w[0];F.selectionEnd=w[1];}F.scrollLeft=x[0];F.scrollTop=x[1];}w=x=null;B=this.state;},canUndo:false});s.ui.addButton('Maximize',{label:t.maximize,command:'maximize'});s.on('mode',function(){var C=s.getCommand('maximize');C.setState(C.state==0?0:B);},null,null,100);}});})();j.add('newpage',{init:function(m){m.addCommand('newpage',{modes:{wysiwyg:1,source:1},exec:function(n){var o=this;n.setData(n.config.newpage_html||'',function(){setTimeout(function(){n.fire('afterCommandExec',{name:o.name,command:o});},200);});n.focus();},async:true});m.ui.addButton('NewPage',{label:m.lang.newPage,command:'newpage'});}});j.add('pagebreak',{init:function(m){m.addCommand('pagebreak',j.pagebreakCmd);m.ui.addButton('PageBreak',{label:m.lang.pagebreak,command:'pagebreak'});m.addCss('img.cke_pagebreak{background-image: url('+a.getUrl(this.path+'images/pagebreak.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'clear: both;'+'display: block;'+'float: none;'+'width:100% !important; _width:99.9% !important;'+'border-top: #999999 1px dotted;'+'border-bottom: #999999 1px dotted;'+'height: 5px !important;'+'page-break-after: always;'+'}');
},afterInit:function(m){var n=m.dataProcessor,o=n&&n.dataFilter;if(o)o.addRules({elements:{div:function(p){var q=p.attributes,r=q&&q.style,s=r&&p.children.length==1&&p.children[0],t=s&&s.name=='span'&&s.attributes.style;if(t&&/page-break-after\s*:\s*always/i.test(r)&&/display\s*:\s*none/i.test(t)){var u=m.createFakeParserElement(p,'cke_pagebreak','div'),v=m.lang.pagebreakAlt;u.attributes.alt=v;u.attributes['aria-label']=v;return u;}}}});},requires:['fakeobjects']});j.pagebreakCmd={exec:function(m){var n=m.lang.pagebreakAlt,o=h.createFromHtml('<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>');o=m.createFakeElement(o,'cke_pagebreak','div');o.setAttribute('alt',n);o.setAttribute('aria-label',n);var p=m.getSelection().getRanges(true);m.fire('saveSnapshot');for(var q,r=p.length-1;r>=0;r--){q=p[r];if(r<p.length-1)o=o.clone(true);q.splitBlock('p');q.insertNode(o);if(r==p.length-1){q.moveToPosition(o,4);q.select();}var s=o.getPrevious();if(s&&f[s.getName()].div)o.move(s);}m.fire('saveSnapshot');}};(function(){j.add('pastefromword',{init:function(m){var n=0,o=function(){setTimeout(function(){n=0;},0);};m.addCommand('pastefromword',{canUndo:false,exec:function(){n=1;if(m.execCommand('paste')===false)m.on('dialogHide',function(p){p.removeListener();o();});else o();}});m.ui.addButton('PasteFromWord',{label:m.lang.pastefromword.toolbar,command:'pastefromword'});m.on('paste',function(p){var q=p.data,r;if((r=q.html)&&(n||/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(r))){var s=this.loadFilterRules(function(){if(s)m.fire('paste',q);else if(!m.config.pasteFromWordPromptCleanup||n||confirm(m.lang.pastefromword.confirmCleanup))q.html=a.cleanWord(r,m);});s&&p.cancel();}},this);},loadFilterRules:function(m){var n=a.cleanWord;if(n)m();else{var o=a.getUrl(i.pasteFromWordCleanupFile||this.path+'filter/default.js');a.scriptLoader.load(o,m,null,false,true);}return!n;}});})();(function(){var m={exec:function(p){var q=e.tryThese(function(){var r=window.clipboardData.getData('Text');if(!r)throw 0;return r;});if(!q){p.openDialog('pastetext');return false;}else p.fire('paste',{text:q});return true;}};function n(p,q){if(c){var r=p.selection;if(r.type=='Control')r.clear();r.createRange().pasteHTML(q);}else p.execCommand('inserthtml',false,q);};j.add('pastetext',{init:function(p){var q='pastetext',r=p.addCommand(q,m);p.ui.addButton('PasteText',{label:p.lang.pasteText.button,command:q});a.dialog.add(q,a.getUrl(this.path+'dialogs/pastetext.js'));
if(p.config.forcePasteAsPlainText)p.on('beforeCommandExec',function(s){if(s.data.name=='paste'){p.execCommand('pastetext');s.cancel();}},null,null,0);},requires:['clipboard']});function o(p,q,r,s){while(r--)j.enterkey[q==2?'enterBr':'enterBlock'](p,q,null,s);};a.editor.prototype.insertText=function(p){this.focus();this.fire('saveSnapshot');var q=this.getSelection().getStartElement().hasAscendant('pre',true)?2:this.config.enterMode,r=q==2,s=this.document.$,t=this,u;p=e.htmlEncode(p.replace(/\r\n|\r/g,'\n'));var v=0;p.replace(/\n+/g,function(w,x){u=p.substring(v,x);v=x+w.length;u.length&&n(s,u);var y=w.length,z=r?0:Math.floor(y/2),A=r?y:y%2;o(t,q,z);o(t,2,A,r?false:true);});u=p.substring(v,p.length);u.length&&n(s,u);this.fire('saveSnapshot');};})();j.add('popup');e.extend(a.editor.prototype,{popup:function(m,n,o,p){n=n||'80%';o=o||'70%';if(typeof n=='string'&&n.length>1&&n.substr(n.length-1,1)=='%')n=parseInt(window.screen.width*parseInt(n,10)/100,10);if(typeof o=='string'&&o.length>1&&o.substr(o.length-1,1)=='%')o=parseInt(window.screen.height*parseInt(o,10)/100,10);if(n<640)n=640;if(o<420)o=420;var q=parseInt((window.screen.height-o)/2,10),r=parseInt((window.screen.width-n)/2,10);p=(p||'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes')+',width='+n+',height='+o+',top='+q+',left='+r;var s=window.open('',null,p,true);if(!s)return false;try{s.moveTo(r,q);s.resizeTo(n,o);s.focus();s.location.href=m;}catch(t){s=window.open(m,null,p,true);}return true;}});(function(){var m={modes:{wysiwyg:1,source:1},canUndo:false,exec:function(o){var p,q=o.config,r=q.baseHref?'<base href="'+q.baseHref+'"/>':'',s=b.isCustomDomain();if(q.fullPage)p=o.getData().replace(/<head>/,'$&'+r).replace(/[^>]*(?=<\/title>)/,o.lang.preview);else{var t='<body ',u=o.document&&o.document.getBody();if(u){if(u.getAttribute('id'))t+='id="'+u.getAttribute('id')+'" ';if(u.getAttribute('class'))t+='class="'+u.getAttribute('class')+'" ';}t+='>';p=o.config.docType+'<html dir="'+o.config.contentsLangDirection+'">'+'<head>'+r+'<title>'+o.lang.preview+'</title>'+e.buildStyleHtml(o.config.contentsCss)+'</head>'+t+o.getData()+'</body></html>';}var v=640,w=420,x=80;try{var y=window.screen;v=Math.round(y.width*0.8);w=Math.round(y.height*0.7);x=Math.round(y.width*0.1);}catch(B){}var z='';if(s){window._cke_htmlToLoad=p;z='javascript:void( (function(){document.open();document.domain="'+document.domain+'";'+'document.write( window.opener._cke_htmlToLoad );'+'document.close();'+'window.opener._cke_htmlToLoad = null;'+'})() )';
}var A=window.open(z,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+v+',height='+w+',left='+x);if(!s){A.document.open();A.document.write(p);A.document.close();}}},n='preview';j.add(n,{init:function(o){o.addCommand(n,m);o.ui.addButton('Preview',{label:o.lang.preview,command:n});}});})();j.add('print',{init:function(m){var n='print',o=m.addCommand(n,j.print);m.ui.addButton('Print',{label:m.lang.print,command:n});}});j.print={exec:function(m){if(b.opera)return;else if(b.gecko)m.window.$.print();else m.document.$.execCommand('Print');},canUndo:false,modes:{wysiwyg:!b.opera}};j.add('removeformat',{requires:['selection'],init:function(m){m.addCommand('removeFormat',j.removeformat.commands.removeformat);m.ui.addButton('RemoveFormat',{label:m.lang.removeFormat,command:'removeFormat'});m._.removeFormat={filters:[]};}});j.removeformat={commands:{removeformat:{exec:function(m){var n=m._.removeFormatRegex||(m._.removeFormatRegex=new RegExp('^(?:'+m.config.removeFormatTags.replace(/,/g,'|')+')$','i')),o=m._.removeAttributes||(m._.removeAttributes=m.config.removeFormatAttributes.split(',')),p=j.removeformat.filter,q=m.getSelection().getRanges(1),r=q.createIterator(),s;while(s=r.getNextRange()){if(s.collapsed)continue;s.enlarge(1);var t=s.createBookmark(),u=t.startNode,v=t.endNode,w=function(z){var A=new d.elementPath(z),B=A.elements;for(var C=1,D;D=B[C];C++){if(D.equals(A.block)||D.equals(A.blockLimit))break;if(n.test(D.getName())&&p(m,D))z.breakParent(D);}};w(u);w(v);var x=u.getNextSourceNode(true,1);while(x){if(x.equals(v))break;var y=x.getNextSourceNode(false,1);if(!(x.getName()=='img'&&x.getAttribute('_cke_realelement'))&&p(m,x))if(n.test(x.getName()))x.remove(1);else{x.removeAttributes(o);m.fire('removeFormatCleanup',x);}x=y;}s.moveToBookmark(t);}m.getSelection().selectRanges(q);}}},filter:function(m,n){var o=m._.removeFormat.filters;for(var p=0;p<o.length;p++){if(o[p](n)===false)return false;}return true;}};a.editor.prototype.addRemoveFormatFilter=function(m){this._.removeFormat.filters.push(m);};i.removeFormatTags='b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var';i.removeFormatAttributes='class,style,lang,width,height,align,hspace,valign';j.add('resize',{init:function(m){var n=m.config;!n.resize_dir&&(n.resize_dir='both');n.resize_maxWidth==undefined&&(n.resize_maxWidth=3000);n.resize_maxHeight==undefined&&(n.resize_maxHeight=3000);n.resize_minWidth==undefined&&(n.resize_minWidth=750);
n.resize_minHeight==undefined&&(n.resize_minHeight=250);if(n.resize_enabled!==false){var o=null,p,q,r=(n.resize_dir=='both'||n.resize_dir=='horizontal')&&n.resize_minWidth!=n.resize_maxWidth,s=(n.resize_dir=='both'||n.resize_dir=='vertical')&&n.resize_minHeight!=n.resize_maxHeight;function t(w){var x=w.data.$.screenX-p.x,y=w.data.$.screenY-p.y,z=q.width,A=q.height,B=z+x*(m.lang.dir=='rtl'?-1:1),C=A+y;if(r)z=Math.max(n.resize_minWidth,Math.min(B,n.resize_maxWidth));if(s)A=Math.max(n.resize_minHeight,Math.min(C,n.resize_maxHeight));m.resize(z,A);};function u(w){a.document.removeListener('mousemove',t);a.document.removeListener('mouseup',u);if(m.document){m.document.removeListener('mousemove',t);m.document.removeListener('mouseup',u);}};var v=e.addFunction(function(w){if(!o)o=m.getResizable();q={width:o.$.offsetWidth||0,height:o.$.offsetHeight||0};p={x:w.screenX,y:w.screenY};n.resize_minWidth>q.width&&(n.resize_minWidth=q.width);n.resize_minHeight>q.height&&(n.resize_minHeight=q.height);a.document.on('mousemove',t);a.document.on('mouseup',u);if(m.document){m.document.on('mousemove',t);m.document.on('mouseup',u);}});m.on('destroy',function(){e.removeFunction(v);});m.on('themeSpace',function(w){if(w.data.space=='bottom'){var x='';if(r&&!s)x=' cke_resizer_horizontal';if(!r&&s)x=' cke_resizer_vertical';w.data.html+='<div class="cke_resizer'+x+'"'+' title="'+e.htmlEncode(m.lang.resize)+'"'+' onmousedown="CKEDITOR.tools.callFunction('+v+', event)"'+'></div>';}},m,null,100);}}});(function(){var m={modes:{wysiwyg:1,source:1},exec:function(o){var p=o.element.$.form;if(p)try{p.submit();}catch(q){if(p.submit.click)p.submit.click();}}},n='save';j.add(n,{init:function(o){var p=o.addCommand(n,m);p.modes={wysiwyg:!!o.element.$.form};o.ui.addButton('Save',{label:o.lang.save,command:n});}});})();(function(){var m='scaytcheck',n='';function o(t,u){var v=0,w;for(w in u){if(u[w]==t){v=1;break;}}return v;};var p=function(){var t=this,u=function(){var y=t.config,z={};z.srcNodeRef=t.document.getWindow().$.frameElement;z.assocApp='CKEDITOR.'+a.version+'@'+a.revision;z.customerid=y.scayt_customerid||'1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2';z.customDictionaryIds=y.scayt_customDictionaryIds||'';z.userDictionaryName=y.scayt_userDictionaryName||'';z.sLang=y.scayt_sLang||'en_US';z.onLoad=function(){if(!(c&&b.version<8))this.addStyle(this.selectorCss(),'padding-bottom: 2px !important;');if(t.focusManager.hasFocus&&!q.isControlRestored(t))this.focus();};z.onBeforeChange=function(){if(q.getScayt(t)&&!t.checkDirty())setTimeout(function(){t.resetDirty();
},0);};var A=window.scayt_custom_params;if(typeof A=='object')for(var B in A)z[B]=A[B];if(q.getControlId(t))z.id=q.getControlId(t);var C=new window.scayt(z);C.afterMarkupRemove.push(function(J){new h(J,C.document).mergeSiblings();});var D=q.instances[t.name];if(D){C.sLang=D.sLang;C.option(D.option());C.paused=D.paused;}q.instances[t.name]=C;var E='scaytButton',F=window.scayt.uiTags,G=[];for(var H=0,I=4;H<I;H++)G.push(F[H]&&q.uiTabs[H]);q.uiTabs=G;try{C.setDisabled(q.isPaused(t)===false);}catch(J){}t.fire('showScaytState');};t.on('contentDom',u);t.on('contentDomUnload',function(){var y=a.document.getElementsByTag('script'),z=/^dojoIoScript(\d+)$/i,A=/^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i;for(var B=0;B<y.count();B++){var C=y.getItem(B),D=C.getId(),E=C.getAttribute('src');if(D&&E&&D.match(z)&&E.match(A))C.remove();}});t.on('beforeCommandExec',function(y){if((y.data.name=='source'||y.data.name=='newpage')&&t.mode=='wysiwyg'){var z=q.getScayt(t);if(z){q.setPaused(t,!z.disabled);q.setControlId(t,z.id);z.destroy(true);delete q.instances[t.name];}}else if(y.data.name=='source'&&t.mode=='source')q.markControlRestore(t);});t.on('afterCommandExec',function(y){if(!q.isScaytEnabled(t))return;if(t.mode=='wysiwyg'&&(y.data.name=='undo'||y.data.name=='redo'))window.setTimeout(function(){q.getScayt(t).refresh();},10);});t.on('destroy',function(y){var z=y.editor,A=q.getScayt(z);if(!A)return;delete q.instances[z.name];q.setControlId(z,A.id);A.destroy(true);});t.on('afterSetData',function(){if(q.isScaytEnabled(t))window.setTimeout(function(){var y=q.getScayt(t);y&&y.refresh();},10);});t.on('insertElement',function(){var y=q.getScayt(t);if(q.isScaytEnabled(t)){if(c)t.getSelection().unlock(true);window.setTimeout(function(){y.focus();y.refresh();},10);}},this,null,50);t.on('insertHtml',function(){var y=q.getScayt(t);if(q.isScaytEnabled(t)){if(c)t.getSelection().unlock(true);window.setTimeout(function(){y.focus();y.refresh();},10);}},this,null,50);t.on('scaytDialog',function(y){y.data.djConfig=window.djConfig;y.data.scayt_control=q.getScayt(t);y.data.tab=n;y.data.scayt=window.scayt;});var v=t.dataProcessor,w=v&&v.htmlFilter;if(w)w.addRules({elements:{span:function(y){if(y.attributes.scayt_word&&y.attributes.scaytid){delete y.name;return y;}}}});var x=j.undo.Image.prototype;x.equals=e.override(x.equals,function(y){return function(z){var E=this;var A=E.contents,B=z.contents,C=q.getScayt(E.editor);if(C&&q.isScaytReady(E.editor)){E.contents=C.reset(A)||'';
z.contents=C.reset(B)||'';}var D=y.apply(E,arguments);E.contents=A;z.contents=B;return D;};});if(t.document)u();};j.scayt={engineLoaded:false,instances:{},controlInfo:{},setControlInfo:function(t,u){if(t&&t.name&&typeof this.controlInfo[t.name]!='object')this.controlInfo[t.name]={};for(var v in u)this.controlInfo[t.name][v]=u[v];},isControlRestored:function(t){if(t&&t.name&&this.controlInfo[t.name])return this.controlInfo[t.name].restored;return false;},markControlRestore:function(t){this.setControlInfo(t,{restored:true});},setControlId:function(t,u){this.setControlInfo(t,{id:u});},getControlId:function(t){if(t&&t.name&&this.controlInfo[t.name]&&this.controlInfo[t.name].id)return this.controlInfo[t.name].id;return null;},setPaused:function(t,u){this.setControlInfo(t,{paused:u});},isPaused:function(t){if(t&&t.name&&this.controlInfo[t.name])return this.controlInfo[t.name].paused;return undefined;},getScayt:function(t){return this.instances[t.name];},isScaytReady:function(t){return this.engineLoaded===true&&'undefined'!==typeof window.scayt&&this.getScayt(t);},isScaytEnabled:function(t){var u=this.getScayt(t);return u?u.disabled===false:false;},loadEngine:function(t){if(b.gecko&&b.version<10900||b.opera)return t.fire('showScaytState');if(this.engineLoaded===true)return p.apply(t);else if(this.engineLoaded==-1)return a.on('scaytReady',function(){p.apply(t);});a.on('scaytReady',p,t);a.on('scaytReady',function(){this.engineLoaded=true;},this,null,0);this.engineLoaded=-1;var u=document.location.protocol;u=u.search(/https?:/)!=-1?u:'http:';var v='svc.spellchecker.net/scayt25/loader__base.js',w=t.config.scayt_srcUrl||u+'//'+v,x=q.parseUrl(w).path+'/';if(window.scayt==undefined){a._djScaytConfig={baseUrl:x,addOnLoad:[function(){a.fireOnce('scaytReady');}],isDebug:false};a.document.getHead().append(a.document.createElement('script',{attributes:{type:'text/javascript',async:'true',src:w}}));}else a.fireOnce('scaytReady');return null;},parseUrl:function(t){var u;if(t.match&&(u=t.match(/(.*)[\/\\](.*?\.\w+)$/)))return{path:u[1],file:u[2]};else return t;}};var q=j.scayt,r=function(t,u,v,w,x,y,z){t.addCommand(w,x);t.addMenuItem(w,{label:v,command:w,group:y,order:z});},s={preserveState:true,editorFocus:false,canUndo:false,exec:function(t){if(q.isScaytReady(t)){var u=q.isScaytEnabled(t);this.setState(u?2:1);var v=q.getScayt(t);v.focus();v.setDisabled(u);}else if(!t.config.scayt_autoStartup&&q.engineLoaded>=0){this.setState(0);q.loadEngine(t);}}};j.add('scayt',{requires:['menubutton'],beforeInit:function(t){var u=t.config.scayt_contextMenuItemsOrder||'suggest|moresuggest|control',v='';
u=u.split('|');if(u&&u.length)for(var w=0;w<u.length;w++)v+='scayt_'+u[w]+(u.length!=parseInt(w,10)+1?',':'');t.config.menu_groups=v+','+t.config.menu_groups;},init:function(t){var u={},v={},w=t.addCommand(m,s);a.dialog.add(m,a.getUrl(this.path+'dialogs/options.js'));var x=t.config.scayt_uiTabs||'1,1,1',y=[];x=x.split(',');for(var z=0,A=3;z<A;z++){var B=parseInt(x[z]||'1',10);y.push(B);}var C='scaytButton';t.addMenuGroup(C);var D={},E=t.lang.scayt;D.scaytToggle={label:E.enable,command:m,group:C};if(y[0]==1)D.scaytOptions={label:E.options,group:C,onClick:function(){n='options';t.openDialog(m);}};if(y[1]==1)D.scaytLangs={label:E.langs,group:C,onClick:function(){n='langs';t.openDialog(m);}};if(y[2]==1)D.scaytDict={label:E.dictionariesTab,group:C,onClick:function(){n='dictionaries';t.openDialog(m);}};D.scaytAbout={label:t.lang.scayt.about,group:C,onClick:function(){n='about';t.openDialog(m);}};y[3]=1;q.uiTabs=y;t.addMenuItems(D);t.ui.add('Scayt',5,{label:E.title,title:b.opera?E.opera_title:E.title,className:'cke_button_scayt',onRender:function(){w.on('state',function(){this.setState(w.state);},this);},onMenu:function(){var G=q.isScaytEnabled(t);t.getMenuItem('scaytToggle').label=E[G?'disable':'enable'];return{scaytToggle:2,scaytOptions:G&&q.uiTabs[0]?2:0,scaytLangs:G&&q.uiTabs[1]?2:0,scaytDict:G&&q.uiTabs[2]?2:0,scaytAbout:G&&q.uiTabs[3]?2:0};}});if(t.contextMenu&&t.addMenuItems)t.contextMenu.addListener(function(G,H){if(!q.isScaytEnabled(t)||H.getCommonAncestor().isReadOnly())return null;var I=q.getScayt(t),J=I.getScaytNode();if(!J)return null;var K=I.getWord(J);if(!K)return null;var L=I.getLang(),M={},N=window.scayt.getSuggestion(K,L);if(!N||!N.length)return null;for(z in u){delete t._.menuItems[z];delete t._.commands[z];}for(z in v){delete t._.menuItems[z];delete t._.commands[z];}u={};v={};var O=t.config.scayt_moreSuggestions||'on',P=false,Q=t.config.scayt_maxSuggestions;typeof Q!='number'&&(Q=5);!Q&&(Q=N.length);var R=t.config.scayt_contextCommands||'all';R=R.split('|');for(var S=0,T=N.length;S<T;S+=1){var U='scayt_suggestion_'+N[S].replace(' ','_'),V=(function(Z,aa){return{exec:function(){I.replace(Z,aa);}};})(J,N[S]);if(S<Q){r(t,'button_'+U,N[S],U,V,'scayt_suggest',S+1);M[U]=2;v[U]=2;}else if(O=='on'){r(t,'button_'+U,N[S],U,V,'scayt_moresuggest',S+1);u[U]=2;P=true;}}if(P){t.addMenuItem('scayt_moresuggest',{label:E.moreSuggestions,group:'scayt_moresuggest',order:10,getItems:function(){return u;}});v.scayt_moresuggest=2;}if(o('all',R)||o('ignore',R)){var W={exec:function(){I.ignore(J);
}};r(t,'ignore',E.ignore,'scayt_ignore',W,'scayt_control',1);v.scayt_ignore=2;}if(o('all',R)||o('ignoreall',R)){var X={exec:function(){I.ignoreAll(J);}};r(t,'ignore_all',E.ignoreAll,'scayt_ignore_all',X,'scayt_control',2);v.scayt_ignore_all=2;}if(o('all',R)||o('add',R)){var Y={exec:function(){window.scayt.addWordToUserDictionary(J);}};r(t,'add_word',E.addWord,'scayt_add_word',Y,'scayt_control',3);v.scayt_add_word=2;}if(I.fireOnContextMenu)I.fireOnContextMenu(t);return v;});var F=function(){t.removeListener('showScaytState',F);if(!b.opera)w.setState(q.isScaytEnabled(t)?1:2);else w.setState(0);};t.on('showScaytState',F);if(b.opera)t.on('instanceReady',function(){F();});if(t.config.scayt_autoStartup)t.on('instanceReady',function(){q.loadEngine(t);});},afterInit:function(t){var u,v=function(w){if(w.hasAttribute('scaytid'))return false;};if(t._.elementsPath&&(u=t._.elementsPath.filters))u.push(v);t.addRemoveFormatFilter&&t.addRemoveFormatFilter(v);}});})();j.add('smiley',{requires:['dialog'],init:function(m){m.config.smiley_path=m.config.smiley_path||this.path+'images/';m.addCommand('smiley',new a.dialogCommand('smiley'));m.ui.addButton('Smiley',{label:m.lang.smiley.toolbar,command:'smiley'});a.dialog.add('smiley',this.path+'dialogs/smiley.js');}});i.smiley_images=['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'];i.smiley_descriptions=['smiley','sad','wink','laugh','frown','cheeky','blush','surprise','indecision','angry','angel','cool','devil','crying','enlightened','no','yes','heart','broken heart','kiss','mail'];(function(){var m='.%2 p,.%2 div,.%2 pre,.%2 address,.%2 blockquote,.%2 h1,.%2 h2,.%2 h3,.%2 h4,.%2 h5,.%2 h6{background-repeat: no-repeat;background-position: top %3;border: 1px dotted gray;padding-top: 8px;padding-%3: 8px;}.%2 p{%1p.png);}.%2 div{%1div.png);}.%2 pre{%1pre.png);}.%2 address{%1address.png);}.%2 blockquote{%1blockquote.png);}.%2 h1{%1h1.png);}.%2 h2{%1h2.png);}.%2 h3{%1h3.png);}.%2 h4{%1h4.png);}.%2 h5{%1h5.png);}.%2 h6{%1h6.png);}',n=/%1/g,o=/%2/g,p=/%3/g,q={preserveState:true,editorFocus:false,exec:function(r){this.toggleState();this.refresh(r);},refresh:function(r){var s=this.state==1?'addClass':'removeClass';
r.document.getBody()[s]('cke_show_blocks');}};j.add('showblocks',{requires:['wysiwygarea'],init:function(r){var s=r.addCommand('showblocks',q);s.canUndo=false;if(r.config.startupOutlineBlocks)s.setState(1);r.addCss(m.replace(n,'background-image: url('+a.getUrl(this.path)+'images/block_').replace(o,'cke_show_blocks ').replace(p,r.lang.dir=='rtl'?'right':'left'));r.ui.addButton('ShowBlocks',{label:r.lang.showBlocks,command:'showblocks'});r.on('mode',function(){if(s.state!=0)s.refresh(r);});r.on('contentDom',function(){if(s.state!=0)s.refresh(r);});}});})();(function(){var m='cke_show_border',n,o=(b.ie6Compat?['.%1 table.%2,','.%1 table.%2 td, .%1 table.%2 th,','{','border : #d3d3d3 1px dotted','}']:['.%1 table.%2,','.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,','.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,','.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,','.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th','{','border : #d3d3d3 1px dotted','}']).join('');n=o.replace(/%2/g,m).replace(/%1/g,'cke_show_borders ');var p={preserveState:true,editorFocus:false,exec:function(q){this.toggleState();this.refresh(q);},refresh:function(q){var r=this.state==1?'addClass':'removeClass';q.document.getBody()[r]('cke_show_borders');}};j.add('showborders',{requires:['wysiwygarea'],modes:{wysiwyg:1},init:function(q){var r=q.addCommand('showborders',p);r.canUndo=false;if(q.config.startupShowBorders!==false)r.setState(1);q.addCss(n);q.on('mode',function(){if(r.state!=0)r.refresh(q);},null,null,100);q.on('contentDom',function(){if(r.state!=0)r.refresh(q);});q.on('removeFormatCleanup',function(s){var t=s.data;if(q.getCommand('showborders').state==1&&t.is('table')&&(!t.hasAttribute('border')||parseInt(t.getAttribute('border'),10)<=0))t.addClass(m);});},afterInit:function(q){var r=q.dataProcessor,s=r&&r.dataFilter,t=r&&r.htmlFilter;if(s)s.addRules({elements:{table:function(u){var v=u.attributes,w=v['class'],x=parseInt(v.border,10);if(!x||x<=0)v['class']=(w||'')+' '+m;}}});if(t)t.addRules({elements:{table:function(u){var v=u.attributes,w=v['class'];w&&(v['class']=w.replace(m,'').replace(/\s{2}/,' ').replace(/^\s+|\s+$/,''));}}});}});a.on('dialogDefinition',function(q){var r=q.data.name;if(r=='table'||r=='tableProperties'){var s=q.data.definition,t=s.getContents('info'),u=t.get('txtBorder'),v=u.commit;u.commit=e.override(v,function(y){return function(z,A){y.apply(this,arguments);var B=parseInt(this.getValue(),10);A[!B||B<=0?'addClass':'removeClass'](m);
};});var w=s.getContents('advanced'),x=w&&w.get('advCSSClasses');if(x){x.setup=e.override(x.setup,function(y){return function(){y.apply(this,arguments);this.setValue(this.getValue().replace(/cke_show_border/,''));};});x.commit=e.override(x.commit,function(y){return function(z,A){y.apply(this,arguments);if(!parseInt(A.getAttribute('border'),10))A.addClass('cke_show_border');};});}}});})();j.add('sourcearea',{requires:['editingblock'],init:function(m){var n=j.sourcearea,o=a.document.getWindow();m.on('editingBlockReady',function(){var p,q;m.addMode('source',{load:function(r,s){if(c&&b.version<8)r.setStyle('position','relative');m.textarea=p=new h('textarea');p.setAttributes({dir:'ltr',tabIndex:b.webkit?-1:m.tabIndex,role:'textbox','aria-label':m.lang.editorTitle.replace('%1',m.name)});p.addClass('cke_source');p.addClass('cke_enable_context_menu');var t={width:b.ie7Compat?'99%':'100%',height:'100%',resize:'none',outline:'none','text-align':'left'};if(c){q=function(){p.hide();p.setStyle('height',r.$.clientHeight+'px');p.setStyle('width',r.$.clientWidth+'px');p.show();};m.on('resize',q);o.on('resize',q);setTimeout(q,0);}if(document.addEventListener)p.on('mousedown',function(v){v.data.stopPropagation();});r.setHtml('');r.append(p);p.setStyles(t);m.fire('ariaWidget',p);p.on('blur',function(){m.focusManager.blur();});p.on('focus',function(){m.focusManager.focus();});m.mayBeDirty=true;this.loadData(s);var u=m.keystrokeHandler;if(u)u.attach(p);setTimeout(function(){m.mode='source';m.fire('mode');},b.gecko||b.webkit?100:0);},loadData:function(r){p.setValue(r);m.fire('dataReady');},getData:function(){return p.getValue();},getSnapshotData:function(){return p.getValue();},unload:function(r){p.clearCustomData();m.textarea=p=null;if(q){m.removeListener('resize',q);o.removeListener('resize',q);}if(c&&b.version<8)r.removeStyle('position');},focus:function(){p.focus();}});});m.addCommand('source',n.commands.source);if(m.ui.addButton)m.ui.addButton('Source',{label:m.lang.source,command:'source'});m.on('mode',function(){m.getCommand('source').setState(m.mode=='source'?1:2);});}});j.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:false,exec:function(m){if(m.mode=='wysiwyg')m.fire('saveSnapshot');m.getCommand('source').setState(0);m.setMode(m.mode=='source'?'wysiwyg':'source');},canUndo:false}}};(function(){j.add('stylescombo',{requires:['richcombo','styles'],init:function(n){var o=n.config,p=n.lang.stylesCombo,q={},r=[];function s(t){n.getStylesSet(function(u){if(!r.length){var v,w;
for(var x=0,y=u.length;x<y;x++){var z=u[x];w=z.name;v=q[w]=new a.style(z);v._name=w;v._.enterMode=o.enterMode;r.push(v);}r.sort(m);}t&&t();});};n.ui.addRichCombo('Styles',{label:p.label,title:p.panelTitle,className:'cke_styles',panel:{css:n.skin.editor.css.concat(o.contentsCss),multiSelect:true,attributes:{'aria-label':p.panelTitle}},init:function(){var t=this;s(function(){var u,v,w;for(var x=0,y=r.length;x<y;x++){u=r[x];v=u._name;var z=u.type;if(z!=w){t.startGroup(p['panelTitle'+String(z)]);w=z;}t.add(v,u.type==3?v:u.buildPreview(),v);}t.commit();t.onOpen();});},onClick:function(t){n.focus();n.fire('saveSnapshot');var u=q[t],v=n.getSelection(),w=new d.elementPath(v.getStartElement());if(u.type==2&&u.checkActive(w))u.remove(n.document);else if(u.type==3&&u.checkActive(w))u.remove(n.document);else u.apply(n.document);n.fire('saveSnapshot');},onRender:function(){n.on('selectionChange',function(t){var u=this.getValue(),v=t.data.path,w=v.elements;for(var x=0,y=w.length,z;x<y;x++){z=w[x];for(var A in q){if(q[A].checkElementRemovable(z,true)){if(A!=u)this.setValue(A);return;}}}this.setValue('');},this);},onOpen:function(){var A=this;if(c||b.webkit)n.focus();var t=n.getSelection(),u=t.getSelectedElement(),v=new d.elementPath(u||t.getStartElement()),w=[0,0,0,0];A.showAll();A.unmarkAll();for(var x in q){var y=q[x],z=y.type;if(y.checkActive(v))A.mark(x);else if(z==3&&!y.checkApplicable(v)){A.hideItem(x);w[z]--;}w[z]++;}if(!w[1])A.hideGroup(p['panelTitle'+String(1)]);if(!w[2])A.hideGroup(p['panelTitle'+String(2)]);if(!w[3])A.hideGroup(p['panelTitle'+String(3)]);}});n.on('instanceReady',function(){s();});}});function m(n,o){var p=n.type,q=o.type;return p==q?0:p==3?-1:q==3?1:q==1?1:-1;};})();j.add('table',{init:function(m){var n=j.table,o=m.lang.table;m.addCommand('table',new a.dialogCommand('table'));m.addCommand('tableProperties',new a.dialogCommand('tableProperties'));m.ui.addButton('Table',{label:o.toolbar,command:'table'});a.dialog.add('table',this.path+'dialogs/table.js');a.dialog.add('tableProperties',this.path+'dialogs/table.js');if(m.addMenuItems)m.addMenuItems({table:{label:o.menu,command:'tableProperties',group:'table',order:5},tabledelete:{label:o.deleteTable,command:'tableDelete',group:'table',order:1}});m.on('doubleclick',function(p){var q=p.data.element;if(q.is('table'))p.data.dialog='tableProperties';});if(m.contextMenu)m.contextMenu.addListener(function(p,q){if(!p||p.isReadOnly())return null;var r=p.hasAscendant('table',1);if(r)return{tabledelete:2,table:2};
return null;});}});(function(){function m(G,H){if(c)G.removeAttribute(H);else delete G[H];};var n=/^(?:td|th)$/;function o(G){var H=G.createBookmarks(),I=G.getRanges(),J=[],K={};function L(T){if(J.length>0)return;if(T.type==1&&n.test(T.getName())&&!T.getCustomData('selected_cell')){h.setMarker(K,T,'selected_cell',true);J.push(T);}};for(var M=0;M<I.length;M++){var N=I[M];if(N.collapsed){var O=N.getCommonAncestor(),P=O.getAscendant('td',true)||O.getAscendant('th',true);if(P)J.push(P);}else{var Q=new d.walker(N),R;Q.guard=L;while(R=Q.next()){var S=R.getParent();if(S&&n.test(S.getName())&&!S.getCustomData('selected_cell')){h.setMarker(K,S,'selected_cell',true);J.push(S);}}}}h.clearAllMarkers(K);G.selectBookmarks(H);return J;};function p(G){var H=0,I=G.length-1,J={},K,L,M;while(K=G[H++])h.setMarker(J,K,'delete_cell',true);H=0;while(K=G[H++]){if((L=K.getPrevious())&&!L.getCustomData('delete_cell')||(L=K.getNext())&&!L.getCustomData('delete_cell')){h.clearAllMarkers(J);return L;}}h.clearAllMarkers(J);M=G[0].getParent();if(M=M.getPrevious())return M.getLast();M=G[I].getParent();if(M=M.getNext())return M.getChild(0);return null;};function q(G){var H=G.cells;for(var I=0;I<H.length;I++){H[I].innerHTML='';if(!c)new h(H[I]).appendBogus();}};function r(G,H){var I=G.getStartElement().getAscendant('tr');if(!I)return;var J=I.clone(1);H?J.insertBefore(I):J.insertAfter(I);q(J.$);};function s(G){if(G instanceof d.selection){var H=o(G),I=H.length,J=[],K,L,M;for(var N=0;N<I;N++){var O=H[N].getParent(),P=O.$.rowIndex;!N&&(L=P-1);J[P]=O;N==I-1&&(M=P+1);}var Q=O.getAscendant('table'),R=Q.$.rows,S=R.length;K=new h(M<S&&Q.$.rows[M]||L>0&&Q.$.rows[L]||Q.$.parentNode);for(N=J.length;N>=0;N--){if(J[N])s(J[N]);}return K;}else if(G instanceof h){Q=G.getAscendant('table');if(Q.$.rows.length==1)Q.remove();else G.remove();}return 0;};function t(G,H){var I=G.getStartElement(),J=I.getAscendant('td',1)||I.getAscendant('th',1);if(!J)return;var K=J.getAscendant('table'),L=J.$.cellIndex;for(var M=0;M<K.$.rows.length;M++){var N=K.$.rows[M];if(N.cells.length<L+1)continue;J=new h(N.cells[L]).clone(0);if(!c)J.appendBogus();var O=new h(N.cells[L]);if(H)J.insertBefore(O);else J.insertAfter(O);}};function u(G){var H=[],I=G[0]&&G[0].getAscendant('table'),J,K,L,M;for(J=0,K=G.length;J<K;J++)H.push(G[J].$.cellIndex);H.sort();for(J=1,K=H.length;J<K;J++){if(H[J]-H[J-1]>1){L=H[J-1]+1;break;}}if(!L)L=H[0]>0?H[0]-1:H[H.length-1]+1;var N=I.$.rows;for(J=0,K=N.length;J<K;J++){M=N[J].cells[L];if(M)break;}return M?new h(M):I.getPrevious();
};function v(G){if(G instanceof d.selection){var H=o(G),I=u(H);for(var J=H.length-1;J>=0;J--){if(H[J])v(H[J]);}return I;}else if(G instanceof h){var K=G.getAscendant('table');if(!K)return null;var L=G.$.cellIndex;for(J=K.$.rows.length-1;J>=0;J--){var M=new h(K.$.rows[J]);if(!L&&M.$.cells.length==1){s(M);continue;}if(M.$.cells[L])M.$.removeChild(M.$.cells[L]);}}return null;};function w(G,H){var I=G.getStartElement(),J=I.getAscendant('td',1)||I.getAscendant('th',1);if(!J)return;var K=J.clone();if(!c)K.appendBogus();if(H)K.insertBefore(J);else K.insertAfter(J);};function x(G){if(G instanceof d.selection){var H=o(G),I=H[0]&&H[0].getAscendant('table'),J=p(H);for(var K=H.length-1;K>=0;K--)x(H[K]);if(J)z(J,true);else if(I)I.remove();}else if(G instanceof h){var L=G.getParent();if(L.getChildCount()==1)L.remove();else G.remove();}};function y(G){var H=G.getBogus();H&&H.remove();G.trim();};function z(G,H){var I=new d.range(G.getDocument());if(!I['moveToElementEdit'+(H?'End':'Start')](G)){I.selectNodeContents(G);I.collapse(H?false:true);}I.select(true);};function A(G,H,I){var J=G[H];if(typeof I=='undefined')return J;for(var K=0;J&&K<J.length;K++){if(I.is&&J[K]==I.$)return K;else if(K==I)return new h(J[K]);}return I.is?-1:null;};function B(G,H,I){var J=[];for(var K=0;K<G.length;K++){var L=G[K];if(typeof I=='undefined')J.push(L[H]);else if(I.is&&L[H]==I.$)return K;else if(K==I)return new h(L[H]);}return typeof I=='undefined'?J:I.is?-1:null;};function C(G,H,I){var J=o(G),K;if((H?J.length!=1:J.length<2)||(K=G.getCommonAncestor())&&K.type==1&&K.is('table'))return false;var L,M=J[0],N=M.getAscendant('table'),O=e.buildTableMap(N),P=O.length,Q=O[0].length,R=M.getParent().$.rowIndex,S=A(O,R,M);if(H){var T;try{T=O[H=='up'?R-1:H=='down'?R+1:R][H=='left'?S-1:H=='right'?S+1:S];}catch(al){return false;}if(!T||M.$==T)return false;J[H=='up'||H=='left'?'unshift':'push'](new h(T));}var U=M.getDocument(),V=R,W=0,X=0,Y=!I&&new d.documentFragment(U),Z=0;for(var aa=0;aa<J.length;aa++){L=J[aa];var ab=L.getParent(),ac=L.getFirst(),ad=L.$.colSpan,ae=L.$.rowSpan,af=ab.$.rowIndex,ag=A(O,af,L);Z+=ad*ae;X=Math.max(X,ag-S+ad);W=Math.max(W,af-R+ae);if(!I){if(y(L),L.getChildren().count()){if(af!=V&&ac&&!(ac.isBlockBoundary&&ac.isBlockBoundary({br:1}))){var ah=Y.getLast(d.walker.whitespaces(true));if(ah&&!(ah.is&&ah.is('br')))Y.append(new h('br'));}L.moveChildren(Y);}aa?L.remove():L.setHtml('');}V=af;}if(!I){Y.moveChildren(M);if(!c)M.appendBogus();if(X>=Q)M.removeAttribute('rowSpan');else M.$.rowSpan=W;
if(W>=P)M.removeAttribute('colSpan');else M.$.colSpan=X;var ai=new d.nodeList(N.$.rows),aj=ai.count();for(aa=aj-1;aa>=0;aa--){var ak=ai.getItem(aa);if(!ak.$.cells.length){ak.remove();aj++;continue;}}return M;}else return W*X==Z;};function D(G,H){var I=o(G);if(I.length>1)return false;else if(H)return true;var J=I[0],K=J.getParent(),L=K.getAscendant('table'),M=e.buildTableMap(L),N=K.$.rowIndex,O=A(M,N,J),P=J.$.rowSpan,Q,R,S,T;if(P>1){R=Math.ceil(P/2);S=Math.floor(P/2);T=N+R;var U=new h(L.$.rows[T]),V=A(M,T),W;Q=J.clone();for(var X=0;X<V.length;X++){W=V[X];if(W.parentNode==U.$&&X>O){Q.insertBefore(new h(W));break;}else W=null;}if(!W)U.append(Q,true);}else{S=R=1;U=K.clone();U.insertAfter(K);U.append(Q=J.clone());var Y=A(M,N);for(var Z=0;Z<Y.length;Z++)Y[Z].rowSpan++;}if(!c)Q.appendBogus();J.$.rowSpan=R;Q.$.rowSpan=S;if(R==1)J.removeAttribute('rowSpan');if(S==1)Q.removeAttribute('rowSpan');return Q;};function E(G,H){var I=o(G);if(I.length>1)return false;else if(H)return true;var J=I[0],K=J.getParent(),L=K.getAscendant('table'),M=e.buildTableMap(L),N=K.$.rowIndex,O=A(M,N,J),P=J.$.colSpan,Q,R,S;if(P>1){R=Math.ceil(P/2);S=Math.floor(P/2);}else{S=R=1;var T=B(M,O);for(var U=0;U<T.length;U++)T[U].colSpan++;}Q=J.clone();Q.insertAfter(J);if(!c)Q.appendBogus();J.$.colSpan=R;Q.$.colSpan=S;if(R==1)J.removeAttribute('colSpan');if(S==1)Q.removeAttribute('colSpan');return Q;};var F={thead:1,tbody:1,tfoot:1,td:1,tr:1,th:1};j.tabletools={init:function(G){var H=G.lang.table;G.addCommand('cellProperties',new a.dialogCommand('cellProperties'));a.dialog.add('cellProperties',this.path+'dialogs/tableCell.js');G.addCommand('tableDelete',{exec:function(I){var J=I.getSelection(),K=J&&J.getStartElement(),L=K&&K.getAscendant('table',1);if(!L)return;J.selectElement(L);var M=J.getRanges()[0];M.collapse();J.selectRanges([M]);var N=L.getParent();if(N.getChildCount()==1&&!N.is('body','td','th'))N.remove();else L.remove();}});G.addCommand('rowDelete',{exec:function(I){var J=I.getSelection();z(s(J));}});G.addCommand('rowInsertBefore',{exec:function(I){var J=I.getSelection();r(J,true);}});G.addCommand('rowInsertAfter',{exec:function(I){var J=I.getSelection();r(J);}});G.addCommand('columnDelete',{exec:function(I){var J=I.getSelection(),K=v(J);K&&z(K,true);}});G.addCommand('columnInsertBefore',{exec:function(I){var J=I.getSelection();t(J,true);}});G.addCommand('columnInsertAfter',{exec:function(I){var J=I.getSelection();t(J);}});G.addCommand('cellDelete',{exec:function(I){var J=I.getSelection();x(J);
}});G.addCommand('cellMerge',{exec:function(I){z(C(I.getSelection()),true);}});G.addCommand('cellMergeRight',{exec:function(I){z(C(I.getSelection(),'right'),true);}});G.addCommand('cellMergeDown',{exec:function(I){z(C(I.getSelection(),'down'),true);}});G.addCommand('cellVerticalSplit',{exec:function(I){z(D(I.getSelection()));}});G.addCommand('cellHorizontalSplit',{exec:function(I){z(E(I.getSelection()));}});G.addCommand('cellInsertBefore',{exec:function(I){var J=I.getSelection();w(J,true);}});G.addCommand('cellInsertAfter',{exec:function(I){var J=I.getSelection();w(J);}});if(G.addMenuItems)G.addMenuItems({tablecell:{label:H.cell.menu,group:'tablecell',order:1,getItems:function(){var I=G.getSelection(),J=o(I);return{tablecell_insertBefore:2,tablecell_insertAfter:2,tablecell_delete:2,tablecell_merge:C(I,null,true)?2:0,tablecell_merge_right:C(I,'right',true)?2:0,tablecell_merge_down:C(I,'down',true)?2:0,tablecell_split_vertical:D(I,true)?2:0,tablecell_split_horizontal:E(I,true)?2:0,tablecell_properties:J.length>0?2:0};}},tablecell_insertBefore:{label:H.cell.insertBefore,group:'tablecell',command:'cellInsertBefore',order:5},tablecell_insertAfter:{label:H.cell.insertAfter,group:'tablecell',command:'cellInsertAfter',order:10},tablecell_delete:{label:H.cell.deleteCell,group:'tablecell',command:'cellDelete',order:15},tablecell_merge:{label:H.cell.merge,group:'tablecell',command:'cellMerge',order:16},tablecell_merge_right:{label:H.cell.mergeRight,group:'tablecell',command:'cellMergeRight',order:17},tablecell_merge_down:{label:H.cell.mergeDown,group:'tablecell',command:'cellMergeDown',order:18},tablecell_split_horizontal:{label:H.cell.splitHorizontal,group:'tablecell',command:'cellHorizontalSplit',order:19},tablecell_split_vertical:{label:H.cell.splitVertical,group:'tablecell',command:'cellVerticalSplit',order:20},tablecell_properties:{label:H.cell.title,group:'tablecellproperties',command:'cellProperties',order:21},tablerow:{label:H.row.menu,group:'tablerow',order:1,getItems:function(){return{tablerow_insertBefore:2,tablerow_insertAfter:2,tablerow_delete:2};}},tablerow_insertBefore:{label:H.row.insertBefore,group:'tablerow',command:'rowInsertBefore',order:5},tablerow_insertAfter:{label:H.row.insertAfter,group:'tablerow',command:'rowInsertAfter',order:10},tablerow_delete:{label:H.row.deleteRow,group:'tablerow',command:'rowDelete',order:15},tablecolumn:{label:H.column.menu,group:'tablecolumn',order:1,getItems:function(){return{tablecolumn_insertBefore:2,tablecolumn_insertAfter:2,tablecolumn_delete:2};
}},tablecolumn_insertBefore:{label:H.column.insertBefore,group:'tablecolumn',command:'columnInsertBefore',order:5},tablecolumn_insertAfter:{label:H.column.insertAfter,group:'tablecolumn',command:'columnInsertAfter',order:10},tablecolumn_delete:{label:H.column.deleteColumn,group:'tablecolumn',command:'columnDelete',order:15}});if(G.contextMenu)G.contextMenu.addListener(function(I,J){if(!I||I.isReadOnly())return null;while(I){if(I.getName() in F)return{tablecell:2,tablerow:2,tablecolumn:2};I=I.getParent();}return null;});},getSelectedCells:o};j.add('tabletools',j.tabletools);})();e.buildTableMap=function(m){var n=m.$.rows,o=-1,p=[];for(var q=0;q<n.length;q++){o++;!p[o]&&(p[o]=[]);var r=-1;for(var s=0;s<n[q].cells.length;s++){var t=n[q].cells[s];r++;while(p[o][r])r++;var u=isNaN(t.colSpan)?1:t.colSpan,v=isNaN(t.rowSpan)?1:t.rowSpan;for(var w=0;w<v;w++){if(!p[o+w])p[o+w]=[];for(var x=0;x<u;x++)p[o+w][r+x]=n[q].cells[s];}r+=u-1;}}return p;};j.add('specialchar',{init:function(m){var n='specialchar';a.dialog.add(n,this.path+'dialogs/specialchar.js');m.addCommand(n,new a.dialogCommand(n));m.ui.addButton('SpecialChar',{label:m.lang.specialChar.toolbar,command:n});}});(function(){var m={editorFocus:false,modes:{wysiwyg:1,source:1}},n={exec:function(q){q.container.focusNext(true,q.tabIndex);}},o={exec:function(q){q.container.focusPrevious(true,q.tabIndex);}};function p(q){return{editorFocus:false,canUndo:false,modes:{wysiwyg:1},exec:function(r){if(r.focusManager.hasFocus){var s=r.getSelection(),t=s.getCommonAncestor(),u;if(u=t.getAscendant('td',true)||t.getAscendant('th',true)){var v=new d.range(r.document),w=e.tryThese(function(){var D=u.getParent(),E=D.$.cells[u.$.cellIndex+(q?-1:1)];E.parentNode.parentNode;return E;},function(){var D=u.getParent(),E=D.getAscendant('table'),F=E.$.rows[D.$.rowIndex+(q?-1:1)];return F.cells[q?F.cells.length-1:0];});if(!(w||q)){var x=u.getAscendant('table').$,y=u.getParent().$.cells,z=new h(x.insertRow(-1),r.document);for(var A=0,B=y.length;A<B;A++){var C=z.append(new h(y[A],r.document).clone(false,false));!c&&C.appendBogus();}v.moveToElementEditStart(z);}else if(w){w=new h(w);v.moveToElementEditStart(w);if(!(v.checkStartOfBlock()&&v.checkEndOfBlock()))v.selectNodeContents(w);}else return true;v.select(true);return true;}}return false;}};};j.add('tab',{requires:['keystrokes'],init:function(q){var r=q.config.enableTabKeyTools!==false,s=q.config.tabSpaces||0,t='';while(s--)t+='\xa0';if(t)q.on('key',function(u){if(u.data.keyCode==9){q.insertHtml(t);
u.cancel();}});if(r)q.on('key',function(u){if(u.data.keyCode==9&&q.execCommand('selectNextCell')||u.data.keyCode==2000+9&&q.execCommand('selectPreviousCell'))u.cancel();});if(b.webkit||b.gecko)q.on('key',function(u){var v=u.data.keyCode;if(v==9&&!t){u.cancel();q.execCommand('blur');}if(v==2000+9){q.execCommand('blurBack');u.cancel();}});q.addCommand('blur',e.extend(n,m));q.addCommand('blurBack',e.extend(o,m));q.addCommand('selectNextCell',p());q.addCommand('selectPreviousCell',p(true));}});})();h.prototype.focusNext=function(m,n){var w=this;var o=w.$,p=n===undefined?w.getTabIndex():n,q,r,s,t,u,v;if(p<=0){u=w.getNextSourceNode(m,1);while(u){if(u.isVisible()&&u.getTabIndex()===0){s=u;break;}u=u.getNextSourceNode(false,1);}}else{u=w.getDocument().getBody().getFirst();while(u=u.getNextSourceNode(false,1)){if(!q)if(!r&&u.equals(w)){r=true;if(m){if(!(u=u.getNextSourceNode(true,1)))break;q=1;}}else if(r&&!w.contains(u))q=1;if(!u.isVisible()||(v=u.getTabIndex())<0)continue;if(q&&v==p){s=u;break;}if(v>p&&(!s||!t||v<t)){s=u;t=v;}else if(!s&&v===0){s=u;t=v;}}}if(s)s.focus();};h.prototype.focusPrevious=function(m,n){var w=this;var o=w.$,p=n===undefined?w.getTabIndex():n,q,r,s,t=0,u,v=w.getDocument().getBody().getLast();while(v=v.getPreviousSourceNode(false,1)){if(!q)if(!r&&v.equals(w)){r=true;if(m){if(!(v=v.getPreviousSourceNode(true,1)))break;q=1;}}else if(r&&!w.contains(v))q=1;if(!v.isVisible()||(u=v.getTabIndex())<0)continue;if(p<=0){if(q&&u===0){s=v;break;}if(u>t){s=v;t=u;}}else{if(q&&u==p){s=v;break;}if(u<p&&(!s||u>t)){s=v;t=u;}}}if(s)s.focus();};(function(){j.add('templates',{requires:['dialog'],init:function(o){a.dialog.add('templates',a.getUrl(this.path+'dialogs/templates.js'));o.addCommand('templates',new a.dialogCommand('templates'));o.ui.addButton('Templates',{label:o.lang.templates.button,command:'templates'});}});var m={},n={};a.addTemplates=function(o,p){m[o]=p;};a.getTemplates=function(o){return m[o];};a.loadTemplates=function(o,p){var q=[];for(var r=0,s=o.length;r<s;r++){if(!n[o[r]]){q.push(o[r]);n[o[r]]=1;}}if(q.length)a.scriptLoader.load(q,p);else setTimeout(p,0);};})();i.templates_files=[a.getUrl('plugins/templates/templates/default.js')];i.templates_replaceContent=true;(function(){var m=function(){this.toolbars=[];this.focusCommandExecuted=false;};m.prototype.focus=function(){for(var o=0,p;p=this.toolbars[o++];)for(var q=0,r;r=p.items[q++];){if(r.focus){r.focus();return;}}};var n={toolbarFocus:{modes:{wysiwyg:1,source:1},exec:function(o){if(o.toolbox){o.toolbox.focusCommandExecuted=true;
if(c)setTimeout(function(){o.toolbox.focus();},100);else o.toolbox.focus();}}}};j.add('toolbar',{init:function(o){var p=function(q,r){var s,t,u,v=o.lang.dir=='rtl';switch(r){case v?37:39:case 9:do{s=q.next;if(!s){t=q.toolbar.next;u=t&&t.items.length;while(u===0){t=t.next;u=t&&t.items.length;}if(t)s=t.items[0];}q=s;}while(q&&!q.focus)if(q)q.focus();else o.toolbox.focus();return false;case v?39:37:case 2000+9:do{s=q.previous;if(!s){t=q.toolbar.previous;u=t&&t.items.length;while(u===0){t=t.previous;u=t&&t.items.length;}if(t)s=t.items[u-1];}q=s;}while(q&&!q.focus)if(q)q.focus();else{var w=o.toolbox.toolbars[o.toolbox.toolbars.length-1].items;w[w.length-1].focus();}return false;case 27:o.focus();return false;case 13:case 32:q.execute();return false;}return true;};o.on('themeSpace',function(q){if(q.data.space==o.config.toolbarLocation){o.toolbox=new m();var r=e.getNextId(),s=['<div class="cke_toolbox" role="toolbar" aria-labelledby="',r,'"'],t=o.config.toolbarStartupExpanded!==false,u;s.push(t?'>':' style="display:none">');s.push('<span id="',r,'" class="cke_voice_label">',o.lang.toolbar,'</span>');var v=o.toolbox.toolbars,w=o.config.toolbar instanceof Array?o.config.toolbar:o.config['toolbar_'+o.config.toolbar];for(var x=0;x<w.length;x++){var y=w[x];if(!y)continue;var z=e.getNextId(),A={id:z,items:[]};if(u){s.push('</div>');u=0;}if(y==='/'){s.push('<div class="cke_break"></div>');continue;}s.push('<span id="',z,'" class="cke_toolbar" role="presentation"><span class="cke_toolbar_start"></span>');var B=v.push(A)-1;if(B>0){A.previous=v[B-1];A.previous.next=A;}for(var C=0;C<y.length;C++){var D,E=y[C];if(E=='-')D=k.separator;else D=o.ui.create(E);if(D){if(D.canGroup){if(!u){s.push('<span class="cke_toolgroup" role="presentation">');u=1;}}else if(u){s.push('</span>');u=0;}var F=D.render(o,s);B=A.items.push(F)-1;if(B>0){F.previous=A.items[B-1];F.previous.next=F;}F.toolbar=A;F.onkey=p;F.onfocus=function(){if(!o.toolbox.focusCommandExecuted)o.focus();};}}if(u){s.push('</span>');u=0;}s.push('<span class="cke_toolbar_end"></span></span>');}s.push('</div>');if(o.config.toolbarCanCollapse){var G=e.addFunction(function(){o.execCommand('toolbarCollapse');});o.on('destroy',function(){e.removeFunction(G);});var H=e.getNextId();o.addCommand('toolbarCollapse',{exec:function(I){var J=a.document.getById(H),K=J.getPrevious(),L=I.getThemeSpace('contents'),M=K.getParent(),N=parseInt(L.$.style.height,10),O=M.$.offsetHeight,P=!K.isVisible();if(!P){K.hide();J.addClass('cke_toolbox_collapser_min');
J.setAttribute('title',I.lang.toolbarExpand);}else{K.show();J.removeClass('cke_toolbox_collapser_min');J.setAttribute('title',I.lang.toolbarCollapse);}J.getFirst().setText(P?'▲':'◀');var Q=M.$.offsetHeight-O;L.setStyle('height',N-Q+'px');I.fire('resize');},modes:{wysiwyg:1,source:1}});s.push('<a title="'+(t?o.lang.toolbarCollapse:o.lang.toolbarExpand)+'" id="'+H+'" tabIndex="-1" class="cke_toolbox_collapser');if(!t)s.push(' cke_toolbox_collapser_min');s.push('" onclick="CKEDITOR.tools.callFunction('+G+')">','<span>&#9650;</span>','</a>');}q.data.html+=s.join('');}});o.addCommand('toolbarFocus',n.toolbarFocus);}});})();k.separator={render:function(m,n){n.push('<span class="cke_separator" role="separator"></span>');return{};}};i.toolbarLocation='top';i.toolbar_Basic=[['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','About']];i.toolbar_Full=[['Source','-','Save','NewPage','Preview','-','Templates'],['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print','SpellChecker','Scayt'],['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],'/',['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['BidiLtr','BidiRtl'],['Link','Unlink','Anchor'],['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],'/',['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Maximize','ShowBlocks','-','About']];i.toolbar='Full';i.toolbarCanCollapse=true;(function(){j.add('undo',{requires:['selection','wysiwygarea'],init:function(s){var t=new o(s),u=s.addCommand('undo',{exec:function(){if(t.undo()){s.selectionChange();this.fire('afterUndo');}},state:0,canUndo:false}),v=s.addCommand('redo',{exec:function(){if(t.redo()){s.selectionChange();this.fire('afterRedo');}},state:0,canUndo:false});t.onChange=function(){u.setState(t.undoable()?2:0);v.setState(t.redoable()?2:0);};function w(x){if(t.enabled&&x.data.command.canUndo!==false)t.save();};s.on('beforeCommandExec',w);s.on('afterCommandExec',w);s.on('saveSnapshot',function(){t.save();});s.on('contentDom',function(){s.document.on('keydown',function(x){if(!x.data.$.ctrlKey&&!x.data.$.metaKey)t.type(x);});});s.on('beforeModeUnload',function(){s.mode=='wysiwyg'&&t.save(true);});s.on('mode',function(){t.enabled=s.mode=='wysiwyg';
t.onChange();});s.ui.addButton('Undo',{label:s.lang.undo,command:'undo'});s.ui.addButton('Redo',{label:s.lang.redo,command:'redo'});s.resetUndo=function(){t.reset();s.fire('saveSnapshot');};s.on('updateSnapshot',function(){if(t.currentImage&&new m(s).equals(t.currentImage))setTimeout(function(){t.update();},0);});}});j.undo={};var m=j.undo.Image=function(s){this.editor=s;var t=s.getSnapshot(),u=t&&s.getSelection();c&&t&&(t=t.replace(/\s+_cke_expando=".*?"/g,''));this.contents=t;this.bookmarks=u&&u.createBookmarks2(true);},n=/\b(?:href|src|name)="[^"]*?"/gi;m.prototype={equals:function(s,t){var u=this.contents,v=s.contents;if(c&&(b.ie7Compat||b.ie6Compat)){u=u.replace(n,'');v=v.replace(n,'');}if(u!=v)return false;if(t)return true;var w=this.bookmarks,x=s.bookmarks;if(w||x){if(!w||!x||w.length!=x.length)return false;for(var y=0;y<w.length;y++){var z=w[y],A=x[y];if(z.startOffset!=A.startOffset||z.endOffset!=A.endOffset||!e.arrayCompare(z.start,A.start)||!e.arrayCompare(z.end,A.end))return false;}}return true;}};function o(s){this.editor=s;this.reset();};var p={8:1,46:1},q={16:1,17:1,18:1},r={37:1,38:1,39:1,40:1};o.prototype={type:function(s){var t=s&&s.data.getKey(),u=t in q,v=t in p,w=this.lastKeystroke in p,x=v&&t==this.lastKeystroke,y=t in r,z=this.lastKeystroke in r,A=!v&&!y,B=v&&!x,C=!(u||this.typing)||A&&(w||z);if(C||B){var D=new m(this.editor);e.setTimeout(function(){var F=this;var E=F.editor.getSnapshot();if(c)E=E.replace(/\s+_cke_expando=".*?"/g,'');if(D.contents!=E){F.typing=true;if(!F.save(false,D,false))F.snapshots.splice(F.index+1,F.snapshots.length-F.index-1);F.hasUndo=true;F.hasRedo=false;F.typesCount=1;F.modifiersCount=1;F.onChange();}},0,this);}this.lastKeystroke=t;if(v){this.typesCount=0;this.modifiersCount++;if(this.modifiersCount>25){this.save(false,null,false);this.modifiersCount=1;}}else if(!y){this.modifiersCount=0;this.typesCount++;if(this.typesCount>25){this.save(false,null,false);this.typesCount=1;}}},reset:function(){var s=this;s.lastKeystroke=0;s.snapshots=[];s.index=-1;s.limit=s.editor.config.undoStackSize||20;s.currentImage=null;s.hasUndo=false;s.hasRedo=false;s.resetType();},resetType:function(){var s=this;s.typing=false;delete s.lastKeystroke;s.typesCount=0;s.modifiersCount=0;},fireChange:function(){var s=this;s.hasUndo=!!s.getNextImage(true);s.hasRedo=!!s.getNextImage(false);s.resetType();s.onChange();},save:function(s,t,u){var w=this;var v=w.snapshots;if(!t)t=new m(w.editor);if(t.contents===false)return false;if(w.currentImage&&t.equals(w.currentImage,s))return false;
v.splice(w.index+1,v.length-w.index-1);if(v.length==w.limit)v.shift();w.index=v.push(t)-1;w.currentImage=t;if(u!==false)w.fireChange();return true;},restoreImage:function(s){var u=this;u.editor.loadSnapshot(s.contents);if(s.bookmarks)u.editor.getSelection().selectBookmarks(s.bookmarks);else if(c){var t=u.editor.document.getBody().$.createTextRange();t.collapse(true);t.select();}u.index=s.index;u.update();u.fireChange();},getNextImage:function(s){var x=this;var t=x.snapshots,u=x.currentImage,v,w;if(u)if(s)for(w=x.index-1;w>=0;w--){v=t[w];if(!u.equals(v,true)){v.index=w;return v;}}else for(w=x.index+1;w<t.length;w++){v=t[w];if(!u.equals(v,true)){v.index=w;return v;}}return null;},redoable:function(){return this.enabled&&this.hasRedo;},undoable:function(){return this.enabled&&this.hasUndo;},undo:function(){var t=this;if(t.undoable()){t.save(true);var s=t.getNextImage(true);if(s)return t.restoreImage(s),true;}return false;},redo:function(){var t=this;if(t.redoable()){t.save(true);if(t.redoable()){var s=t.getNextImage(false);if(s)return t.restoreImage(s),true;}}return false;},update:function(){var s=this;s.snapshots.splice(s.index,1,s.currentImage=new m(s.editor));}};})();(function(){var m={table:1,pre:1},n=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,o=d.walker.whitespaces(true);function p(B){if(B.getType()==3)return B.getSelectedElement().isReadOnly();else return B.getCommonAncestor().isReadOnly();};function q(B){if(this.mode=='wysiwyg'){this.focus();var C=this.getSelection();if(p(C))return;var D=B.data;this.fire('saveSnapshot');if(this.dataProcessor)D=this.dataProcessor.toHtml(D);if(c){var E=C.isLocked;if(E)C.unlock();var F=C.getNative();if(F.type=='Control')F.clear();else if(C.getType()==2){var G=C.getRanges()[0],H=G&&G.endContainer;if(H&&H.type==1&&H.getAttribute('contenteditable')=='false'&&G.checkBoundaryOfElement(H,2)){G.setEndAfter(G.endContainer);G.deleteContents();}}try{F.createRange().pasteHTML(D);}catch(J){}if(E)this.getSelection().lock();}else this.document.$.execCommand('inserthtml',false,D);if(b.webkit){this.document.$.execCommand('inserthtml',false,'<span id="cke_paste_marker" cke_temp="1"></span>');var I=this.document.getById('cke_paste_marker');I.scrollIntoView();I.remove();I=null;}e.setTimeout(function(){this.fire('saveSnapshot');},0,this);}};function r(B){if(this.mode=='wysiwyg'){this.focus();var C=this.getSelection();if(p(C))return;this.fire('saveSnapshot');var D=C.getRanges(),E=B.data,F=E.getName(),G=f.$block[F],H=C.isLocked;
if(H)C.unlock();var I,J,K,L;for(var M=D.length-1;M>=0;M--){I=D[M];I.deleteContents();J=!M&&E||E.clone(1);var N,O;if(G)while((N=I.getCommonAncestor(0,1))&&(O=f[N.getName()])&&!(O&&O[F])){if(N.getName() in f.span)I.splitElement(N);else if(I.checkStartOfBlock()&&I.checkEndOfBlock()){I.setStartBefore(N);I.collapse(true);N.remove();}else I.splitBlock();}I.insertNode(J);if(!K)K=J;}I.moveToPosition(K,4);if(G){var P=K.getNext(o),Q=P&&P.type==1&&P.getName();if(Q&&f.$block[Q]&&f[Q]['#'])I.moveToElementEditStart(P);}C.selectRanges([I]);if(H)this.getSelection().lock();e.setTimeout(function(){this.fire('saveSnapshot');},0,this);}};function s(B){if(!B.checkDirty())setTimeout(function(){B.resetDirty();},0);};var t=d.walker.whitespaces(true),u=d.walker.bookmark(false,true);function v(B){return t(B)&&u(B);};function w(B){return B.type==3&&e.trim(B.getText()).match(/^(?:&nbsp;|\xa0)$/);};function x(B){if(B.isLocked){B.unlock();setTimeout(function(){B.lock();},0);}};function y(B){return B.getOuterHtml().match(n);};t=d.walker.whitespaces(true);function z(B){var C=B.window,D=B.document,E=B.document.getBody(),F=E.getChildren().count();if(!F||F==1&&E.getFirst().hasAttribute('_moz_editor_bogus_node')){s(B);var G=B.element.getDocument(),H=G.getDocumentElement(),I=H.$.scrollTop,J=H.$.scrollLeft,K=D.$.createEvent('KeyEvents');K.initKeyEvent('keypress',true,true,C.$,false,false,false,false,0,32);D.$.dispatchEvent(K);if(I!=H.$.scrollTop||J!=H.$.scrollLeft)G.getWindow().$.scrollTo(J,I);F&&E.getFirst().remove();D.getBody().appendBogus();var L=new d.range(D);L.setStartAt(E,1);L.select();}};function A(B){var C=B.editor,D=B.data.path,E=D.blockLimit,F=B.data.selection,G=F.getRanges()[0],H=C.document.getBody(),I=C.config.enterMode;b.gecko&&z(C);if(I!=2&&G.collapsed&&E.getName()=='body'&&!D.block){C.fire('updateSnapshot');s(C);c&&x(F);var J=G.fixBlock(true,C.config.enterMode==3?'div':'p');if(c){var K=J.getFirst(v);K&&w(K)&&K.remove();}if(y(J)){var L=J.getNext(t);if(L&&L.type==1&&!m[L.getName()]){G.moveToElementEditStart(L);J.remove();}else{L=J.getPrevious(t);if(L&&L.type==1&&!m[L.getName()]){G.moveToElementEditEnd(L);J.remove();}}}G.select();if(!c)C.selectionChange();}var M=new d.range(C.document),N=new d.walker(M);M.selectNodeContents(H);N.evaluator=function(P){return P.type==1&&P.getName() in m;};N.guard=function(P,Q){return!(P.type==3&&t(P)||Q);};if(N.previous()){C.fire('updateSnapshot');s(C);c&&x(F);var O;if(I!=2)O=H.append(new h(I==1?'p':'div'));else O=H;if(!c)O.appendBogus();}};j.add('wysiwygarea',{requires:['editingblock'],init:function(B){var C=B.config.enterMode!=2?B.config.enterMode==3?'div':'p':false,D=B.lang.editorTitle.replace('%1',B.name),E;
B.on('editingBlockReady',function(){var K,L,M,N,O,P,Q=b.isCustomDomain(),R=function(U){if(L)L.remove();var V='document.open();'+(Q?'document.domain="'+document.domain+'";':'')+'document.close();';L=h.createFromHtml('<iframe style="width:100%;height:100%" frameBorder="0" title="'+D+'"'+' src="'+(c?'javascript:void(function(){'+encodeURIComponent(V)+'}())':'')+'"'+' tabIndex="'+(b.webkit?-1:B.tabIndex)+'"'+' allowTransparency="true"'+'></iframe>');if(document.location.protocol=='chrome:')a.event.useCapture=true;L.on('load',function(Z){O=1;Z.removeListener();var aa=L.getFrameDocument().$;aa.open('text/html','replace');aa.write(U);aa.close();});if(document.location.protocol=='chrome:')a.event.useCapture=false;var W=B.element,X=b.gecko&&!W.isVisible(),Y={};if(X){W.show();Y={position:W.getStyle('position'),top:W.getStyle('top')};W.setStyles({position:'absolute',top:'-3000px'});}K.append(L);if(X)setTimeout(function(){W.hide();W.setStyles(Y);},1000);};E=e.addFunction(T);var S='<script id="cke_actscrpt" type="text/javascript" cke_temp="1">'+(Q?'document.domain="'+document.domain+'";':'')+'window.parent.CKEDITOR.tools.callFunction( '+E+', window );'+'</script>';function T(U){if(!O)return;O=0;B.fire('ariaWidget',L);var V=U.document,W=V.body,X=V.getElementById('cke_actscrpt');X.parentNode.removeChild(X);W.spellcheck=!B.config.disableNativeSpellChecker;if(c){W.hideFocus=true;W.disabled=true;W.contentEditable=true;W.removeAttribute('disabled');}else setTimeout(function(){if(b.gecko&&b.version>=10900||b.opera)V.$.body.contentEditable=true;else if(b.webkit)V.$.body.parentNode.contentEditable=true;else V.$.designMode='on';},0);b.gecko&&e.setTimeout(z,0,null,B);U=B.window=new d.window(U);V=B.document=new g(V);V.on('dblclick',function(ac){var ad=ac.data.getTarget(),ae={element:ad,dialog:''};B.fire('doubleclick',ae);ae.dialog&&B.openDialog(ae.dialog);});if(!(c||b.opera))V.on('mousedown',function(ac){var ad=ac.data.getTarget();if(ad.is('img','hr','input','textarea','select'))B.getSelection().selectElement(ad);});if(b.gecko)V.on('mouseup',function(ac){if(ac.data.$.button==2){var ad=ac.data.getTarget();if(!ad.getOuterHtml().replace(n,'')){var ae=new d.range(V);ae.moveToElementEditStart(ad);ae.select(true);}}});V.on('click',function(ac){ac=ac.data;if(ac.getTarget().is('a')&&ac.$.button!=2)ac.preventDefault();});if(b.webkit){V.on('click',function(ac){if(ac.data.getTarget().is('input','select'))ac.data.preventDefault();});V.on('mouseup',function(ac){if(ac.data.getTarget().is('input','textarea'))ac.data.preventDefault();
});}if(c&&V.$.compatMode=='CSS1Compat'||b.gecko||b.opera){var Y=V.getDocumentElement();Y.on('mousedown',function(ac){if(ac.data.getTarget().equals(Y)){if(b.gecko&&b.version>=10900)I();J.focus();}});}U.on('blur',function(){B.focusManager.blur();});var Z;U.on('focus',function(){var ac=B.document;if(b.gecko&&b.version>=10900)I();else if(b.opera)ac.getBody().focus();else if(b.webkit)if(!Z){B.document.getDocumentElement().focus();Z=1;}B.focusManager.focus();});var aa=B.keystrokeHandler;if(aa)aa.attach(V);if(c){V.getDocumentElement().addClass(V.$.compatMode);V.on('keydown',function(ac){var ad=ac.data.getKeystroke();if(ad in {8:1,46:1}){var ae=B.getSelection(),af=ae.getSelectedElement();if(af){B.fire('saveSnapshot');var ag=ae.getRanges()[0].createBookmark();af.remove();ae.selectBookmarks([ag]);B.fire('saveSnapshot');ac.data.preventDefault();}}});if(V.$.compatMode=='CSS1Compat'){var ab={33:1,34:1};V.on('keydown',function(ac){if(ac.data.getKeystroke() in ab)setTimeout(function(){B.getSelection().scrollIntoView();},0);});}}if(B.contextMenu)B.contextMenu.addTarget(V,B.config.browserContextMenuOnCtrl!==false);setTimeout(function(){B.fire('contentDom');if(P){B.mode='wysiwyg';B.fire('mode');P=false;}M=false;if(N){B.focus();N=false;}setTimeout(function(){B.fire('dataReady');},0);try{B.document.$.execCommand('enableObjectResizing',false,!B.config.disableObjectResizing);}catch(ac){}try{B.document.$.execCommand('enableInlineTableEditing',false,!B.config.disableNativeTableHandles);}catch(ad){}if(c)setTimeout(function(){if(B.document){var ae=B.document.$.body;ae.runtimeStyle.marginBottom='0px';ae.runtimeStyle.marginBottom='';}},1000);},0);};B.addMode('wysiwyg',{load:function(U,V,W){K=U;if(c&&b.quirks)U.setStyle('position','relative');B.mayBeDirty=true;P=true;if(W)this.loadSnapshotData(V);else this.loadData(V);},loadData:function(U){M=true;var V=B.config,W=V.fullPage,X=V.docType,Y='<style type="text/css" cke_temp="1">'+B._.styles.join('\n')+'</style>';!W&&(Y=e.buildStyleHtml(B.config.contentsCss)+Y);var Z=V.baseHref?'<base href="'+V.baseHref+'" cke_temp="1" />':'';if(W)U=U.replace(/<!DOCTYPE[^>]*>/i,function(aa){B.docType=X=aa;return '';});if(B.dataProcessor)U=B.dataProcessor.toHtml(U,C);if(W){if(!/<body[\s|>]/.test(U))U='<body>'+U;if(!/<html[\s|>]/.test(U))U='<html>'+U+'</html>';if(!/<head[\s|>]/.test(U))U=U.replace(/<html[^>]*>/,'$&<head><title></title></head>');else if(!/<title[\s|>]/.test(U))U=U.replace(/<head[^>]*>/,'$&<title></title>');Z&&(U=U.replace(/<head>/,'$&'+Z));U=U.replace(/<\/head\s*>/,Y+'$&');
U=X+U;}else U=V.docType+'<html dir="'+V.contentsLangDirection+'"'+' lang="'+(V.contentsLanguage||B.langCode)+'">'+'<head>'+'<title>'+D+'</title>'+Z+Y+'</head>'+'<body'+(V.bodyId?' id="'+V.bodyId+'"':'')+(V.bodyClass?' class="'+V.bodyClass+'"':'')+'>'+U+'</html>';U+=S;this.onDispose();R(U);},getData:function(){var U=B.config,V=U.fullPage,W=V&&B.docType,X=L.getFrameDocument(),Y=V?X.getDocumentElement().getOuterHtml():X.getBody().getHtml();if(B.dataProcessor)Y=B.dataProcessor.toDataFormat(Y,C);if(U.ignoreEmptyParagraph)Y=Y.replace(n,function(Z,aa){return aa;});if(W)Y=W+'\n'+Y;return Y;},getSnapshotData:function(){return L.getFrameDocument().getBody().getHtml();},loadSnapshotData:function(U){L.getFrameDocument().getBody().setHtml(U);},onDispose:function(){if(!B.document)return;B.document.getDocumentElement().clearCustomData();B.document.getBody().clearCustomData();B.window.clearCustomData();B.document.clearCustomData();L.clearCustomData();L.remove();},unload:function(U){this.onDispose();B.window=B.document=L=K=N=null;B.fire('contentDomUnload');},focus:function(){if(M)N=true;else if(b.opera&&B.document){var U=B.window.$.frameElement;U.blur(),U.focus();B.document.getBody().focus();B.selectionChange();}else if(!b.opera&&B.window){B.window.focus();B.selectionChange();}}});B.on('insertHtml',q,null,null,20);B.on('insertElement',r,null,null,20);B.on('selectionChange',A,null,null,1);});var F;B.on('contentDom',function(){var K=B.document.getElementsByTag('title').getItem(0);K.setAttribute('_cke_title',B.document.$.title);B.document.$.title=D;});if(b.ie8Compat){B.addCss('html.CSS1Compat [contenteditable=false]{ min-height:0 !important;}');var G=[];for(var H in f.$removeEmpty)G.push('html.CSS1Compat '+H+'[contenteditable=false]');B.addCss(G.join(',')+'{ display:inline-block;}');}else if(b.gecko)B.addCss('html { height: 100% !important; }');function I(K){e.tryThese(function(){B.document.$.designMode='on';setTimeout(function(){B.document.$.designMode='off';if(a.currentInstance==B)B.document.getBody().focus();},50);},function(){B.document.$.designMode='off';var L=B.document.getBody();L.setAttribute('contentEditable',false);L.setAttribute('contentEditable',true);!K&&I(1);});};if(b.gecko||c||b.opera){var J;B.on('uiReady',function(){J=B.container.append(h.createFromHtml('<span tabindex="-1" style="position:absolute; left:-10000" role="presentation"></span>'));J.on('focus',function(){B.focus();});});B.on('destroy',function(){e.removeFunction(E);J.clearCustomData();});}B.on('insertElement',function(K){var L=K.data;
if(L.type==1&&(L.is('input')||L.is('textarea')))if(!L.isReadOnly()){L.setAttribute('contentEditable',false);L.setCustomData('_cke_notReadOnly',1);}});}});if(b.gecko)(function(){var B=document.body;if(!B)window.addEventListener('load',arguments.callee,false);else{var C=B.getAttribute('onpageshow');B.setAttribute('onpageshow',(C?C+';':'')+'event.persisted && (function(){'+'var allInstances = CKEDITOR.instances, editor, doc;'+'for ( var i in allInstances )'+'{'+'\teditor = allInstances[ i ];'+'\tdoc = editor.document;'+'\tif ( doc )'+'\t{'+'\t\tdoc.$.designMode = "off";'+'\t\tdoc.$.designMode = "on";'+'\t}'+'}'+'})();');}})();})();i.disableObjectResizing=false;i.disableNativeTableHandles=true;i.disableNativeSpellChecker=true;i.ignoreEmptyParagraph=true;j.add('wsc',{requires:['dialog'],init:function(m){var n='checkspell',o=m.addCommand(n,new a.dialogCommand(n));o.modes={wysiwyg:!b.opera&&document.domain==window.location.hostname};m.ui.addButton('SpellChecker',{label:m.lang.spellCheck.toolbar,command:n});a.dialog.add(n,this.path+'dialogs/wsc.js');}});i.wsc_customerId=i.wsc_customerId||'1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk';i.wsc_customLoaderScript=i.wsc_customLoaderScript||null;a.DIALOG_RESIZE_NONE=0;a.DIALOG_RESIZE_WIDTH=1;a.DIALOG_RESIZE_HEIGHT=2;a.DIALOG_RESIZE_BOTH=3;(function(){var m=e.cssLength;function n(P){return!!this._.tabs[P][0].$.offsetHeight;};function o(){var T=this;var P=T._.currentTabId,Q=T._.tabIdList.length,R=e.indexOf(T._.tabIdList,P)+Q;for(var S=R-1;S>R-Q;S--){if(n.call(T,T._.tabIdList[S%Q]))return T._.tabIdList[S%Q];}return null;};function p(){var T=this;var P=T._.currentTabId,Q=T._.tabIdList.length,R=e.indexOf(T._.tabIdList,P);for(var S=R+1;S<R+Q;S++){if(n.call(T,T._.tabIdList[S%Q]))return T._.tabIdList[S%Q];}return null;};function q(P,Q){var R=P.$.getElementsByTagName('input');for(var S=0,T=R.length;S<T;S++){var U=new h(R[S]);if(U.getAttribute('type').toLowerCase()=='text')if(Q){U.setAttribute('value',U.getCustomData('fake_value')||'');U.removeCustomData('fake_value');}else{U.setCustomData('fake_value',U.getAttribute('value'));U.setAttribute('value','');}}};a.dialog=function(P,Q){var R=a.dialog._.dialogDefinitions[Q];R=e.extend(R(P),s);R=e.clone(R);R=new w(this,R);var S=a.document,T=P.theme.buildDialog(P);this._={editor:P,element:T.element,name:Q,contentSize:{width:0,height:0},size:{width:0,height:0},updateSize:false,contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:false,focusList:[],currentFocusIndex:0,hasFocus:false};
this.parts=T.parts;e.setTimeout(function(){P.fire('ariaWidget',this.parts.contents);},0,this);this.parts.dialog.setStyles({position:b.ie6Compat?'absolute':'fixed',top:0,left:0,visibility:'hidden'});a.event.call(this);this.definition=R=a.fire('dialogDefinition',{name:Q,definition:R},P).definition;if(R.onLoad)this.on('load',R.onLoad);if(R.onShow)this.on('show',R.onShow);if(R.onHide)this.on('hide',R.onHide);if(R.onOk)this.on('ok',function(ag){P.fire('saveSnapshot');setTimeout(function(){P.fire('saveSnapshot');},0);if(R.onOk.call(this,ag)===false)ag.data.hide=false;});if(R.onCancel)this.on('cancel',function(ag){if(R.onCancel.call(this,ag)===false)ag.data.hide=false;});var U=this,V=function(ag){var ah=U._.contents,ai=false;for(var aj in ah)for(var ak in ah[aj]){ai=ag.call(this,ah[aj][ak]);if(ai)return;}};this.on('ok',function(ag){V(function(ah){if(ah.validate){var ai=ah.validate(this);if(typeof ai=='string'){alert(ai);ai=false;}if(ai===false){if(ah.select)ah.select();else ah.focus();ag.data.hide=false;ag.stop();return true;}}});},this,null,0);this.on('cancel',function(ag){V(function(ah){if(ah.isChanged()){if(!confirm(P.lang.common.confirmCancel))ag.data.hide=false;return true;}});},this,null,0);this.parts.close.on('click',function(ag){if(this.fire('cancel',{hide:true}).hide!==false)this.hide();ag.data.preventDefault();},this);function W(){var ag=U._.focusList;ag.sort(function(aj,ak){if(aj.tabIndex!=ak.tabIndex)return ak.tabIndex-aj.tabIndex;else return aj.focusIndex-ak.focusIndex;});var ah=ag.length;for(var ai=0;ai<ah;ai++)ag[ai].focusIndex=ai;};function X(ag){var ah=U._.focusList,ai=ag?1:-1;if(ah.length<1)return;var aj=U._.currentFocusIndex;try{ah[aj].getInputElement().$.blur();}catch(am){}var ak=(aj+ai+ah.length)%ah.length,al=ak;while(!ah[al].isFocusable()){al=(al+ai+ah.length)%ah.length;if(al==ak)break;}ah[al].focus();if(ah[al].type=='text')ah[al].select();};this.changeFocus=X;var Y;function Z(ag){var al=this;if(U!=a.dialog._.currentTop)return;var ah=ag.data.getKeystroke(),ai=P.lang.dir=='rtl';Y=0;if(ah==9||ah==2000+9){var aj=ah==2000+9;if(U._.tabBarMode){var ak=aj?o.call(U):p.call(U);U.selectPage(ak);U._.tabs[ak][0].focus();}else X(!aj);Y=1;}else if(ah==4000+121&&!U._.tabBarMode&&U.getPageCount()>1){U._.tabBarMode=true;U._.tabs[U._.currentTabId][0].focus();Y=1;}else if((ah==37||ah==39)&&U._.tabBarMode){ak=ah==(ai?39:37)?o.call(U):p.call(U);U.selectPage(ak);U._.tabs[ak][0].focus();Y=1;}else if((ah==13||ah==32)&&U._.tabBarMode){al.selectPage(al._.currentTabId);
al._.tabBarMode=false;al._.currentFocusIndex=-1;X(true);Y=1;}if(Y){ag.stop();ag.data.preventDefault();}};function aa(ag){Y&&ag.data.preventDefault();};var ab=this._.element;this.on('show',function(){ab.on('keydown',Z,this,null,0);if(b.opera||b.gecko&&b.mac)ab.on('keypress',aa,this);});this.on('hide',function(){ab.removeListener('keydown',Z);if(b.opera||b.gecko&&b.mac)ab.removeListener('keypress',aa);});this.on('iframeAdded',function(ag){var ah=new g(ag.data.iframe.$.contentWindow.document);ah.on('keydown',Z,this,null,0);});this.on('show',function(){var ak=this;W();if(P.config.dialog_startupFocusTab&&U._.pageCount>1){U._.tabBarMode=true;U._.tabs[U._.currentTabId][0].focus();}else if(!ak._.hasFocus){ak._.currentFocusIndex=-1;if(R.onFocus){var ag=R.onFocus.call(ak);ag&&ag.focus();}else X(true);if(ak._.editor.mode=='wysiwyg'&&c){var ah=P.document.$.selection,ai=ah.createRange();if(ai)if(ai.parentElement&&ai.parentElement().ownerDocument==P.document.$||ai.item&&ai.item(0).ownerDocument==P.document.$){var aj=document.body.createTextRange();aj.moveToElementText(ak.getElement().getFirst().$);aj.collapse(true);aj.select();}}}},this,null,4294967295);if(b.ie6Compat)this.on('load',function(ag){var ah=this.getElement(),ai=ah.getFirst();ai.remove();ai.appendTo(ah);},this);y(this);z(this);new d.text(R.title,a.document).appendTo(this.parts.title);for(var ac=0;ac<R.contents.length;ac++){var ad=R.contents[ac];ad&&this.addPage(ad);}this.parts.tabs.on('click',function(ag){var aj=this;var ah=ag.data.getTarget();if(ah.hasClass('cke_dialog_tab')){var ai=ah.$.id;aj.selectPage(ai.substring(4,ai.lastIndexOf('_')));if(aj._.tabBarMode){aj._.tabBarMode=false;aj._.currentFocusIndex=-1;X(true);}ag.data.preventDefault();}},this);var ae=[],af=a.dialog._.uiElementBuilders.hbox.build(this,{type:'hbox',className:'cke_dialog_footer_buttons',widths:[],children:R.buttons},ae).getChild();this.parts.footer.setHtml(ae.join(''));for(ac=0;ac<af.length;ac++)this._.buttons[af[ac].id]=af[ac];};function r(P,Q,R){this.element=Q;this.focusIndex=R;this.tabIndex=0;this.isFocusable=function(){return!Q.getAttribute('disabled')&&Q.isVisible();};this.focus=function(){P._.currentFocusIndex=this.focusIndex;this.element.focus();};Q.on('keydown',function(S){if(S.data.getKeystroke() in {32:1,13:1})this.fire('click');});Q.on('focus',function(){this.fire('mouseover');});Q.on('blur',function(){this.fire('mouseout');});};a.dialog.prototype={destroy:function(){this.hide();this._.element.remove();},resize:(function(){return function(P,Q){var R=this;
if(R._.contentSize&&R._.contentSize.width==P&&R._.contentSize.height==Q)return;a.dialog.fire('resize',{dialog:R,skin:R._.editor.skinName,width:P,height:Q},R._.editor);R._.contentSize={width:P,height:Q};R._.updateSize=true;};})(),getSize:function(){var R=this;if(!R._.updateSize)return R._.size;var P=R._.element.getFirst(),Q=R._.size={width:P.$.offsetWidth||0,height:P.$.offsetHeight||0};R._.updateSize=!Q.width||!Q.height;return Q;},move:(function(){var P;return function(Q,R){var U=this;var S=U._.element.getFirst();if(P===undefined)P=S.getComputedStyle('position')=='fixed';if(P&&U._.position&&U._.position.x==Q&&U._.position.y==R)return;U._.position={x:Q,y:R};if(!P){var T=a.document.getWindow().getScrollPosition();Q+=T.x;R+=T.y;}S.setStyles({left:(Q>0?Q:0)+'px',top:(R>0?R:0)+'px'});};})(),getPosition:function(){return e.extend({},this._.position);},show:function(){var P=this._.editor;if(P.mode=='wysiwyg'&&c){var Q=P.getSelection();Q&&Q.lock();}var R=this._.element,S=this.definition;if(!(R.getParent()&&R.getParent().equals(a.document.getBody())))R.appendTo(a.document.getBody());else R.setStyle('display','block');if(b.gecko&&b.version<10900){var T=this.parts.dialog;T.setStyle('position','absolute');setTimeout(function(){T.setStyle('position','fixed');},0);}this.resize(S.minWidth,S.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);if(a.dialog._.currentZIndex===null)a.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex;this._.element.getFirst().setStyle('z-index',a.dialog._.currentZIndex+=10);if(a.dialog._.currentTop===null){a.dialog._.currentTop=this;this._.parentDialog=null;D(this._.editor);R.on('keydown',H);R.on(b.opera?'keypress':'keyup',I);for(var U in {keyup:1,keydown:1,keypress:1})R.on(U,O);}else{this._.parentDialog=a.dialog._.currentTop;var V=this._.parentDialog.getElement().getFirst();V.$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2);a.dialog._.currentTop=this;}J(this,this,'\x1b',null,function(){this.getButton('cancel')&&this.getButton('cancel').click();});this._.hasFocus=false;e.setTimeout(function(){var W=a.document.getWindow().getViewPaneSize(),X=this.getSize();this.move((W.width-S.minWidth)/2,(W.height-X.height)/2);this.parts.dialog.setStyle('visibility','');this.fireOnce('load',{});this.fire('show',{});this._.editor.fire('dialogShow',this);this.foreach(function(Y){Y.setInitValue&&Y.setInitValue();});},100,this);},foreach:function(P){var S=this;for(var Q in S._.contents)for(var R in S._.contents[Q])P(S._.contents[Q][R]);
return S;},reset:(function(){var P=function(Q){if(Q.reset)Q.reset(1);};return function(){this.foreach(P);return this;};})(),setupContent:function(){var P=arguments;this.foreach(function(Q){if(Q.setup)Q.setup.apply(Q,P);});},commitContent:function(){var P=arguments;this.foreach(function(Q){if(Q.commit)Q.commit.apply(Q,P);});},hide:function(){if(!this.parts.dialog.isVisible())return;this.fire('hide',{});this._.editor.fire('dialogHide',this);var P=this._.element;P.setStyle('display','none');this.parts.dialog.setStyle('visibility','hidden');K(this);while(a.dialog._.currentTop!=this)a.dialog._.currentTop.hide();if(!this._.parentDialog)E();else{var Q=this._.parentDialog.getElement().getFirst();Q.setStyle('z-index',parseInt(Q.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2));}a.dialog._.currentTop=this._.parentDialog;if(!this._.parentDialog){a.dialog._.currentZIndex=null;P.removeListener('keydown',H);P.removeListener(b.opera?'keypress':'keyup',I);for(var R in {keyup:1,keydown:1,keypress:1})P.removeListener(R,O);var S=this._.editor;S.focus();if(S.mode=='wysiwyg'&&c){var T=S.getSelection();T&&T.unlock(true);}}else a.dialog._.currentZIndex-=10;delete this._.parentDialog;this.foreach(function(U){U.resetInitValue&&U.resetInitValue();});},addPage:function(P){var ab=this;var Q=[],R=P.label?' title="'+e.htmlEncode(P.label)+'"':'',S=P.elements,T=a.dialog._.uiElementBuilders.vbox.build(ab,{type:'vbox',className:'cke_dialog_page_contents',children:P.elements,expand:!!P.expand,padding:P.padding,style:P.style||'width: 100%; height: 100%;'},Q),U=h.createFromHtml(Q.join(''));U.setAttribute('role','tabpanel');var V=b,W='cke_'+P.id+'_'+e.getNextNumber(),X=h.createFromHtml(['<a class="cke_dialog_tab"',ab._.pageCount>0?' cke_last':'cke_first',R,!!P.hidden?' style="display:none"':'',' id="',W,'"',V.gecko&&V.version>=10900&&!V.hc?'':' href="javascript:void(0)"',' tabIndex="-1"',' hidefocus="true"',' role="tab">',P.label,'</a>'].join(''));U.setAttribute('aria-labelledby',W);ab._.tabs[P.id]=[X,U];ab._.tabIdList.push(P.id);!P.hidden&&ab._.pageCount++;ab._.lastTab=X;ab.updateStyle();var Y=ab._.contents[P.id]={},Z,aa=T.getChild();while(Z=aa.shift()){Y[Z.id]=Z;if(typeof Z.getChild=='function')aa.push.apply(aa,Z.getChild());}U.setAttribute('name',P.id);U.appendTo(ab.parts.contents);X.unselectable();ab.parts.tabs.append(X);if(P.accessKey){J(ab,ab,'CTRL+'+P.accessKey,M,L);ab._.accessKeyMap['CTRL+'+P.accessKey]=P.id;}},selectPage:function(P){if(this._.currentTabId==P)return;
if(this.fire('selectPage',{page:P,currentPage:this._.currentTabId})===true)return;for(var Q in this._.tabs){var R=this._.tabs[Q][0],S=this._.tabs[Q][1];if(Q!=P){R.removeClass('cke_dialog_tab_selected');S.hide();}S.setAttribute('aria-hidden',Q!=P);}var T=this._.tabs[P];T[0].addClass('cke_dialog_tab_selected');if(b.ie6Compat||b.ie7Compat){q(T[1]);T[1].show();setTimeout(function(){q(T[1],1);},0);}else T[1].show();this._.currentTabId=P;this._.currentTabIndex=e.indexOf(this._.tabIdList,P);},updateStyle:function(){this.parts.dialog[(this._.pageCount===1?'add':'remove')+'Class']('cke_single_page');},hidePage:function(P){var R=this;var Q=R._.tabs[P]&&R._.tabs[P][0];if(!Q||R._.pageCount==1)return;else if(P==R._.currentTabId)R.selectPage(o.call(R));Q.hide();R._.pageCount--;R.updateStyle();},showPage:function(P){var R=this;var Q=R._.tabs[P]&&R._.tabs[P][0];if(!Q)return;Q.show();R._.pageCount++;R.updateStyle();},getElement:function(){return this._.element;},getName:function(){return this._.name;},getContentElement:function(P,Q){var R=this._.contents[P];return R&&R[Q];},getValueOf:function(P,Q){return this.getContentElement(P,Q).getValue();},setValueOf:function(P,Q,R){return this.getContentElement(P,Q).setValue(R);},getButton:function(P){return this._.buttons[P];},click:function(P){return this._.buttons[P].click();},disableButton:function(P){return this._.buttons[P].disable();},enableButton:function(P){return this._.buttons[P].enable();},getPageCount:function(){return this._.pageCount;},getParentEditor:function(){return this._.editor;},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement();},addFocusable:function(P,Q){var S=this;if(typeof Q=='undefined'){Q=S._.focusList.length;S._.focusList.push(new r(S,P,Q));}else{S._.focusList.splice(Q,0,new r(S,P,Q));for(var R=Q+1;R<S._.focusList.length;R++)S._.focusList[R].focusIndex++;}}};e.extend(a.dialog,{add:function(P,Q){if(!this._.dialogDefinitions[P]||typeof Q=='function')this._.dialogDefinitions[P]=Q;},exists:function(P){return!!this._.dialogDefinitions[P];},getCurrent:function(){return a.dialog._.currentTop;},okButton:(function(){var P=function(Q,R){R=R||{};return e.extend({id:'ok',type:'button',label:Q.lang.common.ok,'class':'cke_dialog_ui_button_ok',onClick:function(S){var T=S.data.dialog;if(T.fire('ok',{hide:true}).hide!==false)T.hide();}},R,true);};P.type='button';P.override=function(Q){return e.extend(function(R){return P(R,Q);},{type:'button'},true);};return P;})(),cancelButton:(function(){var P=function(Q,R){R=R||{};
return e.extend({id:'cancel',type:'button',label:Q.lang.common.cancel,'class':'cke_dialog_ui_button_cancel',onClick:function(S){var T=S.data.dialog;if(T.fire('cancel',{hide:true}).hide!==false)T.hide();}},R,true);};P.type='button';P.override=function(Q){return e.extend(function(R){return P(R,Q);},{type:'button'},true);};return P;})(),addUIElement:function(P,Q){this._.uiElementBuilders[P]=Q;}});a.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};a.event.implementOn(a.dialog);a.event.implementOn(a.dialog.prototype,true);var s={resizable:3,minWidth:600,minHeight:400,buttons:[a.dialog.okButton,a.dialog.cancelButton]};b.mac&&s.buttons.reverse();var t=function(P,Q,R){for(var S=0,T;T=P[S];S++){if(T.id==Q)return T;if(R&&T[R]){var U=t(T[R],Q,R);if(U)return U;}}return null;},u=function(P,Q,R,S,T){if(R){for(var U=0,V;V=P[U];U++){if(V.id==R){P.splice(U,0,Q);return Q;}if(S&&V[S]){var W=u(V[S],Q,R,S,true);if(W)return W;}}if(T)return null;}P.push(Q);return Q;},v=function(P,Q,R){for(var S=0,T;T=P[S];S++){if(T.id==Q)return P.splice(S,1);if(R&&T[R]){var U=v(T[R],Q,R);if(U)return U;}}return null;},w=function(P,Q){this.dialog=P;var R=Q.contents;for(var S=0,T;T=R[S];S++)R[S]=T&&new x(P,T);e.extend(this,Q);};w.prototype={getContents:function(P){return t(this.contents,P);},getButton:function(P){return t(this.buttons,P);},addContents:function(P,Q){return u(this.contents,P,Q);},addButton:function(P,Q){return u(this.buttons,P,Q);},removeContents:function(P){v(this.contents,P);},removeButton:function(P){v(this.buttons,P);}};function x(P,Q){this._={dialog:P};e.extend(this,Q);};x.prototype={get:function(P){return t(this.elements,P,'children');},add:function(P,Q){return u(this.elements,P,Q,'children');},remove:function(P){v(this.elements,P,'children');}};function y(P){var Q=null,R=null,S=P.getElement().getFirst(),T=P.getParentEditor(),U=T.config.dialog_magnetDistance,V=T.skin.margins||[0,0,0,0];if(typeof U=='undefined')U=20;function W(Y){var Z=P.getSize(),aa=a.document.getWindow().getViewPaneSize(),ab=Y.data.$.screenX,ac=Y.data.$.screenY,ad=ab-Q.x,ae=ac-Q.y,af,ag;Q={x:ab,y:ac};R.x+=ad;R.y+=ae;if(R.x+V[3]<U)af=-V[3];else if(R.x-V[1]>aa.width-Z.width-U)af=aa.width-Z.width+V[1];else af=R.x;if(R.y+V[0]<U)ag=-V[0];else if(R.y-V[2]>aa.height-Z.height-U)ag=aa.height-Z.height+V[2];else ag=R.y;P.move(af,ag);Y.data.preventDefault();};function X(Y){a.document.removeListener('mousemove',W);a.document.removeListener('mouseup',X);if(b.ie6Compat){var Z=C.getChild(0).getFrameDocument();
Z.removeListener('mousemove',W);Z.removeListener('mouseup',X);}};P.parts.title.on('mousedown',function(Y){P._.updateSize=true;Q={x:Y.data.$.screenX,y:Y.data.$.screenY};a.document.on('mousemove',W);a.document.on('mouseup',X);R=P.getPosition();if(b.ie6Compat){var Z=C.getChild(0).getFrameDocument();Z.on('mousemove',W);Z.on('mouseup',X);}Y.data.preventDefault();},P);};function z(P){var Q=P.definition,R=Q.minWidth||0,S=Q.minHeight||0,T=Q.resizable,U=P.getParentEditor().skin.margins||[0,0,0,0];function V(ag,ah){ag.y+=ah;};function W(ag,ah){ag.x2+=ah;};function X(ag,ah){ag.y2+=ah;};function Y(ag,ah){ag.x+=ah;};var Z=null,aa=null,ab=P._.editor.config.magnetDistance,ac=['tl','t','tr','l','r','bl','b','br'];function ad(ag){var ah=ag.listenerData.part,ai=P.getSize();aa=P.getPosition();e.extend(aa,{x2:aa.x+ai.width,y2:aa.y+ai.height});Z={x:ag.data.$.screenX,y:ag.data.$.screenY};a.document.on('mousemove',ae,P,{part:ah});a.document.on('mouseup',af,P,{part:ah});if(b.ie6Compat){var aj=C.getChild(0).getFrameDocument();aj.on('mousemove',ae,P,{part:ah});aj.on('mouseup',af,P,{part:ah});}ag.data.preventDefault();};function ae(ag){var ah=ag.data.$.screenX,ai=ag.data.$.screenY,aj=ah-Z.x,ak=ai-Z.y,al=a.document.getWindow().getViewPaneSize(),am=ag.listenerData.part;if(am.search('t')!=-1)V(aa,ak);if(am.search('l')!=-1)Y(aa,aj);if(am.search('b')!=-1)X(aa,ak);if(am.search('r')!=-1)W(aa,aj);Z={x:ah,y:ai};var an,ao,ap,aq;if(aa.x+U[3]<ab)an=-U[3];else if(am.search('l')!=-1&&aa.x2-aa.x<R+ab)an=aa.x2-R;else an=aa.x;if(aa.y+U[0]<ab)ao=-U[0];else if(am.search('t')!=-1&&aa.y2-aa.y<S+ab)ao=aa.y2-S;else ao=aa.y;if(aa.x2-U[1]>al.width-ab)ap=al.width+U[1];else if(am.search('r')!=-1&&aa.x2-aa.x<R+ab)ap=aa.x+R;else ap=aa.x2;if(aa.y2-U[2]>al.height-ab)aq=al.height+U[2];else if(am.search('b')!=-1&&aa.y2-aa.y<S+ab)aq=aa.y+S;else aq=aa.y2;P.move(an,ao);P.resize(ap-an,aq-ao);ag.data.preventDefault();};function af(ag){a.document.removeListener('mouseup',af);a.document.removeListener('mousemove',ae);if(b.ie6Compat){var ah=C.getChild(0).getFrameDocument();ah.removeListener('mouseup',af);ah.removeListener('mousemove',ae);}};};var A,B={},C;function D(P){var Q=a.document.getWindow(),R=P.config,S=R.dialog_backgroundCoverColor||'white',T=R.dialog_backgroundCoverOpacity,U=R.baseFloatZIndex,V=e.genKey(S,T,U),W=B[V];if(!W){var X=['<div style="position: ',b.ie6Compat?'absolute':'fixed','; z-index: ',U,'; top: 0px; left: 0px; ',!b.ie6Compat?'background-color: '+S:'','" class="cke_dialog_background_cover">'];if(b.ie6Compat){var Y=b.isCustomDomain(),Z="<html><body style=\\'background-color:"+S+";\\'></body></html>";
X.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:');X.push('void((function(){document.open();'+(Y?"document.domain='"+document.domain+"';":'')+"document.write( '"+Z+"' );"+'document.close();'+'})())');X.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>');}X.push('</div>');W=h.createFromHtml(X.join(''));W.setOpacity(T!=undefined?T:0.5);W.appendTo(a.document.getBody());B[V]=W;}else W.show();C=W;var aa=function(){var ad=Q.getViewPaneSize();W.setStyles({width:ad.width+'px',height:ad.height+'px'});},ab=function(){var ad=Q.getScrollPosition(),ae=a.dialog._.currentTop;W.setStyles({left:ad.x+'px',top:ad.y+'px'});do{var af=ae.getPosition();ae.move(af.x,af.y);}while(ae=ae._.parentDialog)};A=aa;Q.on('resize',aa);aa();if(b.ie6Compat){var ac=function(){ab();arguments.callee.prevScrollHandler.apply(this,arguments);};Q.$.setTimeout(function(){ac.prevScrollHandler=window.onscroll||(function(){});window.onscroll=ac;},0);ab();}};function E(){if(!C)return;var P=a.document.getWindow();C.hide();P.removeListener('resize',A);if(b.ie6Compat)P.$.setTimeout(function(){var Q=window.onscroll&&window.onscroll.prevScrollHandler;window.onscroll=Q||null;},0);A=null;};function F(){for(var P in B)B[P].remove();B={};};var G={},H=function(P){var Q=P.data.$.ctrlKey||P.data.$.metaKey,R=P.data.$.altKey,S=P.data.$.shiftKey,T=String.fromCharCode(P.data.$.keyCode),U=G[(Q?'CTRL+':'')+(R?'ALT+':'')+(S?'SHIFT+':'')+T];if(!U||!U.length)return;U=U[U.length-1];U.keydown&&U.keydown.call(U.uiElement,U.dialog,U.key);P.data.preventDefault();},I=function(P){var Q=P.data.$.ctrlKey||P.data.$.metaKey,R=P.data.$.altKey,S=P.data.$.shiftKey,T=String.fromCharCode(P.data.$.keyCode),U=G[(Q?'CTRL+':'')+(R?'ALT+':'')+(S?'SHIFT+':'')+T];if(!U||!U.length)return;U=U[U.length-1];if(U.keyup){U.keyup.call(U.uiElement,U.dialog,U.key);P.data.preventDefault();}},J=function(P,Q,R,S,T){var U=G[R]||(G[R]=[]);U.push({uiElement:P,dialog:Q,key:R,keyup:T||P.accessKeyUp,keydown:S||P.accessKeyDown});},K=function(P){for(var Q in G){var R=G[Q];for(var S=R.length-1;S>=0;S--){if(R[S].dialog==P||R[S].uiElement==P)R.splice(S,1);}if(R.length===0)delete G[Q];}},L=function(P,Q){if(P._.accessKeyMap[Q])P.selectPage(P._.accessKeyMap[Q]);},M=function(P,Q){},N={27:1,13:1},O=function(P){if(P.data.getKeystroke() in N)P.data.stopPropagation();};(function(){k.dialog={uiElement:function(P,Q,R,S,T,U,V){if(arguments.length<4)return;
var W=(S.call?S(Q):S)||'div',X=['<',W,' '],Y=(T&&T.call?T(Q):T)||{},Z=(U&&U.call?U(Q):U)||{},aa=(V&&V.call?V.call(this,P,Q):V)||'',ab=this.domId=Z.id||e.getNextId()+'_uiElement',ac=this.id=Q.id,ad;Z.id=ab;var ae={};if(Q.type)ae['cke_dialog_ui_'+Q.type]=1;if(Q.className)ae[Q.className]=1;var af=Z['class']&&Z['class'].split?Z['class'].split(' '):[];for(ad=0;ad<af.length;ad++){if(af[ad])ae[af[ad]]=1;}var ag=[];for(ad in ae)ag.push(ad);Z['class']=ag.join(' ');if(Q.title)Z.title=Q.title;var ah=(Q.style||'').split(';');for(ad in Y)ah.push(ad+':'+Y[ad]);if(Q.hidden)ah.push('display:none');for(ad=ah.length-1;ad>=0;ad--){if(ah[ad]==='')ah.splice(ad,1);}if(ah.length>0)Z.style=(Z.style?Z.style+'; ':'')+ah.join('; ');for(ad in Z)X.push(ad+'="'+e.htmlEncode(Z[ad])+'" ');X.push('>',aa,'</',W,'>');R.push(X.join(''));(this._||(this._={})).dialog=P;if(typeof Q.isChanged=='boolean')this.isChanged=function(){return Q.isChanged;};if(typeof Q.isChanged=='function')this.isChanged=Q.isChanged;a.event.implementOn(this);this.registerEvents(Q);if(this.accessKeyUp&&this.accessKeyDown&&Q.accessKey)J(this,P,'CTRL+'+Q.accessKey);var ai=this;P.on('load',function(){if(ai.getInputElement())ai.getInputElement().on('focus',function(){P._.tabBarMode=false;P._.hasFocus=true;ai.fire('focus');},ai);});if(this.keyboardFocusable){this.tabIndex=Q.tabIndex||0;this.focusIndex=P._.focusList.push(this)-1;this.on('focus',function(){P._.currentFocusIndex=ai.focusIndex;});}e.extend(this,Q);},hbox:function(P,Q,R,S,T){if(arguments.length<4)return;this._||(this._={});var U=this._.children=Q,V=T&&T.widths||null,W=T&&T.height||null,X={},Y,Z=function(){var ab=['<tbody><tr class="cke_dialog_ui_hbox">'];for(Y=0;Y<R.length;Y++){var ac='cke_dialog_ui_hbox_child',ad=[];if(Y===0)ac='cke_dialog_ui_hbox_first';if(Y==R.length-1)ac='cke_dialog_ui_hbox_last';ab.push('<td class="',ac,'" role="presentation" ');if(V){if(V[Y])ad.push('width:'+m(V[Y]));}else ad.push('width:'+Math.floor(100/R.length)+'%');if(W)ad.push('height:'+m(W));if(T&&T.padding!=undefined)ad.push('padding:'+m(T.padding));if(ad.length>0)ab.push('style="'+ad.join('; ')+'" ');ab.push('>',R[Y],'</td>');}ab.push('</tr></tbody>');return ab.join('');},aa={role:'presentation'};T&&T.align&&(aa.align=T.align);k.dialog.uiElement.call(this,P,T||{type:'hbox'},S,'table',X,aa,Z);},vbox:function(P,Q,R,S,T){if(arguments.length<3)return;this._||(this._={});var U=this._.children=Q,V=T&&T.width||null,W=T&&T.heights||null,X=function(){var Y=['<table role="presentation" cellspacing="0" border="0" '];
Y.push('style="');if(T&&T.expand)Y.push('height:100%;');Y.push('width:'+m(V||'100%'),';');Y.push('"');Y.push('align="',e.htmlEncode(T&&T.align||(P.getParentEditor().lang.dir=='ltr'?'left':'right')),'" ');Y.push('><tbody>');for(var Z=0;Z<R.length;Z++){var aa=[];Y.push('<tr><td role="presentation" ');if(V)aa.push('width:'+m(V||'100%'));if(W)aa.push('height:'+m(W[Z]));else if(T&&T.expand)aa.push('height:'+Math.floor(100/R.length)+'%');if(T&&T.padding!=undefined)aa.push('padding:'+m(T.padding));if(aa.length>0)Y.push('style="',aa.join('; '),'" ');Y.push(' class="cke_dialog_ui_vbox_child">',R[Z],'</td></tr>');}Y.push('</tbody></table>');return Y.join('');};k.dialog.uiElement.call(this,P,T||{type:'vbox'},S,'div',null,{role:'presentation'},X);}};})();k.dialog.uiElement.prototype={getElement:function(){return a.document.getById(this.domId);},getInputElement:function(){return this.getElement();},getDialog:function(){return this._.dialog;},setValue:function(P,Q){this.getInputElement().setValue(P);!Q&&this.fire('change',{value:P});return this;},getValue:function(){return this.getInputElement().getValue();},isChanged:function(){return false;},selectParentTab:function(){var S=this;var P=S.getInputElement(),Q=P,R;while((Q=Q.getParent())&&Q.$.className.search('cke_dialog_page_contents')==-1){}if(!Q)return S;R=Q.getAttribute('name');if(S._.dialog._.currentTabId!=R)S._.dialog.selectPage(R);return S;},focus:function(){this.selectParentTab().getInputElement().focus();return this;},registerEvents:function(P){var Q=/^on([A-Z]\w+)/,R,S=function(U,V,W,X){V.on('load',function(){U.getInputElement().on(W,X,U);});};for(var T in P){if(!(R=T.match(Q)))continue;if(this.eventProcessors[T])this.eventProcessors[T].call(this,this._.dialog,P[T]);else S(this,this._.dialog,R[1].toLowerCase(),P[T]);}return this;},eventProcessors:{onLoad:function(P,Q){P.on('load',Q,this);},onShow:function(P,Q){P.on('show',Q,this);},onHide:function(P,Q){P.on('hide',Q,this);}},accessKeyDown:function(P,Q){this.focus();},accessKeyUp:function(P,Q){},disable:function(){var P=this.getInputElement();P.setAttribute('disabled','true');P.addClass('cke_disabled');},enable:function(){var P=this.getInputElement();P.removeAttribute('disabled');P.removeClass('cke_disabled');},isEnabled:function(){return!this.getInputElement().getAttribute('disabled');},isVisible:function(){return this.getInputElement().isVisible();},isFocusable:function(){if(!this.isEnabled()||!this.isVisible())return false;return true;}};k.dialog.hbox.prototype=e.extend(new k.dialog.uiElement(),{getChild:function(P){var Q=this;
if(arguments.length<1)return Q._.children.concat();if(!P.splice)P=[P];if(P.length<2)return Q._.children[P[0]];else return Q._.children[P[0]]&&Q._.children[P[0]].getChild?Q._.children[P[0]].getChild(P.slice(1,P.length)):null;}},true);k.dialog.vbox.prototype=new k.dialog.hbox();(function(){var P={build:function(Q,R,S){var T=R.children,U,V=[],W=[];for(var X=0;X<T.length&&(U=T[X]);X++){var Y=[];V.push(Y);W.push(a.dialog._.uiElementBuilders[U.type].build(Q,U,Y));}return new k.dialog[R.type](Q,W,V,S,R);}};a.dialog.addUIElement('hbox',P);a.dialog.addUIElement('vbox',P);})();a.dialogCommand=function(P){this.dialogName=P;};a.dialogCommand.prototype={exec:function(P){P.openDialog(this.dialogName);},canUndo:false,editorFocus:c||b.webkit};(function(){var P=/^([a]|[^a])+$/,Q=/^\d*$/,R=/^\d*(?:\.\d+)?$/;a.VALIDATE_OR=1;a.VALIDATE_AND=2;a.dialog.validate={functions:function(){return function(){var Y=this;var S=Y&&Y.getValue?Y.getValue():arguments[0],T=undefined,U=2,V=[],W;for(W=0;W<arguments.length;W++){if(typeof arguments[W]=='function')V.push(arguments[W]);else break;}if(W<arguments.length&&typeof arguments[W]=='string'){T=arguments[W];W++;}if(W<arguments.length&&typeof arguments[W]=='number')U=arguments[W];var X=U==2?true:false;for(W=0;W<V.length;W++){if(U==2)X=X&&V[W](S);else X=X||V[W](S);}if(!X){if(T!==undefined)alert(T);if(Y&&(Y.select||Y.focus))Y.select||Y.focus();return false;}return true;};},regex:function(S,T){return function(){var V=this;var U=V&&V.getValue?V.getValue():arguments[0];if(!S.test(U)){if(T!==undefined)alert(T);if(V&&(V.select||V.focus))if(V.select)V.select();else V.focus();return false;}return true;};},notEmpty:function(S){return this.regex(P,S);},integer:function(S){return this.regex(Q,S);},number:function(S){return this.regex(R,S);},equals:function(S,T){return this.functions(function(U){return U==S;},T);},notEqual:function(S,T){return this.functions(function(U){return U!=S;},T);}};a.on('instanceDestroyed',function(S){if(e.isEmpty(a.instances)){var T;while(T=a.dialog._.currentTop)T.hide();F();}var U=S.editor._.storedDialogs;for(var V in U)U[V].destroy();});})();})();e.extend(a.editor.prototype,{openDialog:function(m,n){var o=a.dialog._.dialogDefinitions[m],p=this.skin.dialog;if(typeof o=='function'&&p._isLoaded){var q=this._.storedDialogs||(this._.storedDialogs={}),r=q[m]||(q[m]=new a.dialog(this,m));n&&n.call(r,r);r.show();return r;}else if(o=='failed')throw new Error('[CKEDITOR.dialog.openDialog] Dialog "'+m+'" failed when loading definition.');
var s=a.document.getBody(),t=s.$.style.cursor,u=this;s.setStyle('cursor','wait');function v(x){var y=a.dialog._.dialogDefinitions[m],z=u.skin.dialog;if(!z._isLoaded||w&&typeof x=='undefined')return;if(typeof y!='function')a.dialog._.dialogDefinitions[m]='failed';u.openDialog(m,n);s.setStyle('cursor',t);};if(typeof o=='string'){var w=1;a.scriptLoader.load(a.getUrl(o),v);}a.skins.load(this,'dialog',v);return null;}});j.add('dialog',{requires:['dialogui']});j.add('styles',{requires:['selection']});a.editor.prototype.attachStyleStateChange=function(m,n){var o=this._.styleStateChangeCallbacks;if(!o){o=this._.styleStateChangeCallbacks=[];this.on('selectionChange',function(p){for(var q=0;q<o.length;q++){var r=o[q],s=r.style.checkActive(p.data.path)?1:2;if(r.state!==s){r.fn.call(this,s);r.state=s;}}});}o.push({style:m,fn:n});};a.STYLE_BLOCK=1;a.STYLE_INLINE=2;a.STYLE_OBJECT=3;(function(){var m={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1},n={a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1},o=/\s*(?:;\s*|$)/;a.style=function(Q,R){if(R){Q=e.clone(Q);I(Q.attributes,R);I(Q.styles,R);}var S=this.element=(Q.element||'*').toLowerCase();this.type=S=='#'||m[S]?1:n[S]?3:2;this._={definition:Q};};a.style.prototype={apply:function(Q){P.call(this,Q,false);},remove:function(Q){P.call(this,Q,true);},applyToRange:function(Q){var R=this;return(R.applyToRange=R.type==2?p:R.type==1?t:R.type==3?r:null).call(R,Q);},removeFromRange:function(Q){var R=this;return(R.removeFromRange=R.type==2?q:R.type==3?s:null).call(R,Q);},applyToObject:function(Q){G(Q,this);},checkActive:function(Q){var U=this;switch(U.type){case 1:return U.checkElementRemovable(Q.block||Q.blockLimit,true);case 3:case 2:var R=Q.elements;for(var S=0,T;S<R.length;S++){T=R[S];if(U.type==2&&(T==Q.block||T==Q.blockLimit))continue;if(U.type==3&&!(T.getName() in n))continue;if(U.checkElementRemovable(T,true))return true;}}return false;},checkApplicable:function(Q){switch(this.type){case 2:case 1:break;case 3:return Q.lastElement.getAscendant(this.element,true);}return true;},checkElementRemovable:function(Q,R){if(!Q)return false;var S=this._.definition,T;if(Q.getName()==this.element){if(!R&&!Q.hasAttributes())return true;T=J(S);if(T._length){for(var U in T){if(U=='_length')continue;var V=Q.getAttribute(U)||'';if(U=='style'?O(T[U],M(V,false)):T[U]==V){if(!R)return true;}else if(R)return false;}if(R)return true;}else return true;}var W=K(this)[Q.getName()];if(W){if(!(T=W.attributes))return true;
for(var X=0;X<T.length;X++){U=T[X][0];var Y=Q.getAttribute(U);if(Y){var Z=T[X][1];if(Z===null||typeof Z=='string'&&Y==Z||Z.test(Y))return true;}}}return false;},buildPreview:function(){var Q=this._.definition,R=[],S=Q.element;if(S=='bdo')S='span';R=['<',S];var T=Q.attributes;if(T)for(var U in T)R.push(' ',U,'="',T[U],'"');var V=a.style.getStyleText(Q);if(V)R.push(' style="',V,'"');R.push('>',Q.name,'</',S,'>');return R.join('');}};a.style.getStyleText=function(Q){var R=Q._ST;if(R)return R;R=Q.styles;var S=Q.attributes&&Q.attributes.style||'',T='';if(S.length)S=S.replace(o,';');for(var U in R){var V=R[U],W=(U+':'+V).replace(o,';');if(V=='inherit')T+=W;else S+=W;}if(S.length)S=M(S);S+=T;return Q._ST=S;};function p(Q){var ap=this;var R=Q.document;if(Q.collapsed){var S=F(ap,R);Q.insertNode(S);Q.moveToPosition(S,2);return;}var T=ap.element,U=ap._.definition,V,W=f[T]||(V=true,f.span);Q.enlarge(1);Q.trim();var X=Q.createBookmark(),Y=X.startNode,Z=X.endNode,aa=Y,ab;while(aa){var ac=false;if(aa.equals(Z)){aa=null;ac=true;}else{var ad=aa.type,ae=ad==1?aa.getName():null;if(ae&&aa.getAttribute('_cke_bookmark')){aa=aa.getNextSourceNode(true);continue;}if(!ae||W[ae]&&(aa.getPosition(Z)|4|0|8)==4+0+8&&(!U.childRule||U.childRule(aa))){var af=aa.getParent();if(af&&((af.getDtd()||f.span)[T]||V)&&(!U.parentRule||U.parentRule(af))){if(!ab&&(!ae||!f.$removeEmpty[ae]||(aa.getPosition(Z)|4|0|8)==4+0+8)){ab=new d.range(R);ab.setStartBefore(aa);}if(ad==3||ad==1&&!aa.getChildCount()){var ag=aa,ah;while(!ag.$.nextSibling&&(ah=ag.getParent(),W[ah.getName()])&&(ah.getPosition(Y)|2|0|8)==2+0+8&&(!U.childRule||U.childRule(ah)))ag=ah;ab.setEndAfter(ag);if(!ag.$.nextSibling)ac=true;}}else ac=true;}else ac=true;aa=aa.getNextSourceNode();}if(ac&&ab&&!ab.collapsed){var ai=F(ap,R),aj=ai.hasAttributes(),ak=ab.getCommonAncestor(),al={styles:{},attrs:{},blockedStyles:{},blockedAttrs:{}},am,an,ao;while(ai&&ak){if(ak.getName()==T){for(am in U.attributes){if(al.blockedAttrs[am]||!(ao=ak.getAttribute(an)))continue;if(ai.getAttribute(am)==ao)al.attrs[am]=1;else al.blockedAttrs[am]=1;}for(an in U.styles){if(al.blockedStyles[an]||!(ao=ak.getStyle(an)))continue;if(ai.getStyle(an)==ao)al.styles[an]=1;else al.blockedStyles[an]=1;}}ak=ak.getParent();}for(am in al.attrs)ai.removeAttribute(am);for(an in al.styles)ai.removeStyle(an);if(aj&&!ai.hasAttributes())ai=null;if(ai){ab.extractContents().appendTo(ai);C(ap,ai);ab.insertNode(ai);ai.mergeSiblings();if(!c)ai.$.normalize();}else{ai=new h('span');ab.extractContents().appendTo(ai);
ab.insertNode(ai);C(ap,ai);ai.remove(true);}ab=null;}}Q.moveToBookmark(X);Q.shrink(2);};function q(Q){Q.enlarge(1);var R=Q.createBookmark(),S=R.startNode;if(Q.collapsed){var T=new d.elementPath(S.getParent()),U;for(var V=0,W;V<T.elements.length&&(W=T.elements[V]);V++){if(W==T.block||W==T.blockLimit)break;if(this.checkElementRemovable(W)){var X;if(Q.collapsed&&(Q.checkBoundaryOfElement(W,2)||(X=Q.checkBoundaryOfElement(W,1)))){U=W;U.match=X?'start':'end';}else{W.mergeSiblings();B(this,W);}}}if(U){var Y=S;for(V=0;true;V++){var Z=T.elements[V];if(Z.equals(U))break;else if(Z.match)continue;else Z=Z.clone();Z.append(Y);Y=Z;}Y[U.match=='start'?'insertBefore':'insertAfter'](U);}}else{var aa=R.endNode,ab=this;function ac(){var af=new d.elementPath(S.getParent()),ag=new d.elementPath(aa.getParent()),ah=null,ai=null;for(var aj=0;aj<af.elements.length;aj++){var ak=af.elements[aj];if(ak==af.block||ak==af.blockLimit)break;if(ab.checkElementRemovable(ak))ah=ak;}for(aj=0;aj<ag.elements.length;aj++){ak=ag.elements[aj];if(ak==ag.block||ak==ag.blockLimit)break;if(ab.checkElementRemovable(ak))ai=ak;}if(ai)aa.breakParent(ai);if(ah)S.breakParent(ah);};ac();var ad=S.getNext();while(!ad.equals(aa)){var ae=ad.getNextSourceNode();if(ad.type==1&&this.checkElementRemovable(ad)){if(ad.getName()==this.element)B(this,ad);else D(ad,K(this)[ad.getName()]);if(ae.type==1&&ae.contains(S)){ac();ae=S.getNext();}}ad=ae;}}Q.moveToBookmark(R);};function r(Q){var R=Q.getCommonAncestor(true,true),S=R.getAscendant(this.element,true);S&&G(S,this);};function s(Q){var R=Q.getCommonAncestor(true,true),S=R.getAscendant(this.element,true);if(!S)return;var T=this,U=T._.definition,V=U.attributes,W=a.style.getStyleText(U);if(V)for(var X in V)S.removeAttribute(X,V[X]);if(U.styles)for(var Y in U.styles){if(!U.styles.hasOwnProperty(Y))continue;S.removeStyle(Y);}};function t(Q){var R=Q.createBookmark(true),S=Q.createIterator();S.enforceRealBlocks=true;if(this._.enterMode)S.enlargeBr=this._.enterMode!=2;var T,U=Q.document,V;while(T=S.getNextParagraph()){var W=F(this,U,T);u(T,W);}Q.moveToBookmark(R);};function u(Q,R){var S=R.is('pre'),T=Q.is('pre'),U=S&&!T,V=!S&&T;if(U)R=A(Q,R);else if(V)R=z(x(Q),R);else Q.moveChildren(R);R.replace(Q);if(S)w(R);};var v=d.walker.whitespaces(true);function w(Q){var R;if(!((R=Q.getPrevious(v))&&R.is&&R.is('pre')))return;var S=y(R.getHtml(),/\n$/,'')+'\n\n'+y(Q.getHtml(),/^\n/,'');if(c)Q.$.outerHTML='<pre>'+S+'</pre>';else Q.setHtml(S);R.remove();};function x(Q){var R=/(\S\s*)\n(?:\s|(<span[^>]+_cke_bookmark.*?\/span>))*\n(?!$)/gi,S=Q.getName(),T=y(Q.getOuterHtml(),R,function(V,W,X){return W+'</pre>'+X+'<pre>';
}),U=[];T.replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(V,W){U.push(W);});return U;};function y(Q,R,S){var T='',U='';Q=Q.replace(/(^<span[^>]+_cke_bookmark.*?\/span>)|(<span[^>]+_cke_bookmark.*?\/span>$)/gi,function(V,W,X){W&&(T=W);X&&(U=X);return '';});return T+Q.replace(R,S)+U;};function z(Q,R){var S=new d.documentFragment(R.getDocument());for(var T=0;T<Q.length;T++){var U=Q[T];U=U.replace(/(\r\n|\r)/g,'\n');U=y(U,/^[ \t]*\n/,'');U=y(U,/\n$/,'');U=y(U,/^[ \t]+|[ \t]+$/g,function(W,X,Y){if(W.length==1)return '&nbsp;';else if(!X)return e.repeat('&nbsp;',W.length-1)+' ';else return ' '+e.repeat('&nbsp;',W.length-1);});U=U.replace(/\n/g,'<br>');U=U.replace(/[ \t]{2,}/g,function(W){return e.repeat('&nbsp;',W.length-1)+' ';});var V=R.clone();V.setHtml(U);S.append(V);}return S;};function A(Q,R){var S=Q.getHtml();S=y(S,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,'');S=S.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,'$1');S=S.replace(/([ \t\n\r]+|&nbsp;)/g,' ');S=S.replace(/<br\b[^>]*>/gi,'\n');if(c){var T=Q.getDocument().createElement('div');T.append(R);R.$.outerHTML='<pre>'+S+'</pre>';R=T.getFirst().remove();}else R.setHtml(S);return R;};function B(Q,R){var S=Q._.definition,T=e.extend({},S.attributes,K(Q)[R.getName()]),U=S.styles,V=e.isEmpty(T)&&e.isEmpty(U);for(var W in T){if((W=='class'||Q._.definition.fullMatch)&&R.getAttribute(W)!=L(W,T[W]))continue;V=R.hasAttribute(W);R.removeAttribute(W);}for(var X in U){if(Q._.definition.fullMatch&&R.getStyle(X)!=L(X,U[X],true))continue;V=V||!!R.getStyle(X);R.removeStyle(X);}V&&E(R);};function C(Q,R){var S=Q._.definition,T=S.attributes,U=S.styles,V=K(Q),W=R.getElementsByTag(Q.element);for(var X=W.count();--X>=0;)B(Q,W.getItem(X));for(var Y in V){if(Y!=Q.element){W=R.getElementsByTag(Y);for(X=W.count()-1;X>=0;X--){var Z=W.getItem(X);D(Z,V[Y]);}}}};function D(Q,R){var S=R&&R.attributes;if(S)for(var T=0;T<S.length;T++){var U=S[T][0],V;if(V=Q.getAttribute(U)){var W=S[T][1];if(W===null||W.test&&W.test(V)||typeof W=='string'&&V==W)Q.removeAttribute(U);}}E(Q);};function E(Q){if(!Q.hasAttributes()){var R=Q.getFirst(),S=Q.getLast();Q.remove(true);if(R){R.type==1&&R.mergeSiblings();if(S&&!R.equals(S)&&S.type==1)S.mergeSiblings();}}};function F(Q,R,S){var T,U=Q._.definition,V=Q.element;if(V=='*')V='span';T=new h(V,R);if(S)S.copyAttributes(T);return G(T,Q);};function G(Q,R){var S=R._.definition,T=S.attributes,U=a.style.getStyleText(S);if(T)for(var V in T)Q.setAttribute(V,T[V]);if(U)Q.setAttribute('style',U);return Q;};var H=/#\((.+?)\)/g;function I(Q,R){for(var S in Q)Q[S]=Q[S].replace(H,function(T,U){return R[U];
});};function J(Q){var R=Q._AC;if(R)return R;R={};var S=0,T=Q.attributes;if(T)for(var U in T){S++;R[U]=T[U];}var V=a.style.getStyleText(Q);if(V){if(!R.style)S++;R.style=V;}R._length=S;return Q._AC=R;};function K(Q){if(Q._.overrides)return Q._.overrides;var R=Q._.overrides={},S=Q._.definition.overrides;if(S){if(!e.isArray(S))S=[S];for(var T=0;T<S.length;T++){var U=S[T],V,W,X;if(typeof U=='string')V=U.toLowerCase();else{V=U.element?U.element.toLowerCase():Q.element;X=U.attributes;}W=R[V]||(R[V]={});if(X){var Y=W.attributes=W.attributes||[];for(var Z in X)Y.push([Z.toLowerCase(),X[Z]]);}}}return R;};function L(Q,R,S){var T=new h('span');T[S?'setStyle':'setAttribute'](Q,R);return T[S?'getStyle':'getAttribute'](Q);};function M(Q,R){var S;if(R!==false){var T=new h('span');T.setAttribute('style',Q);S=T.getAttribute('style')||'';}else S=Q;return S.replace(/\s*([;:])\s*/,'$1').replace(/([^\s;])$/,'$1;').replace(/,\s+/g,',').replace(/\"/g,'').toLowerCase();};function N(Q){var R={};Q.replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(S,T,U){R[T]=U;});return R;};function O(Q,R){typeof Q=='string'&&(Q=N(Q));typeof R=='string'&&(R=N(R));for(var S in Q){if(!(S in R&&(R[S]==Q[S]||Q[S]=='inherit'||R[S]=='inherit')))return false;}return true;};function P(Q,R){var S=Q.getSelection(),T=S.createBookmarks(1),U=S.getRanges(1),V=R?this.removeFromRange:this.applyToRange,W,X=U.createIterator();while(W=X.getNextRange())V.call(this,W);if(T.length==1&&T[0].collapsed){S.selectRanges(U);Q.getById(T[0].startNode).remove();}else S.selectBookmarks(T);};})();a.styleCommand=function(m){this.style=m;};a.styleCommand.prototype.exec=function(m){var o=this;m.focus();var n=m.document;if(n)if(o.state==2)o.style.apply(n);else if(o.state==1)o.style.remove(n);return!!n;};a.stylesSet=new a.resourceManager('','stylesSet');a.addStylesSet=e.bind(a.stylesSet.add,a.stylesSet);a.loadStylesSet=function(m,n,o){a.stylesSet.addExternal(m,n,'');a.stylesSet.load(m,o);};a.editor.prototype.getStylesSet=function(m){if(!this._.stylesDefinitions){var n=this,o=n.config.stylesCombo_stylesSet||n.config.stylesSet||'default';if(o instanceof Array){n._.stylesDefinitions=o;m(o);return;}var p=o.split(':'),q=p[0],r=p[1],s=j.registered.styles.path;a.stylesSet.addExternal(q,r?p.slice(1).join(':'):s+'styles/'+q+'.js','');a.stylesSet.load(q,function(t){n._.stylesDefinitions=t[q];m(n._.stylesDefinitions);});}else m(this._.stylesDefinitions);};j.add('domiterator');(function(){function m(p){var q=this;if(arguments.length<1)return;
q.range=p;q.forceBrBreak=0;q.enlargeBr=1;q.enforceRealBlocks=0;q._||(q._={});};var n=/^[\r\n\t ]+$/,o=d.walker.bookmark();m.prototype={getNextParagraph:function(p){var q,r,s,t,u,v;if(!this._.lastNode){r=this.range.clone();r.shrink(1,true);t=r.endContainer.hasAscendant('pre',true)||r.startContainer.hasAscendant('pre',true);r.enlarge(this.forceBrBreak&&!t||!this.enlargeBr?3:2);var w=new d.walker(r),x=d.walker.bookmark(true,true);w.evaluator=x;this._.nextNode=w.next();w=new d.walker(r);w.evaluator=x;var y=w.previous();this._.lastNode=y.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==3&&!e.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){var z=new d.range(r.document);z.moveToPosition(this._.lastNode,4);if(z.checkEndOfBlock()){var A=new d.elementPath(z.endContainer),B=A.block||A.blockLimit;this._.lastNode=B.getNextSourceNode(true);}}if(!this._.lastNode){this._.lastNode=this._.docEndMarker=r.document.createText('');this._.lastNode.insertAfter(y);}r=null;}var C=this._.nextNode;y=this._.lastNode;this._.nextNode=null;while(C){var D=0,E=C.hasAscendant('pre'),F=C.type!=1,G=0;if(!F){var H=C.getName();if(C.isBlockBoundary(this.forceBrBreak&&!E&&{br:1})){if(H=='br')F=1;else if(!r&&!C.getChildCount()&&H!='hr'){q=C;s=C.equals(y);break;}if(r){r.setEndAt(C,3);if(H!='br')this._.nextNode=C;}D=1;}else{if(C.getFirst()){if(!r){r=new d.range(this.range.document);r.setStartAt(C,3);}C=C.getFirst();continue;}F=1;}}else if(C.type==3)if(n.test(C.getText()))F=0;if(F&&!r){r=new d.range(this.range.document);r.setStartAt(C,3);}s=(!D||F)&&C.equals(y);if(r&&!D)while(!C.getNext()&&!s){var I=C.getParent();if(I.isBlockBoundary(this.forceBrBreak&&!E&&{br:1})){D=1;s=s||I.equals(y);break;}C=I;F=1;s=C.equals(y);G=1;}if(F)r.setEndAt(C,4);C=C.getNextSourceNode(G,null,y);s=!C;if(s||D&&r)break;}if(!q){if(!r){this._.docEndMarker&&this._.docEndMarker.remove();this._.nextNode=null;return null;}var J=new d.elementPath(r.startContainer),K=J.blockLimit,L={div:1,th:1,td:1};q=J.block;if(!q&&!this.enforceRealBlocks&&L[K.getName()]&&r.checkStartOfBlock()&&r.checkEndOfBlock())q=K;else if(!q||this.enforceRealBlocks&&q.getName()=='li'){q=this.range.document.createElement(p||'p');r.extractContents().appendTo(q);q.trim();r.insertNode(q);u=v=true;}else if(q.getName()!='li'){if(!r.checkStartOfBlock()||!r.checkEndOfBlock()){q=q.clone(false);r.extractContents().appendTo(q);q.trim();var M=r.splitBlock();u=!M.wasStartOfBlock;v=!M.wasEndOfBlock;r.insertNode(q);}}else if(!s)this._.nextNode=q.equals(y)?null:r.getBoundaryNodes().endNode.getNextSourceNode(true,null,y);
}var N=d.walker.bookmark(false,true);if(u){var O=q.getPrevious();if(O&&O.type==1)if(O.getName()=='br')O.remove();else if(O.getLast()&&O.getLast().$.nodeName.toLowerCase()=='br')O.getLast().remove();}if(v){var P=q.getLast();if(P&&P.type==1&&P.getName()=='br')if(c||P.getPrevious(N)||P.getNext(N))P.remove();}if(!this._.nextNode)this._.nextNode=s||q.equals(y)?null:q.getNextSourceNode(true,null,y);if(!N(this._.nextNode))this._.nextNode=this._.nextNode.getNextSourceNode(true,null,function(Q){return!Q.equals(y)&&N(Q);});return q;}};d.range.prototype.createIterator=function(){return new m(this);};})();j.add('panelbutton',{requires:['button'],beforeInit:function(m){m.ui.addHandler(4,k.panelButton.handler);}});a.UI_PANELBUTTON=4;(function(){var m=function(n){var p=this;var o=p._;if(o.state==0)return;p.createPanel(n);if(o.on){o.panel.hide();return;}o.panel.showBlock(p._.id,p.document.getById(p._.id),4);};k.panelButton=e.createClass({base:k.button,$:function(n){var p=this;var o=n.panel;delete n.panel;p.base(n);p.document=o&&o.parent&&o.parent.getDocument()||a.document;o.block={attributes:o.attributes};p.hasArrow=true;p.click=m;p._={panelDefinition:o};},statics:{handler:{create:function(n){return new k.panelButton(n);}}},proto:{createPanel:function(n){var o=this._;if(o.panel)return;var p=this._.panelDefinition||{},q=this._.panelDefinition.block,r=p.parent||a.document.getBody(),s=this._.panel=new k.floatPanel(n,r,p),t=s.addBlock(o.id,q),u=this;s.onShow=function(){if(u.className)this.element.getFirst().addClass(u.className+'_panel');o.oldState=u._.state;u.setState(1);o.on=1;if(u.onOpen)u.onOpen();};s.onHide=function(v){if(u.className)this.element.getFirst().removeClass(u.className+'_panel');u.setState(o.oldState);o.on=0;if(!v&&u.onClose)u.onClose();};s.onEscape=function(){s.hide();u.document.getById(o.id).focus();};if(this.onBlock)this.onBlock(s,t);t.onHide=function(){o.on=0;u.setState(2);};}}});})();j.add('floatpanel',{requires:['panel']});(function(){var m={},n=false;function o(p,q,r,s,t){var u=e.genKey(q.getUniqueId(),r.getUniqueId(),p.skinName,p.lang.dir,p.uiColor||'',s.css||'',t||''),v=m[u];if(!v){v=m[u]=new k.panel(q,s);v.element=r.append(h.createFromHtml(v.renderHtml(p),q));v.element.setStyles({display:'none',position:'absolute'});}return v;};k.floatPanel=e.createClass({$:function(p,q,r,s){r.forceIFrame=1;var t=q.getDocument(),u=o(p,t,q,r,s||0),v=u.element,w=v.getFirst().getFirst();this.element=v;this._={panel:u,parentElement:q,definition:r,document:t,iframe:w,children:[],dir:p.lang.dir};
},proto:{addBlock:function(p,q){return this._.panel.addBlock(p,q);},addListBlock:function(p,q){return this._.panel.addListBlock(p,q);},getBlock:function(p){return this._.panel.getBlock(p);},showBlock:function(p,q,r,s,t){var u=this._.panel,v=u.showBlock(p);this.allowBlur(false);n=1;var w=this.element,x=this._.iframe,y=this._.definition,z=q.getDocumentPosition(w.getDocument()),A=this._.dir=='rtl',B=z.x+(s||0),C=z.y+(t||0);if(A&&(r==1||r==4))B+=q.$.offsetWidth;else if(!A&&(r==2||r==3))B+=q.$.offsetWidth-1;if(r==3||r==4)C+=q.$.offsetHeight-1;this._.panel._.offsetParentId=q.getId();w.setStyles({top:0,left:0,display:''});w.setOpacity(0);w.getFirst().removeStyle('width');if(!this._.blurSet){var D=c?x:new d.window(x.$.contentWindow);a.event.useCapture=true;D.on('blur',function(E){var G=this;if(!G.allowBlur())return;var F;if(c&&!G.allowBlur()||(F=E.data.getTarget())&&F.getName&&F.getName()!='iframe')return;if(G.visible&&!G._.activeChild&&!n)G.hide();},this);D.on('focus',function(){this._.focused=true;this.hideChild();this.allowBlur(true);},this);a.event.useCapture=false;this._.blurSet=1;}u.onEscape=e.bind(function(E){if(this.onEscape&&this.onEscape(E)===false)return false;},this);e.setTimeout(function(){if(A)B-=w.$.offsetWidth;var E=e.bind(function(){var F=w.getFirst();if(v.autoSize){var G=v.element.$;if(b.gecko||b.opera)G=G.parentNode;if(c)G=G.document.body;var H=G.scrollWidth;if(c&&b.quirks&&H>0)H+=(F.$.offsetWidth||0)-(F.$.clientWidth||0);H+=4;F.setStyle('width',H+'px');v.element.addClass('cke_frameLoaded');var I=v.element.$.scrollHeight;if(c&&b.quirks&&I>0)I+=(F.$.offsetHeight||0)-(F.$.clientHeight||0);F.setStyle('height',I+'px');u._.currentBlock.element.setStyle('display','none').removeStyle('display');}else F.removeStyle('height');var J=u.element,K=J.getWindow(),L=K.getScrollPosition(),M=K.getViewPaneSize(),N={height:J.$.offsetHeight,width:J.$.offsetWidth};if(A?B<0:B+N.width>M.width+L.x)B+=N.width*(A?1:-1);if(C+N.height>M.height+L.y)C-=N.height;if(c){var O=new h(w.$.offsetParent),P=O;if(P.getName()=='html')P=P.getDocument().getBody();if(P.getComputedStyle('direction')=='rtl')if(b.ie8Compat)B-=w.getDocument().getDocumentElement().$.scrollLeft*2;else B-=O.$.scrollWidth-O.$.clientWidth;}var Q=w.getFirst(),R;if(R=Q.getCustomData('activePanel'))R.onHide&&R.onHide.call(this,1);Q.setCustomData('activePanel',this);w.setStyles({top:C+'px',left:B+'px'});w.setOpacity(1);},this);u.isLoaded?E():u.onLoad=E;e.setTimeout(function(){x.$.contentWindow.focus();this.allowBlur(true);
},0,this);},0,this);this.visible=1;if(this.onShow)this.onShow.call(this);n=0;},hide:function(){var p=this;if(p.visible&&(!p.onHide||p.onHide.call(p)!==true)){p.hideChild();p.element.setStyle('display','none');p.visible=0;p.element.getFirst().removeCustomData('activePanel');}},allowBlur:function(p){var q=this._.panel;if(p!=undefined)q.allowBlur=p;return q.allowBlur;},showAsChild:function(p,q,r,s,t,u){if(this._.activeChild==p&&p._.panel._.offsetParentId==r.getId())return;this.hideChild();p.onHide=e.bind(function(){e.setTimeout(function(){if(!this._.focused)this.hide();},0,this);},this);this._.activeChild=p;this._.focused=false;p.showBlock(q,r,s,t,u);if(b.ie7Compat||b.ie8&&b.ie6Compat)setTimeout(function(){p.element.getChild(0).$.style.cssText+='';},100);},hideChild:function(){var p=this._.activeChild;if(p){delete p.onHide;delete this._.activeChild;p.hide();}}}});a.on('instanceDestroyed',function(){var p=e.isEmpty(a.instances);for(var q in m){var r=m[q];if(p)r.destroy();else r.element.hide();}p&&(m={});});})();j.add('menu',{beforeInit:function(m){var n=m.config.menu_groups.split(','),o=m._.menuGroups={},p=m._.menuItems={};for(var q=0;q<n.length;q++)o[n[q]]=q+1;m.addMenuGroup=function(r,s){o[r]=s||100;};m.addMenuItem=function(r,s){if(o[s.group])p[r]=new a.menuItem(this,r,s);};m.addMenuItems=function(r){for(var s in r)this.addMenuItem(s,r[s]);};m.getMenuItem=function(r){return p[r];};},requires:['floatpanel']});(function(){a.menu=e.createClass({$:function(n,o){var r=this;o=r._.definition=o||{};r.id='cke_'+e.getNextNumber();r.editor=n;r.items=[];r._.level=o.level||1;var p=e.extend({},o.panel,{css:n.skin.editor.css,level:r._.level-1,block:{}}),q=p.block.attributes=p.attributes||{};!q.role&&(q.role='menu');r._.panelDefinition=p;},_:{showSubMenu:function(n){var v=this;var o=v._.subMenu,p=v.items[n],q=p.getItems&&p.getItems();if(!q){v._.panel.hideChild();return;}var r=v._.panel.getBlock(v.id);r._.focusIndex=n;if(o)o.removeAll();else{o=v._.subMenu=new a.menu(v.editor,e.extend({},v._.definition,{level:v._.level+1},true));o.parent=v;o.onClick=e.bind(v.onClick,v);o.onEscape=v.onEscape;}for(var s in q){var t=v.editor.getMenuItem(s);if(t){t.state=q[s];o.add(t);}}var u=v._.panel.getBlock(v.id).element.getDocument().getById(v.id+String(n));o.show(u,2);}},proto:{add:function(n){if(!n.order)n.order=this.items.length;this.items.push(n);},removeAll:function(){this.items=[];},show:function(n,o,p,q){var r=this.items,s=this.editor,t=this._.panel,u=this._.element;if(!t){t=this._.panel=new k.floatPanel(this.editor,a.document.getBody(),this._.panelDefinition,this._.level);
t.onEscape=e.bind(function(F){if(this.onEscape&&this.onEscape(F)===false)return false;},this);t.onHide=e.bind(function(){this.onHide&&this.onHide();},this);var v=t.addBlock(this.id,this._.panelDefinition.block);v.autoSize=true;var w=v.keys;w[40]='next';w[9]='next';w[38]='prev';w[2000+9]='prev';w[32]='click';w[s.lang.dir=='rtl'?37:39]='click';u=this._.element=v.element;u.addClass(s.skinClass);var x=u.getDocument();x.getBody().setStyle('overflow','hidden');x.getElementsByTag('html').getItem(0).setStyle('overflow','hidden');this._.itemOverFn=e.addFunction(function(F){var G=this;clearTimeout(G._.showSubTimeout);G._.showSubTimeout=e.setTimeout(G._.showSubMenu,s.config.menu_subMenuDelay||400,G,[F]);},this);this._.itemOutFn=e.addFunction(function(F){clearTimeout(this._.showSubTimeout);},this);this._.itemClickFn=e.addFunction(function(F){var H=this;var G=H.items[F];if(G.state==0){H.hide();return;}if(G.getItems)H._.showSubMenu(F);else H.onClick&&H.onClick(G);},this);}m(r);var y=s.container.getChild(1),z=y.hasClass('cke_mixed_dir_content')?' cke_mixed_dir_content':'',A=['<div class="cke_menu'+z+'" role="presentation">'],B=r.length,C=B&&r[0].group;for(var D=0;D<B;D++){var E=r[D];if(C!=E.group){A.push('<div class="cke_menuseparator" role="separator"></div>');C=E.group;}E.render(this,D,A);}A.push('</div>');u.setHtml(A.join(''));if(this.parent)this.parent._.panel.showAsChild(t,this.id,n,o,p,q);else t.showBlock(this.id,n,o,p,q);s.fire('menuShow',[t]);},hide:function(){this._.panel&&this._.panel.hide();}}});function m(n){n.sort(function(o,p){if(o.group<p.group)return-1;else if(o.group>p.group)return 1;return o.order<p.order?-1:o.order>p.order?1:0;});};})();a.menuItem=e.createClass({$:function(m,n,o){var p=this;e.extend(p,o,{order:0,className:'cke_button_'+n});p.group=m._.menuGroups[p.group];p.editor=m;p.name=n;},proto:{render:function(m,n,o){var v=this;var p=m.id+String(n),q=typeof v.state=='undefined'?2:v.state,r=' cke_'+(q==1?'on':q==0?'disabled':'off'),s=v.label;if(v.className)r+=' '+v.className;var t=v.getItems;o.push('<span class="cke_menuitem"><a id="',p,'" class="',r,'" href="javascript:void(\'',(v.label||'').replace("'",''),'\')" title="',v.label,'" tabindex="-1"_cke_focus=1 hidefocus="true" role="menuitem"'+(t?'aria-haspopup="true"':'')+(q==0?'aria-disabled="true"':'')+(q==1?'aria-pressed="true"':''));if(b.opera||b.gecko&&b.mac)o.push(' onkeypress="return false;"');if(b.gecko)o.push(' onblur="this.style.cssText = this.style.cssText;"');var u=(v.iconOffset||0)*-16;
o.push(' onmouseover="CKEDITOR.tools.callFunction(',m._.itemOverFn,',',n,');" onmouseout="CKEDITOR.tools.callFunction(',m._.itemOutFn,',',n,');" onclick="CKEDITOR.tools.callFunction(',m._.itemClickFn,',',n,'); return false;"><span class="cke_icon_wrapper"><span class="cke_icon"'+(v.icon?' style="background-image:url('+a.getUrl(v.icon)+');background-position:0 '+u+'px;"':'')+'></span></span>'+'<span class="cke_label">');if(t)o.push('<span class="cke_menuarrow">','<span>&#',v.editor.lang.dir=='rtl'?'9668':'9658',';</span>','</span>');o.push(s,'</span></a></span>');}}});i.menu_groups='clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div';(function(){var m=function(o,p){return o._.modes&&o._.modes[p||o.mode];},n;j.add('editingblock',{init:function(o){if(!o.config.editingBlock)return;o.on('themeSpace',function(p){if(p.data.space=='contents')p.data.html+='<br>';});o.on('themeLoaded',function(){o.fireOnce('editingBlockReady');});o.on('uiReady',function(){o.setMode(o.config.startupMode);});o.on('afterSetData',function(){if(!n){function p(){n=true;m(o).loadData(o.getData());n=false;};if(o.mode)p();else o.on('mode',function(){p();o.removeListener('mode',arguments.callee);});}});o.on('beforeGetData',function(){if(!n&&o.mode){n=true;o.setData(m(o).getData());n=false;}});o.on('getSnapshot',function(p){if(o.mode)p.data=m(o).getSnapshotData();});o.on('loadSnapshot',function(p){if(o.mode)m(o).loadSnapshotData(p.data);});o.on('mode',function(p){p.removeListener();b.webkit&&o.container.on('focus',function(){o.focus();});if(o.config.startupFocus)o.focus();setTimeout(function(){o.fireOnce('instanceReady');a.fire('instanceReady',null,o);},0);});}});a.editor.prototype.mode='';a.editor.prototype.addMode=function(o,p){p.name=o;(this._.modes||(this._.modes={}))[o]=p;};a.editor.prototype.setMode=function(o){var p,q=this.getThemeSpace('contents'),r=this.checkDirty();if(this.mode){if(o==this.mode)return;this.fire('beforeModeUnload');var s=m(this);p=s.getData();s.unload(q);this.mode='';}q.setHtml('');var t=m(this,o);if(!t)throw '[CKEDITOR.editor.setMode] Unknown mode "'+o+'".';if(!r)this.on('mode',function(){this.resetDirty();this.removeListener('mode',arguments.callee);});t.load(q,typeof p!='string'?this.getData():p);};a.editor.prototype.focus=function(){var o=m(this);if(o)o.focus();};})();i.startupMode='wysiwyg';i.editingBlock=true;(function(){function m(){var w=this;
try{var t=w.getSelection();if(!t||!t.document.getWindow().$)return;var u=t.getStartElement(),v=new d.elementPath(u);if(!v.compare(w._.selectionPreviousPath)){w._.selectionPreviousPath=v;w.fire('selectionChange',{selection:t,path:v,element:u});}}catch(x){}};var n,o;function p(){o=true;if(n)return;q.call(this);n=e.setTimeout(q,200,this);};function q(){n=null;if(o){e.setTimeout(m,0,this);o=false;}};var r={modes:{wysiwyg:1,source:1},exec:function(t){switch(t.mode){case 'wysiwyg':t.document.$.execCommand('SelectAll',false,null);break;case 'source':var u=t.textarea.$;if(c)u.createTextRange().execCommand('SelectAll');else{u.selectionStart=0;u.selectionEnd=u.value.length;}u.focus();}},canUndo:false};j.add('selection',{init:function(t){t.on('contentDom',function(){var u=t.document,v=u.getBody(),w=u.getDocumentElement();if(c){var x,y,z=1;v.on('focusin',function(D){if(D.data.$.srcElement.nodeName!='BODY')return;if(x){var E=u.getCustomData('cke_locked_selection');if(z&&!E)try{x.select();}catch(F){}x=null;}});v.on('focus',function(){y=1;C();});v.on('beforedeactivate',function(D){if(D.data.$.toElement)return;y=0;z=1;});if(c&&b.version<8)t.on('blur',function(D){try{t.document&&t.document.$.selection.empty();}catch(E){}});w.on('mousedown',function(){z=0;});w.on('mouseup',function(){z=1;});if(c&&(b.ie7Compat||b.version<8||b.quirks))w.on('click',function(D){if(D.data.getTarget().getName()=='html')t.getSelection().getRanges()[0].select();});var A;v.on('mousedown',function(D){if(D.data.$.button==2){var E=t.document.$.selection;if(E.type=='None')A=t.window.getScrollPosition();}B();});v.on('mouseup',function(D){if(D.data.$.button==2&&A){t.document.$.documentElement.scrollLeft=A.x;t.document.$.documentElement.scrollTop=A.y;}A=null;y=1;setTimeout(function(){C(true);},0);});v.on('keydown',B);v.on('keyup',function(){y=1;C();});u.on('selectionchange',C);function B(){y=0;};function C(D){if(y){var E=t.document,F=t.getSelection(),G=F&&F.getNative();if(D&&G&&G.type=='None')if(!E.$.queryCommandEnabled('InsertImage')){e.setTimeout(C,50,this,true);return;}var H;if(G&&G.type&&G.type!='Control'&&(H=G.createRange())&&(H=H.parentElement())&&(H=H.nodeName)&&H.toLowerCase() in {input:1,textarea:1})return;x=G&&F.getRanges()[0];p.call(t);}};}else{u.on('mouseup',p,t);u.on('keyup',p,t);}});t.addCommand('selectAll',r);t.ui.addButton('SelectAll',{label:t.lang.selectAll,command:'selectAll'});t.selectionChange=p;}});a.editor.prototype.getSelection=function(){return this.document&&this.document.getSelection();
};a.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath;};g.prototype.getSelection=function(){var t=new d.selection(this);return!t||t.isInvalid?null:t;};a.SELECTION_NONE=1;a.SELECTION_TEXT=2;a.SELECTION_ELEMENT=3;d.selection=function(t){var w=this;var u=t.getCustomData('cke_locked_selection');if(u)return u;w.document=t;w.isLocked=0;w._={cache:{}};if(c){var v=w.getNative().createRange();if(!v||v.item&&v.item(0).ownerDocument!=w.document.$||v.parentElement&&v.parentElement().ownerDocument!=w.document.$)w.isInvalid=true;}return w;};var s={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,th:1,thead:1,tfoot:1};d.selection.prototype={getNative:c?function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.$.selection);}:function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.getWindow().$.getSelection());},getType:c?function(){var t=this._.cache;if(t.type)return t.type;var u=1;try{var v=this.getNative(),w=v.type;if(w=='Text')u=2;if(w=='Control')u=3;if(v.createRange().parentElement)u=2;}catch(x){}return t.type=u;}:function(){var t=this._.cache;if(t.type)return t.type;var u=2,v=this.getNative();if(!v)u=1;else if(v.rangeCount==1){var w=v.getRangeAt(0),x=w.startContainer;if(x==w.endContainer&&x.nodeType==1&&w.endOffset-w.startOffset==1&&s[x.childNodes[w.startOffset].nodeName.toLowerCase()])u=3;}return t.type=u;},getRanges:(function(){var t=c?(function(){var u=function(v,w){v=v.duplicate();v.collapse(w);var x=v.parentElement(),y=x.childNodes,z;for(var A=0;A<y.length;A++){var B=y[A];if(B.nodeType==1){z=v.duplicate();z.moveToElementText(B);var C=z.compareEndPoints('StartToStart',v),D=z.compareEndPoints('EndToStart',v);z.collapse();if(C>0)break;else if(!C||D==1&&C==-1)return{container:x,offset:A};else if(!D)return{container:x,offset:A+1};z=null;}}if(!z){z=v.duplicate();z.moveToElementText(x);z.collapse(false);}z.setEndPoint('StartToStart',v);var E=z.text.replace(/(\r\n|\r)/g,'\n').length;try{while(E>0)E-=y[--A].nodeValue.length;}catch(F){E=0;}if(E===0)return{container:x,offset:A};else return{container:y[A],offset:-E};};return function(){var F=this;var v=F.getNative(),w=v&&v.createRange(),x=F.getType(),y;if(!v)return[];if(x==2){y=new d.range(F.document);var z=u(w,true);y.setStart(new d.node(z.container),z.offset);z=u(w);y.setEnd(new d.node(z.container),z.offset);if(y.endContainer.getPosition(y.startContainer)&4&&y.endOffset<=y.startContainer.getIndex())y.collapse();
return[y];}else if(x==3){var A=[];for(var B=0;B<w.length;B++){var C=w.item(B),D=C.parentNode,E=0;y=new d.range(F.document);for(;E<D.childNodes.length&&D.childNodes[E]!=C;E++){}y.setStart(new d.node(D),E);y.setEnd(new d.node(D),E+1);A.push(y);}return A;}return[];};})():function(){var u=[],v,w=this.document,x=this.getNative();if(!x)return u;if(!x.rangeCount){v=new d.range(w);v.moveToElementEditStart(w.getBody());u.push(v);}for(var y=0;y<x.rangeCount;y++){var z=x.getRangeAt(y);v=new d.range(w);v.setStart(new d.node(z.startContainer),z.startOffset);v.setEnd(new d.node(z.endContainer),z.endOffset);u.push(v);}return u;};return function(u){var v=this._.cache;if(v.ranges&&!u)return v.ranges;else if(!v.ranges)v.ranges=new d.rangeList(t.call(this));if(u){var w=v.ranges;for(var x=0;x<w.length;x++){var y=w[x],z=y.getCommonAncestor();if(z.isReadOnly())w.splice(x,1);if(y.collapsed)continue;var A=y.startContainer,B=y.endContainer,C=y.startOffset,D=y.endOffset,E=y.clone(),F;if(F=A.isReadOnly())y.setStartAfter(F);if(A&&A.type==3)if(C>=A.getLength())E.setStartAfter(A);else E.setStartBefore(A);if(B&&B.type==3)if(!D)E.setEndBefore(B);else E.setEndAfter(B);var G=new d.walker(E);G.evaluator=function(H){if(H.type==1&&H.getAttribute('contenteditable')=='false'){var I=y.clone();y.setEndBefore(H);if(y.collapsed)w.splice(x--,1);if(!(H.getPosition(E.endContainer)&16)){I.setStartAfter(H);if(!I.collapsed)w.splice(x+1,0,I);}return true;}return false;};G.next();}}return v.ranges;};})(),getStartElement:function(){var A=this;var t=A._.cache;if(t.startElement!==undefined)return t.startElement;var u,v=A.getNative();switch(A.getType()){case 3:return A.getSelectedElement();case 2:var w=A.getRanges()[0];if(w){if(!w.collapsed){w.optimize();while(1){var x=w.startContainer,y=w.startOffset;if(y==(x.getChildCount?x.getChildCount():x.getLength())&&!x.isBlockBoundary())w.setStartAfter(x);else break;}u=w.startContainer;if(u.type!=1)return u.getParent();u=u.getChild(w.startOffset);if(!u||u.type!=1)u=w.startContainer;else{var z=u.getFirst();while(z&&z.type==1){u=z;z=z.getFirst();}}}else{u=w.startContainer;if(u.type!=1)u=u.getParent();}u=u.$;}}return t.startElement=u?new h(u):null;},getSelectedElement:function(){var t=this._.cache;if(t.selectedElement!==undefined)return t.selectedElement;var u=this,v=e.tryThese(function(){return u.getNative().createRange().item(0);},function(){var w=u.getRanges()[0],x,y;for(var z=2;z&&!((x=w.getEnclosedNode())&&x.type==1&&s[x.getName()]&&(y=x));z--)w.shrink(1);return y.$;});
return t.selectedElement=v?new h(v):null;},lock:function(){var t=this;t.getRanges();t.getStartElement();t.getSelectedElement();t._.cache.nativeSel={};t.isLocked=1;t.document.setCustomData('cke_locked_selection',t);},unlock:function(t){var y=this;var u=y.document,v=u.getCustomData('cke_locked_selection');if(v){u.setCustomData('cke_locked_selection',null);if(t){var w=v.getSelectedElement(),x=!w&&v.getRanges();y.isLocked=0;y.reset();u.getBody().focus();if(w)y.selectElement(w);else y.selectRanges(x);}}if(!v||!t){y.isLocked=0;y.reset();}},reset:function(){this._.cache={};},selectElement:function(t){var w=this;if(w.isLocked){var u=new d.range(w.document);u.setStartBefore(t);u.setEndAfter(t);w._.cache.selectedElement=t;w._.cache.startElement=t;w._.cache.ranges=new d.rangeList(u);w._.cache.type=3;return;}if(c){w.getNative().empty();try{u=w.document.$.body.createControlRange();u.addElement(t.$);u.select();}catch(x){u=w.document.$.body.createTextRange();u.moveToElementText(t.$);u.select();}finally{w.document.fire('selectionchange');}w.reset();}else{u=w.document.$.createRange();u.selectNode(t.$);var v=w.getNative();v.removeAllRanges();v.addRange(u);w.reset();}},selectRanges:function(t){var D=this;if(D.isLocked){D._.cache.selectedElement=null;D._.cache.startElement=t[0]&&t[0].getTouchedStartNode();D._.cache.ranges=new d.rangeList(t);D._.cache.type=2;return;}if(c){if(t.length>1){var u=t[t.length-1];t[0].setEnd(u.endContainer,u.endOffset);t.length=1;}if(t[0])t[0].select();D.reset();}else{var v=D.getNative();if(t.length)v.removeAllRanges();for(var w=0;w<t.length;w++){if(w<t.length-1){var x=t[w],y=t[w+1],z=x.clone();z.setStart(x.endContainer,x.endOffset);z.setEnd(y.startContainer,y.startOffset);if(!z.collapsed){z.shrink(1,true);if(z.getCommonAncestor().isReadOnly()){y.setStart(x.startContainer,x.startOffset);t.splice(w--,1);continue;}}}var A=t[w],B=D.document.$.createRange(),C=A.startContainer;if(A.collapsed&&(b.opera||b.gecko&&b.version<10900)&&C.type==1&&!C.getChildCount())C.appendText('');B.setStart(C.$,A.startOffset);B.setEnd(A.endContainer.$,A.endOffset);v.addRange(B);}D.reset();}},createBookmarks:function(t){return this.getRanges().createBookmarks(t);},createBookmarks2:function(t){return this.getRanges().createBookmarks2(t);},selectBookmarks:function(t){var u=[];for(var v=0;v<t.length;v++){var w=new d.range(this.document);w.moveToBookmark(t[v]);u.push(w);}this.selectRanges(u);return this;},getCommonAncestor:function(){var t=this.getRanges(),u=t[0].startContainer,v=t[t.length-1].endContainer;
return u.getCommonAncestor(v);},scrollIntoView:function(){var t=this.getStartElement();t.scrollIntoView();}};})();(function(){var m=d.walker.whitespaces(true),n=/\ufeff|\u00a0/,o={table:1,tbody:1,tr:1};d.range.prototype.select=c?function(p){var z=this;var q=z.collapsed,r,s;if(z.startContainer.type==1&&z.startContainer.getName() in o||z.endContainer.type==1&&z.endContainer.getName() in o)z.shrink(1,true);var t=z.createBookmark(),u=t.startNode,v;if(!q)v=t.endNode;var w=z.document.$.body.createTextRange();w.moveToElementText(u.$);w.moveStart('character',1);if(v){var x=z.document.$.body.createTextRange();x.moveToElementText(v.$);w.setEndPoint('EndToEnd',x);w.moveEnd('character',-1);}else{var y=u.getNext(m);r=!(y&&y.getText&&y.getText().match(n))&&(p||!u.hasPrevious()||u.getPrevious().is&&u.getPrevious().is('br'));s=z.document.createElement('span');s.setHtml('&#65279;');s.insertBefore(u);if(r)z.document.createText('\ufeff').insertBefore(u);}z.setStartBefore(u);u.remove();if(q){if(r){w.moveStart('character',-1);w.select();z.document.$.selection.clear();}else w.select();z.moveToPosition(s,3);s.remove();}else{z.setEndBefore(v);v.remove();w.select();}z.document.fire('selectionchange');}:function(){var s=this;var p=s.startContainer;if(s.collapsed&&p.type==1&&!p.getChildCount())p.append(new d.text(''));var q=s.document.$.createRange();q.setStart(p.$,s.startOffset);try{q.setEnd(s.endContainer.$,s.endOffset);}catch(t){if(t.toString().indexOf('NS_ERROR_ILLEGAL_VALUE')>=0){s.collapse(true);q.setEnd(s.endContainer.$,s.endOffset);}else throw t;}var r=s.document.getSelection().getNative();r.removeAllRanges();r.addRange(q);};})();(function(){var m={elements:{$:function(n){var o=n.attributes,p=o&&o._cke_realelement,q=p&&new a.htmlParser.fragment.fromHtml(decodeURIComponent(p)),r=q&&q.children[0];if(r&&n.attributes._cke_resizable){var s=n.attributes.style;if(s){var t=/(?:^|\s)width\s*:\s*(\d+)/i.exec(s),u=t&&t[1];t=/(?:^|\s)height\s*:\s*(\d+)/i.exec(s);var v=t&&t[1];if(u)r.attributes.width=u;if(v)r.attributes.height=v;}}return r;}}};j.add('fakeobjects',{requires:['htmlwriter'],afterInit:function(n){var o=n.dataProcessor,p=o&&o.htmlFilter;if(p)p.addRules(m);}});})();a.editor.prototype.createFakeElement=function(m,n,o,p){var q=this.lang.fakeobjects,r={'class':n,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(m.getOuterHtml()),_cke_real_node_type:m.type,alt:q[o]||q.unknown,align:m.getAttribute('align')||''};if(o)r._cke_real_element_type=o;if(p)r._cke_resizable=p;
return this.document.createElement('img',{attributes:r});};a.editor.prototype.createFakeParserElement=function(m,n,o,p){var q=this.lang.fakeobjects,r,s=new a.htmlParser.basicWriter();m.writeHtml(s);r=s.getHtml();var t={'class':n,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(r),_cke_real_node_type:m.type,alt:q[o]||q.unknown,align:m.attributes.align||''};if(o)t._cke_real_element_type=o;if(p)t._cke_resizable=p;return new a.htmlParser.element('img',t);};a.editor.prototype.restoreRealElement=function(m){if(m.getAttribute('_cke_real_node_type')!=1)return null;return h.createFromHtml(decodeURIComponent(m.getAttribute('_cke_realelement')),this.document);};j.add('richcombo',{requires:['floatpanel','listblock','button'],beforeInit:function(m){m.ui.addHandler(3,k.richCombo.handler);}});a.UI_RICHCOMBO=3;k.richCombo=e.createClass({$:function(m){var o=this;e.extend(o,m,{title:m.label,modes:{wysiwyg:1}});var n=o.panel||{};delete o.panel;o.id=e.getNextNumber();o.document=n&&n.parent&&n.parent.getDocument()||a.document;n.className=(n.className||'')+' cke_rcombopanel';n.block={multiSelect:n.multiSelect,attributes:n.attributes};o._={panelDefinition:n,items:{},state:2};},statics:{handler:{create:function(m){return new k.richCombo(m);}}},proto:{renderHtml:function(m){var n=[];this.render(m,n);return n.join('');},render:function(m,n){var o=b,p='cke_'+this.id,q=e.addFunction(function(t){var w=this;var u=w._;if(u.state==0)return;w.createPanel(m);if(u.on){u.panel.hide();return;}if(!u.committed){u.list.commit();u.committed=1;}var v=w.getValue();if(v)u.list.mark(v);else u.list.unmarkAll();u.panel.showBlock(w.id,new h(t),4);},this),r={id:p,combo:this,focus:function(){var t=a.document.getById(p).getChild(1);t.focus();},clickFn:q};m.on('mode',function(){this.setState(this.modes[m.mode]?2:0);},this);var s=e.addFunction(function(t,u){t=new d.event(t);var v=t.getKeystroke();switch(v){case 13:case 32:case 40:e.callFunction(q,u);break;default:r.onkey(r,v);}t.preventDefault();});r.keyDownFn=s;n.push('<span class="cke_rcombo">','<span id=',p);if(this.className)n.push(' class="',this.className,' cke_off"');n.push('>','<span id="'+p+'_label" class=cke_label>',this.label,'</span>','<a hidefocus=true title="',this.title,'" tabindex="-1"',o.gecko&&o.version>=10900&&!o.hc?'':" href=\"javascript:void('"+this.label+"')\"",' role="button" aria-labelledby="',p,'_label" aria-describedby="',p,'_text" aria-haspopup="true"');if(b.opera||b.gecko&&b.mac)n.push(' onkeypress="return false;"');
if(b.gecko)n.push(' onblur="this.style.cssText = this.style.cssText;"');n.push(' onkeydown="CKEDITOR.tools.callFunction( ',s,', event, this );" onclick="CKEDITOR.tools.callFunction(',q,', this); return false;"><span><span id="'+p+'_text" class="cke_text cke_inline_label">'+this.label+'</span>'+'</span>'+'<span class=cke_openbutton>'+(b.hc?'<span>&#9660;</span>':'')+'</span>'+'</a>'+'</span>'+'</span>');if(this.onRender)this.onRender();return r;},createPanel:function(m){if(this._.panel)return;var n=this._.panelDefinition,o=this._.panelDefinition.block,p=n.parent||a.document.getBody(),q=new k.floatPanel(m,p,n),r=q.addListBlock(this.id,o),s=this;q.onShow=function(){if(s.className)this.element.getFirst().addClass(s.className+'_panel');s.setState(1);r.focus(!s.multiSelect&&s.getValue());s._.on=1;if(s.onOpen)s.onOpen();};q.onHide=function(t){if(s.className)this.element.getFirst().removeClass(s.className+'_panel');s.setState(2);s._.on=0;if(!t&&s.onClose)s.onClose();};q.onEscape=function(){q.hide();s.document.getById('cke_'+s.id).getFirst().getNext().focus();};r.onClick=function(t,u){s.document.getWindow().focus();if(s.onClick)s.onClick.call(s,t,u);if(u)s.setValue(t,s._.items[t]);else s.setValue('');q.hide();};this._.panel=q;this._.list=r;q.getBlock(this.id).onHide=function(){s._.on=0;s.setState(2);};if(this.init)this.init();},setValue:function(m,n){var p=this;p._.value=m;var o=p.document.getById('cke_'+p.id+'_text');if(!(m||n)){n=p.label;o.addClass('cke_inline_label');}else o.removeClass('cke_inline_label');o.setHtml(typeof n!='undefined'?n:m);},getValue:function(){return this._.value||'';},unmarkAll:function(){this._.list.unmarkAll();},mark:function(m){this._.list.mark(m);},hideItem:function(m){this._.list.hideItem(m);},hideGroup:function(m){this._.list.hideGroup(m);},showAll:function(){this._.list.showAll();},add:function(m,n,o){this._.items[m]=o||m;this._.list.add(m,n,o);},startGroup:function(m){this._.list.startGroup(m);},commit:function(){this._.list.commit();},setState:function(m){var n=this;if(n._.state==m)return;n.document.getById('cke_'+n.id).setState(m);n._.state=m;}}});k.prototype.addRichCombo=function(m,n){this.add(m,3,n);};j.add('htmlwriter');a.htmlWriter=e.createClass({base:a.htmlParser.basicWriter,$:function(){var o=this;o.base();o.indentationChars='\t';o.selfClosingEnd=' />';o.lineBreakChars='\n';o.forceSimpleAmpersand=0;o.sortAttributes=1;o._.indent=0;o._.indentation='';o._.inPre=0;o._.rules={};var m=f;for(var n in e.extend({},m.$nonBodyContent,m.$block,m.$listItem,m.$tableContent))o.setRules(n,{indent:1,breakBeforeOpen:1,breakAfterOpen:1,breakBeforeClose:!m[n]['#'],breakAfterClose:1});
o.setRules('br',{breakAfterOpen:1});o.setRules('title',{indent:0,breakAfterOpen:0});o.setRules('style',{indent:0,breakBeforeClose:1});o.setRules('pre',{indent:0});},proto:{openTag:function(m,n){var p=this;var o=p._.rules[m];if(p._.indent)p.indentation();else if(o&&o.breakBeforeOpen){p.lineBreak();p.indentation();}p._.output.push('<',m);},openTagClose:function(m,n){var p=this;var o=p._.rules[m];if(n)p._.output.push(p.selfClosingEnd);else{p._.output.push('>');if(o&&o.indent)p._.indentation+=p.indentationChars;}if(o&&o.breakAfterOpen)p.lineBreak();m=='pre'&&(p._.inPre=1);},attribute:function(m,n){if(typeof n=='string'){this.forceSimpleAmpersand&&(n=n.replace(/&amp;/g,'&'));n=e.htmlEncodeAttr(n);}this._.output.push(' ',m,'="',n,'"');},closeTag:function(m){var o=this;var n=o._.rules[m];if(n&&n.indent)o._.indentation=o._.indentation.substr(o.indentationChars.length);if(o._.indent)o.indentation();else if(n&&n.breakBeforeClose){o.lineBreak();o.indentation();}o._.output.push('</',m,'>');m=='pre'&&(o._.inPre=0);if(n&&n.breakAfterClose)o.lineBreak();},text:function(m){var n=this;if(n._.indent){n.indentation();!n._.inPre&&(m=e.ltrim(m));}n._.output.push(m);},comment:function(m){if(this._.indent)this.indentation();this._.output.push('<!--',m,'-->');},lineBreak:function(){var m=this;if(!m._.inPre&&m._.output.length>0)m._.output.push(m.lineBreakChars);m._.indent=1;},indentation:function(){var m=this;if(!m._.inPre)m._.output.push(m._.indentation);m._.indent=0;},setRules:function(m,n){var o=this._.rules[m];if(o)e.extend(o,n,true);else this._.rules[m]=n;}}});j.add('menubutton',{requires:['button','contextmenu'],beforeInit:function(m){m.ui.addHandler(5,k.menuButton.handler);}});a.UI_MENUBUTTON=5;(function(){var m=function(n){var o=this._;if(o.state===0)return;o.previousState=o.state;var p=o.menu;if(!p){p=o.menu=new j.contextMenu(n);p.definition.panel.attributes['aria-label']=n.lang.common.options;p.onHide=e.bind(function(){this.setState(o.previousState);},this);if(this.onMenu)p.addListener(this.onMenu);}if(o.on){p.hide();return;}this.setState(1);p.show(a.document.getById(this._.id),4);};k.menuButton=e.createClass({base:k.button,$:function(n){var o=n.panel;delete n.panel;this.base(n);this.hasArrow=true;this.click=m;},statics:{handler:{create:function(n){return new k.menuButton(n);}}}});})();j.add('dialogui');(function(){var m=function(u){var x=this;x._||(x._={});x._['default']=x._.initValue=u['default']||'';x._.required=u.required||false;var v=[x._];for(var w=1;w<arguments.length;
w++)v.push(arguments[w]);v.push(true);e.extend.apply(e,v);return x._;},n={build:function(u,v,w){return new k.dialog.textInput(u,v,w);}},o={build:function(u,v,w){return new k.dialog[v.type](u,v,w);}},p={build:function(u,v,w){var x=v.children,y,z=[],A=[];for(var B=0;B<x.length&&(y=x[B]);B++){var C=[];z.push(C);A.push(a.dialog._.uiElementBuilders[y.type].build(u,y,C));}return new k.dialog[v.type](u,A,z,w,v);}},q={isChanged:function(){return this.getValue()!=this.getInitValue();},reset:function(u){this.setValue(this.getInitValue(),u);},setInitValue:function(){this._.initValue=this.getValue();},resetInitValue:function(){this._.initValue=this._['default'];},getInitValue:function(){return this._.initValue;}},r=e.extend({},k.dialog.uiElement.prototype.eventProcessors,{onChange:function(u,v){if(!this._.domOnChangeRegistered){u.on('load',function(){this.getInputElement().on('change',function(){if(!u.parts.dialog.isVisible())return;this.fire('change',{value:this.getValue()});},this);},this);this._.domOnChangeRegistered=true;}this.on('change',v);}},true),s=/^on([A-Z]\w+)/,t=function(u){for(var v in u){if(s.test(v)||v=='title'||v=='type')delete u[v];}return u;};e.extend(k.dialog,{labeledElement:function(u,v,w,x){if(arguments.length<4)return;var y=m.call(this,v);y.labelId=e.getNextId()+'_label';var z=this._.children=[],A=function(){var B=[],C=v.required?' cke_required':'';if(v.labelLayout!='horizontal')B.push('<label class="cke_dialog_ui_labeled_label'+C+'" ',' id="'+y.labelId+'"',' for="'+y.inputId+'"',' style="'+v.labelStyle+'">',v.label,'</label>','<div class="cke_dialog_ui_labeled_content" role="presentation">',x.call(this,u,v),'</div>');else{var D={type:'hbox',widths:v.widths,padding:0,children:[{type:'html',html:'<label class="cke_dialog_ui_labeled_label'+C+'"'+' id="'+y.labelId+'"'+' for="'+y.inputId+'"'+' style="'+v.labelStyle+'">'+e.htmlEncode(v.label)+'</span>'},{type:'html',html:'<span class="cke_dialog_ui_labeled_content">'+x.call(this,u,v)+'</span>'}]};a.dialog._.uiElementBuilders.hbox.build(u,D,B);}return B.join('');};k.dialog.uiElement.call(this,u,v,w,'div',null,{role:'presentation'},A);},textInput:function(u,v,w){if(arguments.length<3)return;m.call(this,v);var x=this._.inputId=e.getNextId()+'_textInput',y={'class':'cke_dialog_ui_input_'+v.type,id:x,type:'text'},z;if(v.validate)this.validate=v.validate;if(v.maxLength)y.maxlength=v.maxLength;if(v.size)y.size=v.size;if(v.controlStyle)y.style=v.controlStyle;var A=this,B=false;u.on('load',function(){A.getInputElement().on('keydown',function(D){if(D.data.getKeystroke()==13)B=true;
});A.getInputElement().on('keyup',function(D){if(D.data.getKeystroke()==13&&B){u.getButton('ok')&&setTimeout(function(){u.getButton('ok').click();},0);B=false;}},null,null,1000);});var C=function(){var D=['<div class="cke_dialog_ui_input_',v.type,'" role="presentation"'];if(v.width)D.push('style="width:'+v.width+'" ');D.push('><input ');y['aria-labelledby']=this._.labelId;this._.required&&(y['aria-required']=this._.required);for(var E in y)D.push(E+'="'+y[E]+'" ');D.push(' /></div>');return D.join('');};k.dialog.labeledElement.call(this,u,v,w,C);},textarea:function(u,v,w){if(arguments.length<3)return;m.call(this,v);var x=this,y=this._.inputId=e.getNextId()+'_textarea',z={};if(v.validate)this.validate=v.validate;z.rows=v.rows||5;z.cols=v.cols||20;var A=function(){z['aria-labelledby']=this._.labelId;this._.required&&(z['aria-required']=this._.required);var B=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea class="cke_dialog_ui_input_textarea" id="',y,'" '];for(var C in z)B.push(C+'="'+e.htmlEncode(z[C])+'" ');B.push('>',e.htmlEncode(x._['default']),'</textarea></div>');return B.join('');};k.dialog.labeledElement.call(this,u,v,w,A);},checkbox:function(u,v,w){if(arguments.length<3)return;var x=m.call(this,v,{'default':!!v['default']});if(v.validate)this.validate=v.validate;var y=function(){var z=e.extend({},v,{id:v.id?v.id+'_checkbox':e.getNextId()+'_checkbox'},true),A=[],B=e.getNextId()+'_label',C={'class':'cke_dialog_ui_checkbox_input',type:'checkbox','aria-labelledby':B};t(z);if(v['default'])C.checked='checked';if(typeof z.controlStyle!='undefined')z.style=z.controlStyle;x.checkbox=new k.dialog.uiElement(u,z,A,'input',null,C);A.push(' <label id="',B,'" for="',C.id,'">',e.htmlEncode(v.label),'</label>');return A.join('');};k.dialog.uiElement.call(this,u,v,w,'span',null,null,y);},radio:function(u,v,w){if(arguments.length<3)return;m.call(this,v);if(!this._['default'])this._['default']=this._.initValue=v.items[0][1];if(v.validate)this.validate=v.valdiate;var x=[],y=this,z=function(){var A=[],B=[],C={'class':'cke_dialog_ui_radio_item','aria-labelledby':this._.labelId},D=v.id?v.id+'_radio':e.getNextId()+'_radio';for(var E=0;E<v.items.length;E++){var F=v.items[E],G=F[2]!==undefined?F[2]:F[0],H=F[1]!==undefined?F[1]:F[0],I=e.getNextId()+'_radio_input',J=I+'_label',K=e.extend({},v,{id:I,title:null,type:null},true),L=e.extend({},K,{title:G},true),M={type:'radio','class':'cke_dialog_ui_radio_input',name:D,value:H,'aria-labelledby':J},N=[];if(y._['default']==H)M.checked='checked';
t(K);t(L);if(typeof K.controlStyle!='undefined')K.style=K.controlStyle;x.push(new k.dialog.uiElement(u,K,N,'input',null,M));N.push(' ');new k.dialog.uiElement(u,L,N,'label',null,{id:J,'for':M.id},F[0]);A.push(N.join(''));}new k.dialog.hbox(u,[],A,B);return B.join('');};k.dialog.labeledElement.call(this,u,v,w,z);this._.children=x;},button:function(u,v,w){if(!arguments.length)return;if(typeof v=='function')v=v(u.getParentEditor());m.call(this,v,{disabled:v.disabled||false});a.event.implementOn(this);var x=this;u.on('load',function(A){var B=this.getElement();(function(){B.on('click',function(C){x.fire('click',{dialog:x.getDialog()});C.data.preventDefault();});B.on('keydown',function(C){if(C.data.getKeystroke() in {32:1}){x.click();C.data.preventDefault();}});})();B.unselectable();},this);var y=e.extend({},v);delete y.style;var z=e.getNextId()+'_label';k.dialog.uiElement.call(this,u,y,w,'a',null,{style:v.style,href:'javascript:void(0)',title:v.label,hidefocus:'true','class':v['class'],role:'button','aria-labelledby':z},'<span id="'+z+'" class="cke_dialog_ui_button">'+e.htmlEncode(v.label)+'</span>');},select:function(u,v,w){if(arguments.length<3)return;var x=m.call(this,v);if(v.validate)this.validate=v.validate;x.inputId=e.getNextId()+'_select';var y=function(){var z=e.extend({},v,{id:v.id?v.id+'_select':e.getNextId()+'_select'},true),A=[],B=[],C={id:x.inputId,'class':'cke_dialog_ui_input_select','aria-labelledby':this._.labelId};if(v.size!=undefined)C.size=v.size;if(v.multiple!=undefined)C.multiple=v.multiple;t(z);for(var D=0,E;D<v.items.length&&(E=v.items[D]);D++)B.push('<option value="',e.htmlEncode(E[1]!==undefined?E[1]:E[0]),'" /> ',e.htmlEncode(E[0]));if(typeof z.controlStyle!='undefined')z.style=z.controlStyle;x.select=new k.dialog.uiElement(u,z,A,'select',null,C,B.join(''));return A.join('');};k.dialog.labeledElement.call(this,u,v,w,y);},file:function(u,v,w){if(arguments.length<3)return;if(v['default']===undefined)v['default']='';var x=e.extend(m.call(this,v),{definition:v,buttons:[]});if(v.validate)this.validate=v.validate;var y=function(){x.frameId=e.getNextId()+'_fileInput';var z=b.isCustomDomain(),A=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" id="',x.frameId,'" title="',v.label,'" src="javascript:void('];A.push(z?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');A.push(')"></iframe>');return A.join('');};u.on('load',function(){var z=a.document.getById(x.frameId),A=z.getParent();
A.addClass('cke_dialog_ui_input_file');});k.dialog.labeledElement.call(this,u,v,w,y);},fileButton:function(u,v,w){if(arguments.length<3)return;var x=m.call(this,v),y=this;if(v.validate)this.validate=v.validate;var z=e.extend({},v),A=z.onClick;z.className=(z.className?z.className+' ':'')+'cke_dialog_ui_button';z.onClick=function(B){var C=v['for'];if(!A||A.call(this,B)!==false){u.getContentElement(C[0],C[1]).submit();this.disable();}};u.on('load',function(){u.getContentElement(v['for'][0],v['for'][1])._.buttons.push(y);});k.dialog.button.call(this,u,z,w);},html:(function(){var u=/^\s*<[\w:]+\s+([^>]*)?>/,v=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,w=/\/$/;return function(x,y,z){if(arguments.length<3)return;var A=[],B,C=y.html,D,E;if(C.charAt(0)!='<')C='<span>'+C+'</span>';var F=y.focus;if(F){var G=this.focus;this.focus=function(){G.call(this);typeof F=='function'&&F.call(this);this.fire('focus');};if(y.isFocusable){var H=this.isFocusable;this.isFocusable=H;}this.keyboardFocusable=true;}k.dialog.uiElement.call(this,x,y,A,'span',null,null,'');B=A.join('');D=B.match(u);E=C.match(v)||['','',''];if(w.test(E[1])){E[1]=E[1].slice(0,-1);E[2]='/'+E[2];}z.push([E[1],' ',D[1]||'',E[2]].join(''));};})(),fieldset:function(u,v,w,x,y){var z=y.label,A=function(){var B=[];z&&B.push('<legend>'+z+'</legend>');for(var C=0;C<w.length;C++)B.push(w[C]);return B.join('');};this._={children:v};k.dialog.uiElement.call(this,u,y,x,'fieldset',null,null,A);}},true);k.dialog.html.prototype=new k.dialog.uiElement();k.dialog.labeledElement.prototype=e.extend(new k.dialog.uiElement(),{setLabel:function(u){var v=a.document.getById(this._.labelId);if(v.getChildCount()<1)new d.text(u,a.document).appendTo(v);else v.getChild(0).$.nodeValue=u;return this;},getLabel:function(){var u=a.document.getById(this._.labelId);if(!u||u.getChildCount()<1)return '';else return u.getChild(0).getText();},eventProcessors:r},true);k.dialog.button.prototype=e.extend(new k.dialog.uiElement(),{click:function(){var u=this;if(!u._.disabled)return u.fire('click',{dialog:u._.dialog});u.getElement().$.blur();return false;},enable:function(){this._.disabled=false;var u=this.getElement();u&&u.removeClass('cke_disabled');},disable:function(){this._.disabled=true;this.getElement().addClass('cke_disabled');},isVisible:function(){return this.getElement().getFirst().isVisible();},isEnabled:function(){return!this._.disabled;},eventProcessors:e.extend({},k.dialog.uiElement.prototype.eventProcessors,{onClick:function(u,v){this.on('click',v);
}},true),accessKeyUp:function(){this.click();},accessKeyDown:function(){this.focus();},keyboardFocusable:true},true);k.dialog.textInput.prototype=e.extend(new k.dialog.labeledElement(),{getInputElement:function(){return a.document.getById(this._.inputId);},focus:function(){var u=this.selectParentTab();setTimeout(function(){var v=u.getInputElement();v&&v.$.focus();},0);},select:function(){var u=this.selectParentTab();setTimeout(function(){var v=u.getInputElement();if(v){v.$.focus();v.$.select();}},0);},accessKeyUp:function(){this.select();},setValue:function(u){!u&&(u='');return k.dialog.uiElement.prototype.setValue.apply(this,arguments);},keyboardFocusable:true},q,true);k.dialog.textarea.prototype=new k.dialog.textInput();k.dialog.select.prototype=e.extend(new k.dialog.labeledElement(),{getInputElement:function(){return this._.select.getElement();},add:function(u,v,w){var x=new h('option',this.getDialog().getParentEditor().document),y=this.getInputElement().$;x.$.text=u;x.$.value=v===undefined||v===null?u:v;if(w===undefined||w===null){if(c)y.add(x.$);else y.add(x.$,null);}else y.add(x.$,w);return this;},remove:function(u){var v=this.getInputElement().$;v.remove(u);return this;},clear:function(){var u=this.getInputElement().$;while(u.length>0)u.remove(0);return this;},keyboardFocusable:true},q,true);k.dialog.checkbox.prototype=e.extend(new k.dialog.uiElement(),{getInputElement:function(){return this._.checkbox.getElement();},setValue:function(u,v){this.getInputElement().$.checked=u;!v&&this.fire('change',{value:u});},getValue:function(){return this.getInputElement().$.checked;},accessKeyUp:function(){this.setValue(!this.getValue());},eventProcessors:{onChange:function(u,v){if(!c)return r.onChange.apply(this,arguments);else{u.on('load',function(){var w=this._.checkbox.getElement();w.on('propertychange',function(x){x=x.data.$;if(x.propertyName=='checked')this.fire('change',{value:w.$.checked});},this);},this);this.on('change',v);}return null;}},keyboardFocusable:true},q,true);k.dialog.radio.prototype=e.extend(new k.dialog.uiElement(),{setValue:function(u,v){var w=this._.children,x;for(var y=0;y<w.length&&(x=w[y]);y++)x.getElement().$.checked=x.getValue()==u;!v&&this.fire('change',{value:u});},getValue:function(){var u=this._.children;for(var v=0;v<u.length;v++){if(u[v].getElement().$.checked)return u[v].getValue();}return null;},accessKeyUp:function(){var u=this._.children,v;for(v=0;v<u.length;v++){if(u[v].getElement().$.checked){u[v].getElement().focus();return;
}}u[0].getElement().focus();},eventProcessors:{onChange:function(u,v){if(!c)return r.onChange.apply(this,arguments);else{u.on('load',function(){var w=this._.children,x=this;for(var y=0;y<w.length;y++){var z=w[y].getElement();z.on('propertychange',function(A){A=A.data.$;if(A.propertyName=='checked'&&this.$.checked)x.fire('change',{value:this.getAttribute('value')});});}},this);this.on('change',v);}return null;}},keyboardFocusable:true},q,true);k.dialog.file.prototype=e.extend(new k.dialog.labeledElement(),q,{getInputElement:function(){var u=a.document.getById(this._.frameId).getFrameDocument();return u.$.forms.length>0?new h(u.$.forms[0].elements[0]):this.getElement();},submit:function(){this.getInputElement().getParent().$.submit();return this;},getAction:function(){return this.getInputElement().getParent().$.action;},registerEvents:function(u){var v=/^on([A-Z]\w+)/,w,x=function(z,A,B,C){z.on('formLoaded',function(){z.getInputElement().on(B,C,z);});};for(var y in u){if(!(w=y.match(v)))continue;if(this.eventProcessors[y])this.eventProcessors[y].call(this,this._.dialog,u[y]);else x(this,this._.dialog,w[1].toLowerCase(),u[y]);}return this;},reset:function(){var u=this._,v=a.document.getById(u.frameId),w=v.getFrameDocument(),x=u.definition,y=u.buttons,z=this.formLoadedNumber,A=this.formUnloadNumber,B=u.dialog._.editor.lang.dir,C=u.dialog._.editor.langCode;if(!z){z=this.formLoadedNumber=e.addFunction(function(){this.fire('formLoaded');},this);A=this.formUnloadNumber=e.addFunction(function(){this.getInputElement().clearCustomData();},this);this.getDialog()._.editor.on('destroy',function(){e.removeFunction(z);e.removeFunction(A);});}function D(){w.$.open();if(b.isCustomDomain())w.$.domain=document.domain;var E='';if(x.size)E=x.size-(c?7:0);w.$.write(['<html dir="'+B+'" lang="'+C+'"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" dir="'+B+'" lang="'+C+'" action="',e.htmlEncode(x.action),'">','<input type="file" name="',e.htmlEncode(x.id||'cke_upload'),'" size="',e.htmlEncode(E>0?E:''),'" />','</form>','</body></html>','<script>window.parent.CKEDITOR.tools.callFunction('+z+');','window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction('+A+')}</script>'].join(''));w.$.close();for(var F=0;F<y.length;F++)y[F].enable();};if(b.gecko)setTimeout(D,500);else D();},getValue:function(){return this.getInputElement().$.value;},setInitValue:function(){this._.initValue='';
},eventProcessors:{onChange:function(u,v){if(!this._.domOnChangeRegistered){this.on('formLoaded',function(){this.getInputElement().on('change',function(){this.fire('change',{value:this.getValue()});},this);},this);this._.domOnChangeRegistered=true;}this.on('change',v);}},keyboardFocusable:true},true);k.dialog.fileButton.prototype=new k.dialog.button();k.dialog.fieldset.prototype=e.clone(k.dialog.hbox.prototype);a.dialog.addUIElement('text',n);a.dialog.addUIElement('password',n);a.dialog.addUIElement('textarea',o);a.dialog.addUIElement('checkbox',o);a.dialog.addUIElement('radio',o);a.dialog.addUIElement('button',o);a.dialog.addUIElement('select',o);a.dialog.addUIElement('file',o);a.dialog.addUIElement('fileButton',o);a.dialog.addUIElement('html',o);a.dialog.addUIElement('fieldset',p);})();j.add('panel',{beforeInit:function(m){m.ui.addHandler(2,k.panel.handler);}});a.UI_PANEL=2;k.panel=function(m,n){var o=this;if(n)e.extend(o,n);e.extend(o,{className:'',css:[]});o.id=e.getNextId();o.document=m;o._={blocks:{}};};k.panel.handler={create:function(m){return new k.panel(m);}};k.panel.prototype={renderHtml:function(m){var n=[];this.render(m,n);return n.join('');},render:function(m,n){var p=this;var o=p.id;n.push('<div class="',m.skinClass,'" lang="',m.langCode,'" role="presentation" style="display:none;z-index:'+(m.config.baseFloatZIndex+1)+'">'+'<div'+' id=',o,' dir=',m.lang.dir,' role="presentation" class="cke_panel cke_',m.lang.dir);if(p.className)n.push(' ',p.className);n.push('">');if(p.forceIFrame||p.css.length){n.push('<iframe id="',o,'_frame" frameborder="0" role="application" src="javascript:void(');n.push(b.isCustomDomain()?"(function(){document.open();document.domain='"+document.domain+"';"+'document.close();'+'})()':'0');n.push(')"></iframe>');}n.push('</div></div>');return o;},getHolderElement:function(){var m=this._.holder;if(!m){if(this.forceIFrame||this.css.length){var n=this.document.getById(this.id+'_frame'),o=n.getParent(),p=o.getAttribute('dir'),q=o.getParent().getAttribute('class'),r=o.getParent().getAttribute('lang'),s=n.getFrameDocument();s.$.open();if(b.isCustomDomain())s.$.domain=document.domain;var t=e.addFunction(e.bind(function(v){this.isLoaded=true;if(this.onLoad)this.onLoad();},this));s.$.write('<!DOCTYPE html><html dir="'+p+'" class="'+q+'_container" lang="'+r+'">'+'<head>'+'<style>.'+q+'_container{visibility:hidden}</style>'+'</head>'+'<body class="cke_'+p+' cke_panel_frame '+b.cssClass+'" style="margin:0;padding:0"'+' onload="( window.CKEDITOR || window.parent.CKEDITOR ).tools.callFunction('+t+');"></body>'+e.buildStyleHtml(this.css)+'</html>');
s.$.close();var u=s.getWindow();u.$.CKEDITOR=a;s.on('key'+(b.opera?'press':'down'),function(v){var y=this;var w=v.data.getKeystroke(),x=y.document.getById(y.id).getAttribute('dir');if(y._.onKeyDown&&y._.onKeyDown(w)===false){v.data.preventDefault();return;}if(w==27||w==(x=='rtl'?39:37))if(y.onEscape&&y.onEscape(w)===false)v.data.preventDefault();},this);m=s.getBody();m.unselectable();}else m=this.document.getById(this.id);this._.holder=m;}return m;},addBlock:function(m,n){var o=this;n=o._.blocks[m]=n instanceof k.panel.block?n:new k.panel.block(o.getHolderElement(),n);if(!o._.currentBlock)o.showBlock(m);return n;},getBlock:function(m){return this._.blocks[m];},showBlock:function(m){var n=this._.blocks,o=n[m],p=this._.currentBlock,q=this.forceIFrame?this.document.getById(this.id+'_frame'):this._.holder;q.getParent().getParent().disableContextMenu();if(p){q.removeAttributes(p.attributes);p.hide();}this._.currentBlock=o;q.setAttributes(o.attributes);a.fire('ariaWidget',q);o._.focusIndex=-1;this._.onKeyDown=o.onKeyDown&&e.bind(o.onKeyDown,o);o.onMark=function(r){q.setAttribute('aria-activedescendant',r.getId()+'_option');};o.onUnmark=function(){q.removeAttribute('aria-activedescendant');};o.show();return o;},destroy:function(){this.element&&this.element.remove();}};k.panel.block=e.createClass({$:function(m,n){var o=this;o.element=m.append(m.getDocument().createElement('div',{attributes:{tabIndex:-1,'class':'cke_panel_block',role:'presentation'},styles:{display:'none'}}));if(n)e.extend(o,n);if(!o.attributes.title)o.attributes.title=o.attributes['aria-label'];o.keys={};o._.focusIndex=-1;o.element.disableContextMenu();},_:{markItem:function(m){var p=this;if(m==-1)return;var n=p.element.getElementsByTag('a'),o=n.getItem(p._.focusIndex=m);if(b.webkit||b.opera)o.getDocument().getWindow().focus();o.focus();p.onMark&&p.onMark(o);}},proto:{show:function(){this.element.setStyle('display','');},hide:function(){var m=this;if(!m.onHide||m.onHide.call(m)!==true)m.element.setStyle('display','none');},onKeyDown:function(m){var r=this;var n=r.keys[m];switch(n){case 'next':var o=r._.focusIndex,p=r.element.getElementsByTag('a'),q;while(q=p.getItem(++o)){if(q.getAttribute('_cke_focus')&&q.$.offsetWidth){r._.focusIndex=o;q.focus();break;}}return false;case 'prev':o=r._.focusIndex;p=r.element.getElementsByTag('a');while(o>0&&(q=p.getItem(--o))){if(q.getAttribute('_cke_focus')&&q.$.offsetWidth){r._.focusIndex=o;q.focus();break;}}return false;case 'click':o=r._.focusIndex;q=o>=0&&r.element.getElementsByTag('a').getItem(o);
if(q)q.$.click?q.$.click():q.$.onclick();return false;}return true;}}});j.add('listblock',{requires:['panel'],onLoad:function(){k.panel.prototype.addListBlock=function(m,n){return this.addBlock(m,new k.listBlock(this.getHolderElement(),n));};k.listBlock=e.createClass({base:k.panel.block,$:function(m,n){var q=this;n=n||{};var o=n.attributes||(n.attributes={});(q.multiSelect=!!n.multiSelect)&&(o['aria-multiselectable']=true);!o.role&&(o.role='listbox');q.base.apply(q,arguments);var p=q.keys;p[40]='next';p[9]='next';p[38]='prev';p[2000+9]='prev';p[32]='click';q._.pendingHtml=[];q._.items={};q._.groups={};},_:{close:function(){if(this._.started){this._.pendingHtml.push('</ul>');delete this._.started;}},getClick:function(){if(!this._.click)this._.click=e.addFunction(function(m){var o=this;var n=true;if(o.multiSelect)n=o.toggle(m);else o.mark(m);if(o.onClick)o.onClick(m,n);},this);return this._.click;}},proto:{add:function(m,n,o){var r=this;var p=r._.pendingHtml,q=e.getNextId();if(!r._.started){p.push('<ul role="presentation" class=cke_panel_list>');r._.started=1;r._.size=r._.size||0;}r._.items[m]=q;p.push('<li id=',q,' class=cke_panel_listItem><a id="',q,'_option" _cke_focus=1 hidefocus=true title="',o||m,'" href="javascript:void(\'',m,'\')" onclick="CKEDITOR.tools.callFunction(',r._.getClick(),",'",m,"'); return false;\"",' role="option" aria-posinset="'+ ++r._.size+'">',n||m,'</a></li>');},startGroup:function(m){this._.close();var n=e.getNextId();this._.groups[m]=n;this._.pendingHtml.push('<h1 role="presentation" id=',n,' class=cke_panel_grouptitle>',m,'</h1>');},commit:function(){var p=this;p._.close();p.element.appendHtml(p._.pendingHtml.join(''));var m=p._.items,n=p.element.getDocument();for(var o in m)n.getById(m[o]+'_option').setAttribute('aria-setsize',p._.size);delete p._.size;p._.pendingHtml=[];},toggle:function(m){var n=this.isMarked(m);if(n)this.unmark(m);else this.mark(m);return!n;},hideGroup:function(m){var n=this.element.getDocument().getById(this._.groups[m]),o=n&&n.getNext();if(n){n.setStyle('display','none');if(o&&o.getName()=='ul')o.setStyle('display','none');}},hideItem:function(m){this.element.getDocument().getById(this._.items[m]).setStyle('display','none');},showAll:function(){var m=this._.items,n=this._.groups,o=this.element.getDocument();for(var p in m)o.getById(m[p]).setStyle('display','');for(var q in n){var r=o.getById(n[q]),s=r.getNext();r.setStyle('display','');if(s&&s.getName()=='ul')s.setStyle('display','');}},mark:function(m){var p=this;
if(!p.multiSelect)p.unmarkAll();var n=p._.items[m],o=p.element.getDocument().getById(n);o.addClass('cke_selected');p.element.getDocument().getById(n+'_option').setAttribute('aria-selected',true);p.element.setAttribute('aria-activedescendant',n+'_option');p.onMark&&p.onMark(o);},unmark:function(m){var n=this;n.element.getDocument().getById(n._.items[m]).removeClass('cke_selected');n.onUnmark&&n.onUnmark(n._.items[m]);},unmarkAll:function(){var p=this;var m=p._.items,n=p.element.getDocument();for(var o in m)n.getById(m[o]).removeClass('cke_selected');p.onUnmark&&p.onUnmark();},isMarked:function(m){return this.element.getDocument().getById(this._.items[m]).hasClass('cke_selected');},focus:function(m){this._.focusIndex=-1;if(m){var n=this.element.getDocument().getById(this._.items[m]).getFirst(),o=this.element.getElementsByTag('a'),p,q=-1;while(p=o.getItem(++q)){if(p.equals(n)){this._.focusIndex=q;break;}}setTimeout(function(){n.focus();},0);}}}});}});a.themes.add('default',(function(){function m(n,o){var p,q;q=n.config.sharedSpaces;q=q&&q[o];q=q&&a.document.getById(q);if(q){var r='<span class="cke_shared"><span class="'+n.skinClass+' '+n.id+' cke_editor_'+n.name+'">'+'<span class="'+b.cssClass+'">'+'<span class="cke_wrapper cke_'+n.lang.dir+'">'+'<span class="cke_editor">'+'<div class="cke_'+o+'">'+'</div></span></span></span></span></span>',s=q.append(h.createFromHtml(r,q.getDocument()));if(q.getCustomData('cke_hasshared'))s.hide();else q.setCustomData('cke_hasshared',1);p=s.getChild([0,0,0,0]);n.on('focus',function(){for(var t=0,u,v=q.getChildren();u=v.getItem(t);t++){if(u.type==1&&!u.equals(s)&&u.hasClass('cke_shared'))u.hide();}s.show();});n.on('destroy',function(){s.remove();});}return p;};return{build:function(n,o){var p=n.name,q=n.element,r=n.elementMode;if(!q||r==0)return;if(r==1)q.hide();var s=n.fire('themeSpace',{space:'top',html:''}).html,t=n.fire('themeSpace',{space:'contents',html:''}).html,u=n.fireOnce('themeSpace',{space:'bottom',html:''}).html,v=t&&n.config.height,w=n.config.tabIndex||n.element.getAttribute('tabindex')||0;if(!t)v='auto';else if(!isNaN(v))v+='px';var x='',y=n.config.width;if(y){if(!isNaN(y))y+='px';x+='width: '+y+';';}var z=s&&m(n,'top'),A=m(n,'bottom');z&&(z.setHtml(s),s='');A&&(A.setHtml(u),u='');var B=h.createFromHtml(['<span id="cke_',p,'" onmousedown="return false;" class="',n.skinClass,' ',n.id,' cke_editor_',p,'" dir="',n.lang.dir,'" title="',b.gecko?' ':'','" lang="',n.langCode,'"'+(b.webkit?' tabindex="'+w+'"':'')+' role="application"'+' aria-labelledby="cke_',p,'_arialbl"'+(x?' style="'+x+'"':'')+'>'+'<span id="cke_',p,'_arialbl" class="cke_voice_label">'+n.lang.editor+'</span>'+'<span class="',b.cssClass,'" role="presentation"><span class="cke_wrapper cke_',n.lang.dir,'" role="presentation"><table class="cke_editor" border="0" cellspacing="0" cellpadding="0" role="presentation"><tbody><tr',s?'':' style="display:none"',' role="presentation"><td id="cke_top_',p,'" class="cke_top" role="presentation">',s,'</td></tr><tr',t?'':' style="display:none"',' role="presentation"><td id="cke_contents_',p,'" class="cke_contents" style="height:',v,'" role="presentation">',t,'</td></tr><tr',u?'':' style="display:none"',' role="presentation"><td id="cke_bottom_',p,'" class="cke_bottom" role="presentation">',u,'</td></tr></tbody></table><style>.',n.skinClass,'{visibility:hidden;}</style></span></span></span>'].join(''));
B.getChild([1,0,0,0,0]).unselectable();B.getChild([1,0,0,0,2]).unselectable();if(r==1)B.insertAfter(q);else q.append(B);n.container=B;B.disableContextMenu();n.fireOnce('themeLoaded');n.fireOnce('uiReady');},buildDialog:function(n){var o=e.getNextNumber(),p=h.createFromHtml(['<div class="',n.id,'_dialog cke_editor_',n.name.replace('.','\\.'),'_dialog cke_skin_',n.skinName,'" dir="',n.lang.dir,'" lang="',n.langCode,'" role="dialog" aria-labelledby="%title#"><table class="cke_dialog',' '+b.cssClass,' cke_',n.lang.dir,'" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="%body" role="presentation"><div id="%title#" class="%title" role="presentation"></div><a id="%close_button#" class="%close_button" href="javascript:void(0)" title="'+n.lang.common.close+'" role="button"><span class="cke_label">X</span></a>'+'<div id="%tabs#" class="%tabs" role="tablist"></div>'+'<table class="%contents" role="presentation"><tr>'+'<td id="%contents#" class="%contents" role="presentation"></td>'+'</tr></table>'+'<div id="%footer#" class="%footer" role="presentation"></div>'+'</div>'+'<div id="%tl#" class="%tl"></div>'+'<div id="%tc#" class="%tc"></div>'+'<div id="%tr#" class="%tr"></div>'+'<div id="%ml#" class="%ml"></div>'+'<div id="%mr#" class="%mr"></div>'+'<div id="%bl#" class="%bl"></div>'+'<div id="%bc#" class="%bc"></div>'+'<div id="%br#" class="%br"></div>'+'</td></tr>'+'</table>',c?'':'<style>.cke_dialog{visibility:hidden;}</style>','</div>'].join('').replace(/#/g,'_'+o).replace(/%/g,'cke_dialog_')),q=p.getChild([0,0,0,0,0]),r=q.getChild(0),s=q.getChild(1);r.unselectable();s.unselectable();return{element:p,parts:{dialog:p.getChild(0),title:r,close:s,tabs:q.getChild(2),contents:q.getChild([3,0,0,0]),footer:q.getChild(4)}};},destroy:function(n){var o=n.container;o.clearCustomData();n.element.clearCustomData();if(o)o.remove();if(n.elementMode==1)n.element.show();delete n.element;}};})());a.editor.prototype.getThemeSpace=function(m){var n='cke_'+m,o=this._[n]||(this._[n]=a.document.getById(n+'_'+this.name));return o;};a.editor.prototype.resize=function(m,n,o,p){var q=this.container,r=a.document.getById('cke_contents_'+this.name),s=p?q.getChild(1):q;b.webkit&&s.setStyle('display','none');s.setSize('width',m,true);if(b.webkit){s.$.offsetWidth;s.setStyle('display','');}var t=o?0:(s.$.offsetHeight||0)-(r.$.clientHeight||0);r.setStyle('height',Math.max(n-t,0)+'px');this.fire('resize');};a.editor.prototype.getResizable=function(){return this.container.getChild(1);
};})();

View File

@@ -1,211 +0,0 @@
/*
* CKPackager - Sample Package file
*/
header :
'/*' + '\n' +
'Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.' + '\n' +
'For licensing, see LICENSE.html or http://ckeditor.com/license' + '\n' +
'*/' + '\n' +
'\n',
noCheck : false,
constants :
{
'CKEDITOR.ELEMENT_MODE_NONE' : 0,
'CKEDITOR.ELEMENT_MODE_REPLACE' : 1,
'CKEDITOR.ELEMENT_MODE_APPENDTO' : 2,
'CKEDITOR.CTRL' : 1000,
'CKEDITOR.SHIFT' : 2000,
'CKEDITOR.ALT' : 4000,
'CKEDITOR.NODE_ELEMENT' : 1,
'CKEDITOR.NODE_DOCUMENT' : 9,
'CKEDITOR.NODE_TEXT' : 3,
'CKEDITOR.NODE_COMMENT' : 8,
'CKEDITOR.NODE_DOCUMENT_FRAGMENT' : 11,
'CKEDITOR.POSITION_IDENTICAL' : 0,
'CKEDITOR.POSITION_DISCONNECTED' : 1,
'CKEDITOR.POSITION_FOLLOWING' : 2,
'CKEDITOR.POSITION_PRECEDING' : 4,
'CKEDITOR.POSITION_IS_CONTAINED' : 8,
'CKEDITOR.POSITION_CONTAINS' : 16,
'CKEDITOR.ENTER_P' : 1,
'CKEDITOR.ENTER_BR' : 2,
'CKEDITOR.ENTER_DIV' : 3,
'CKEDITOR.TRISTATE_ON' : 1,
'CKEDITOR.TRISTATE_OFF' : 2,
'CKEDITOR.TRISTATE_DISABLED' : 0,
'CKEDITOR.POSITION_AFTER_START' : 1,
'CKEDITOR.POSITION_BEFORE_END' : 2,
'CKEDITOR.POSITION_BEFORE_START' : 3,
'CKEDITOR.POSITION_AFTER_END' : 4,
'CKEDITOR.ENLARGE_ELEMENT' : 1,
'CKEDITOR.ENLARGE_BLOCK_CONTENTS' : 2,
'CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS' : 3,
'CKEDITOR.START' : 1,
'CKEDITOR.END' : 2,
'CKEDITOR.STARTEND' : 3,
'CKEDITOR.SHRINK_ELEMENT' : 1,
'CKEDITOR.SHRINK_TEXT' : 2,
'CKEDITOR.UI_BUTTON' : 1,
'CKEDITOR.DIALOG_RESIZE_NONE' : 0,
'CKEDITOR.DIALOG_RESIZE_WIDTH' : 1,
'CKEDITOR.DIALOG_RESIZE_HEIGHT' : 2,
'CKEDITOR.DIALOG_RESIZE_BOTH' : 3,
'CKEDITOR.VALIDATE_OR' : 1,
'CKEDITOR.VALIDATE_AND' : 2,
'CKEDITOR.STYLE_BLOCK' : 1,
'CKEDITOR.STYLE_INLINE' : 2,
'CKEDITOR.STYLE_OBJECT' : 3,
'CKEDITOR.UI_PANELBUTTON' : 4,
'CKEDITOR.SELECTION_NONE' : 1,
'CKEDITOR.SELECTION_TEXT' : 2,
'CKEDITOR.SELECTION_ELEMENT' : 3,
'CKEDITOR.UI_RICHCOMBO' : 3,
'CKEDITOR.UI_MENUBUTTON' : 5,
'CKEDITOR.UI_PANEL' : 2
},
packages :
[
{
output : 'ckeditor_basic.js',
wrap : true,
files :
[
'_source/core/ckeditor_base.js',
'_source/core/event.js',
'_source/core/editor_basic.js',
'_source/core/env.js',
'_source/core/ckeditor_basic.js'
]
},
{
output : 'ckeditor.js',
wrap : true,
files :
[
'_source/core/ckeditor_base.js',
'_source/core/event.js',
'_source/core/editor_basic.js',
'_source/core/env.js',
'_source/core/ckeditor_basic.js',
'_source/core/dom.js',
'_source/core/tools.js',
'_source/core/dtd.js',
'_source/core/dom/event.js',
'_source/core/dom/domobject.js',
'_source/core/dom/window.js',
'_source/core/dom/document.js',
'_source/core/dom/node.js',
'_source/core/dom/nodelist.js',
'_source/core/dom/element.js',
'_source/core/command.js',
'_source/core/config.js',
'_source/core/focusmanager.js',
'_source/core/lang.js',
'_source/core/scriptloader.js',
'_source/core/resourcemanager.js',
'_source/core/plugins.js',
'_source/core/imagecacher.js',
'_source/core/skins.js',
'_source/core/themes.js',
'_source/core/ui.js',
'_source/core/editor.js',
'_source/core/htmlparser.js',
'_source/core/htmlparser/comment.js',
'_source/core/htmlparser/text.js',
'_source/core/htmlparser/cdata.js',
'_source/core/htmlparser/fragment.js',
'_source/core/htmlparser/element.js',
'_source/core/htmlparser/filter.js',
'_source/core/htmlparser/basicwriter.js',
'_source/core/ckeditor.js',
'_source/core/dom/comment.js',
'_source/core/dom/elementpath.js',
'_source/core/dom/text.js',
'_source/core/dom/documentfragment.js',
'_source/core/dom/walker.js',
'_source/core/dom/range.js',
'_source/core/dom/rangelist.js',
'_source/core/_bootstrap.js',
'_source/skins/kama/skin.js',
// '_source/lang/en.js',
'_source/plugins/about/plugin.js',
'_source/plugins/a11yhelp/plugin.js',
'_source/plugins/basicstyles/plugin.js',
'_source/plugins/bidi/plugin.js',
'_source/plugins/blockquote/plugin.js',
'_source/plugins/button/plugin.js',
'_source/plugins/clipboard/plugin.js',
'_source/plugins/colorbutton/plugin.js',
'_source/plugins/colordialog/plugin.js',
'_source/plugins/contextmenu/plugin.js',
'_source/plugins/dialogadvtab/plugin.js',
'_source/plugins/div/plugin.js',
'_source/plugins/elementspath/plugin.js',
'_source/plugins/enterkey/plugin.js',
'_source/plugins/entities/plugin.js',
'_source/plugins/filebrowser/plugin.js',
'_source/plugins/find/plugin.js',
'_source/plugins/flash/plugin.js',
'_source/plugins/font/plugin.js',
'_source/plugins/format/plugin.js',
'_source/plugins/forms/plugin.js',
'_source/plugins/horizontalrule/plugin.js',
'_source/plugins/htmldataprocessor/plugin.js',
'_source/plugins/image/plugin.js',
'_source/plugins/indent/plugin.js',
'_source/plugins/justify/plugin.js',
'_source/plugins/keystrokes/plugin.js',
'_source/plugins/link/plugin.js',
'_source/plugins/list/plugin.js',
'_source/plugins/liststyle/plugin.js',
'_source/plugins/maximize/plugin.js',
'_source/plugins/newpage/plugin.js',
'_source/plugins/pagebreak/plugin.js',
'_source/plugins/pastefromword/plugin.js',
'_source/plugins/pastetext/plugin.js',
'_source/plugins/popup/plugin.js',
'_source/plugins/preview/plugin.js',
'_source/plugins/print/plugin.js',
'_source/plugins/removeformat/plugin.js',
'_source/plugins/resize/plugin.js',
'_source/plugins/save/plugin.js',
'_source/plugins/scayt/plugin.js',
'_source/plugins/smiley/plugin.js',
'_source/plugins/showblocks/plugin.js',
'_source/plugins/showborders/plugin.js',
'_source/plugins/sourcearea/plugin.js',
'_source/plugins/stylescombo/plugin.js',
'_source/plugins/table/plugin.js',
'_source/plugins/tabletools/plugin.js',
'_source/plugins/specialchar/plugin.js',
'_source/plugins/tab/plugin.js',
'_source/plugins/templates/plugin.js',
'_source/plugins/toolbar/plugin.js',
'_source/plugins/undo/plugin.js',
'_source/plugins/wysiwygarea/plugin.js',
'_source/plugins/wsc/plugin.js',
'_source/plugins/dialog/plugin.js',
'_source/plugins/styles/plugin.js',
'_source/plugins/domiterator/plugin.js',
'_source/plugins/panelbutton/plugin.js',
'_source/plugins/floatpanel/plugin.js',
'_source/plugins/menu/plugin.js',
'_source/plugins/editingblock/plugin.js',
'_source/plugins/selection/plugin.js',
'_source/plugins/fakeobjects/plugin.js',
'_source/plugins/richcombo/plugin.js',
'_source/plugins/htmlwriter/plugin.js',
'_source/plugins/menubutton/plugin.js',
'_source/plugins/dialogui/plugin.js',
'_source/plugins/panel/plugin.js',
'_source/plugins/listblock/plugin.js',
'_source/themes/default/theme.js'
]
}
]

View File

@@ -1,8 +0,0 @@
/*
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
(function(){if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'AA4E4NT',version:'3.4.2',revision:'6041',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;if(!d)throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/'&&!/[&?]t=/.test(d))d+=(d.indexOf('?')>=0?'&':'?')+'t='+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();var a=CKEDITOR;if(!a.event){a.event=function(){};a.event.implementOn=function(b){var c=a.event.prototype;for(var d in c){if(b[d]==undefined)b[d]=c[d];}};a.event.prototype=(function(){var b=function(d){var e=d.getPrivate&&d.getPrivate()||d._||(d._={});return e.events||(e.events={});},c=function(d){this.name=d;this.listeners=[];};c.prototype={getListenerIndex:function(d){for(var e=0,f=this.listeners;e<f.length;e++){if(f[e].fn==d)return e;}return-1;}};return{on:function(d,e,f,g,h){var i=b(this),j=i[d]||(i[d]=new c(d));if(j.getListenerIndex(e)<0){var k=j.listeners;if(!f)f=this;if(isNaN(h))h=10;var l=this,m=function(o,p,q,r){var s={name:d,sender:this,editor:o,data:p,listenerData:g,stop:q,cancel:r,removeListener:function(){l.removeListener(d,e);}};e.call(f,s);return s.data;};m.fn=e;m.priority=h;for(var n=k.length-1;n>=0;n--){if(k[n].priority<=h){k.splice(n+1,0,m);return;}}k.unshift(m);}},fire:(function(){var d=false,e=function(){d=true;},f=false,g=function(){f=true;};return function(h,i,j){var k=b(this)[h],l=d,m=f;d=f=false;if(k){var n=k.listeners;if(n.length){n=n.slice(0);for(var o=0;o<n.length;o++){var p=n[o].call(this,j,i,e,g);if(typeof p!='undefined')i=p;if(d||f)break;}}}var q=f||(typeof i=='undefined'?false:i);d=l;f=m;return q;};})(),fireOnce:function(d,e,f){var g=this.fire(d,e,f);delete b(this)[d];return g;},removeListener:function(d,e){var f=b(this)[d];if(f){var g=f.getListenerIndex(e);if(g>=0)f.listeners.splice(g,1);}},hasListeners:function(d){var e=b(this)[d];
return e&&e.listeners.length>0;}};})();}if(!a.editor){a.ELEMENT_MODE_NONE=0;a.ELEMENT_MODE_REPLACE=1;a.ELEMENT_MODE_APPENDTO=2;a.editor=function(b,c,d,e){var f=this;f._={instanceConfig:b,element:c,data:e};f.elementMode=d||0;a.event.call(f);f._init();};a.editor.replace=function(b,c){var d=b;if(typeof d!='object'){d=document.getElementById(b);if(!d){var e=0,f=document.getElementsByName(b);while((d=f[e++])&&d.tagName.toLowerCase()!='textarea'){}}if(!d)throw '[CKEDITOR.editor.replace] The element with id or name "'+b+'" was not found.';}d.style.visibility='hidden';return new a.editor(c,d,1);};a.editor.appendTo=function(b,c,d){var e=b;if(typeof e!='object'){e=document.getElementById(b);if(!e)throw '[CKEDITOR.editor.appendTo] The element with id "'+b+'" was not found.';}return new a.editor(c,e,2,d);};a.editor.prototype={_init:function(){var b=a.editor._pending||(a.editor._pending=[]);b.push(this);},fire:function(b,c){return a.event.prototype.fire.call(this,b,c,this);},fireOnce:function(b,c){return a.event.prototype.fireOnce.call(this,b,c,this);}};a.event.implementOn(a.editor.prototype,true);}if(!a.env)a.env=(function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,d={ie:/*@cc_on!@*/false,opera:!!c&&c.version,webkit:b.indexOf(' applewebkit/')>-1,air:b.indexOf(' adobeair/')>-1,mac:b.indexOf('macintosh')>-1,quirks:document.compatMode=='BackCompat',mobile:b.indexOf('mobile')>-1,isCustomDomain:function(){if(!this.ie)return false;var g=document.domain,h=window.location.hostname;return g!=h&&g!='['+h+']';}};d.gecko=navigator.product=='Gecko'&&!d.webkit&&!d.opera;var e=0;if(d.ie){e=parseFloat(b.match(/msie (\d+)/)[1]);d.ie8=!!document.documentMode;d.ie8Compat=document.documentMode==8;d.ie7Compat=e==7&&!document.documentMode||document.documentMode==7;d.ie6Compat=e<7||d.quirks;}if(d.gecko){var f=b.match(/rv:([\d\.]+)/);if(f){f=f[1].split('.');e=f[0]*10000+(f[1]||0)*100+ +(f[2]||0);}}if(d.opera)e=parseFloat(c.version());if(d.air)e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]);if(d.webkit)e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]);d.version=e;d.isCompatible=!d.mobile&&(d.ie&&e>=6||d.gecko&&e>=10801||d.opera&&e>=9.5||d.air&&e>=1||d.webkit&&e>=522||false);d.cssClass='cke_browser_'+(d.ie?'ie':d.gecko?'gecko':d.opera?'opera':d.air?'air':d.webkit?'webkit':'unknown');if(d.quirks)d.cssClass+=' cke_browser_quirks';if(d.ie){d.cssClass+=' cke_browser_ie'+(d.version<7?'6':d.version>=8?document.documentMode:'7');if(d.quirks)d.cssClass+=' cke_browser_iequirks';
}if(d.gecko&&e<10900)d.cssClass+=' cke_browser_gecko18';return d;})();var b=a.env;var c=b.ie;if(a.status=='unloaded')(function(){a.event.implementOn(a);a.loadFullCore=function(){if(a.status!='basic_ready'){a.loadFullCore._load=1;return;}delete a.loadFullCore;var e=document.createElement('script');e.type='text/javascript';e.src=a.basePath+'ckeditor.js';document.getElementsByTagName('head')[0].appendChild(e);};a.loadFullCoreTimeout=0;a.replaceClass='ckeditor';a.replaceByClassEnabled=1;var d=function(e,f,g,h){if(b.isCompatible){if(a.loadFullCore)a.loadFullCore();var i=g(e,f,h);a.add(i);return i;}return null;};a.replace=function(e,f){return d(e,f,a.editor.replace);};a.appendTo=function(e,f,g){return d(e,f,a.editor.appendTo,g);};a.add=function(e){var f=this._.pending||(this._.pending=[]);f.push(e);};a.replaceAll=function(){var e=document.getElementsByTagName('textarea');for(var f=0;f<e.length;f++){var g=null,h=e[f],i=h.name;if(!h.name&&!h.id)continue;if(typeof arguments[0]=='string'){var j=new RegExp('(?:^|\\s)'+arguments[0]+'(?:$|\\s)');if(!j.test(h.className))continue;}else if(typeof arguments[0]=='function'){g={};if(arguments[0](h,g)===false)continue;}this.replace(h,g);}};(function(){var e=function(){var f=a.loadFullCore,g=a.loadFullCoreTimeout;if(a.replaceByClassEnabled)a.replaceAll(a.replaceClass);a.status='basic_ready';if(f&&f._load)f();else if(g)setTimeout(function(){if(a.loadFullCore)a.loadFullCore();},g*1000);};if(window.addEventListener)window.addEventListener('load',e,false);else if(window.attachEvent)window.attachEvent('onload',e);})();a.status='basic_loaded';})();})();

View File

@@ -1,20 +0,0 @@
/*
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
// Compressed version of core/ckeditor_base.js. See original for instructions.
/*jsl:ignore*/
if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.4.2',revision:'6041',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
/*jsl:end*/
// Uncomment the following line to have a new timestamp generated for each
// request, having clear cache load of the editor code.
// CKEDITOR.timestamp = ( new Date() ).valueOf();
// Set the script name to be loaded by the loader.
CKEDITOR._autoLoad = 'core/ckeditor_basic';
// Include the loader script.
document.write(
'<script type="text/javascript" src="' + CKEDITOR.getUrl( '_source/core/loader.js' ) + '"></script>' );

View File

@@ -1,25 +0,0 @@
/*
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
// Compressed version of core/ckeditor_base.js. See original for instructions.
/*jsl:ignore*/
if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.4.2',revision:'6041',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf('://')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf('://')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
/*jsl:end*/
// Uncomment the following line to have a new timestamp generated for each
// request, having clear cache load of the editor code.
// CKEDITOR.timestamp = ( new Date() ).valueOf();
if ( CKEDITOR.loader )
CKEDITOR.loader.load( 'core/ckeditor' );
else
{
// Set the script name to be loaded by the loader.
CKEDITOR._autoLoad = 'core/ckeditor';
// Include the loader script.
document.write(
'<script type="text/javascript" src="' + CKEDITOR.getUrl( '_source/core/loader.js' ) + '"></script>' );
}

View File

@@ -1,64 +0,0 @@
/*
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
CKEDITOR.editorConfig = function( config )
{
//config.customConfig // to ovveride config.js
// The language will be set from within iTop, depending on the current user
// config.language = 'de'; // german
// config.contentsLanguage = 'de'; // german
// Make it more concise for iTop forms
config.removePlugins = 'elementspath';
config.toolbarStartupExpanded = false;
config.toolbar = 'itop';
//config.toolbar_basic
//config.toolbar_Full
config.toolbar_itop =
[
['Source'],
['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print'],
['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
'/',
['Bold','Italic','Underline','Strike'],
['NumberedList','BulletedList','-','Outdent','Indent'],
['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
['Link','Unlink','Anchor'],
['Image','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
'/',
['Styles','Format','Font','FontSize'],
['TextColor','BGColor'],
['Maximize', 'ShowBlocks','-','About']
];
config.toolbar_Full =
[
['Source','-','Save','NewPage','Preview','-','Templates'],
['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],
'/',
['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],
['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
['BidiLtr', 'BidiRtl' ],
['Link','Unlink','Anchor'],
['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
'/',
['Styles','Format','Font','FontSize'],
['TextColor','BGColor'],
['Maximize', 'ShowBlocks','-','About']
];
// Little value and even disturbing when it comes to describing very technical stuff
config.disableNativeSpellChecker = true;
// Handling of doc/image uploads
// config.filebrowserImageUploadUrl
// config.filebrowserUploadUrl
// + it is possible to define the supported tags (p, pre, etc) and the corresponding class.
};

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 B

View File

@@ -1,6 +0,0 @@
/*
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
var CKEDITOR_LANGS=(function(){var b={af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',cy:'Welsh',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-gb':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',is:'Icelandic',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},c=[];for(var d in b)c.push({code:d,name:b[d]});c.sort(function(e,f){return e.name<f.name?-1:1;});return c;})();

View File

@@ -1,60 +0,0 @@
Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
af.js Found: 287 Missing: 244
ar.js Found: 451 Missing: 80
bg.js Found: 280 Missing: 251
bn.js Found: 281 Missing: 250
bs.js Found: 187 Missing: 344
ca.js Found: 490 Missing: 41
cs.js Found: 411 Missing: 120
cy.js Found: 452 Missing: 79
da.js Found: 404 Missing: 127
de.js Found: 528 Missing: 3
el.js Found: 286 Missing: 245
en-au.js Found: 369 Missing: 162
en-ca.js Found: 369 Missing: 162
en-gb.js Found: 370 Missing: 161
eo.js Found: 259 Missing: 272
es.js Found: 524 Missing: 7
et.js Found: 301 Missing: 230
eu.js Found: 403 Missing: 128
fa.js Found: 302 Missing: 229
fi.js Found: 531 Missing: 0
fo.js Found: 420 Missing: 111
fr-ca.js Found: 301 Missing: 230
fr.js Found: 403 Missing: 128
gl.js Found: 283 Missing: 248
gu.js Found: 300 Missing: 231
he.js Found: 531 Missing: 0
hi.js Found: 302 Missing: 229
hr.js Found: 404 Missing: 127
hu.js Found: 445 Missing: 86
is.js Found: 307 Missing: 224
it.js Found: 404 Missing: 127
ja.js Found: 413 Missing: 118
km.js Found: 275 Missing: 256
ko.js Found: 293 Missing: 238
lt.js Found: 306 Missing: 225
lv.js Found: 283 Missing: 248
mn.js Found: 300 Missing: 231
ms.js Found: 265 Missing: 266
nb.js Found: 470 Missing: 61
nl.js Found: 531 Missing: 0
no.js Found: 470 Missing: 61
pl.js Found: 411 Missing: 120
pt-br.js Found: 524 Missing: 7
pt.js Found: 282 Missing: 249
ro.js Found: 301 Missing: 230
ru.js Found: 467 Missing: 64
sk.js Found: 302 Missing: 229
sl.js Found: 410 Missing: 121
sr-latn.js Found: 276 Missing: 255
sr.js Found: 275 Missing: 256
sv.js Found: 299 Missing: 232
th.js Found: 287 Missing: 244
tr.js Found: 524 Missing: 7
uk.js Found: 531 Missing: 0
vi.js Found: 481 Missing: 50
zh-cn.js Found: 531 Missing: 0
zh.js Found: 404 Missing: 127

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More