mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-19 23:32:17 +02:00
Merge branch 'develop' into feature/faf_event_service
This commit is contained in:
@@ -40,20 +40,20 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:UserLocal/Attribute:password+' => '用于验证用户身份的字符串',
|
||||
|
||||
'Class:UserLocal/Attribute:expiration' => '密码过期',
|
||||
'Class:UserLocal/Attribute:expiration+' => '密码过期状态 (需要一个扩展才能生效)',
|
||||
'Class:UserLocal/Attribute:expiration+' => '密码过期状态(需要一个扩展才能生效)',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => '允许过期',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => '永不过期',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => '已过期',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => '一次性密码',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => '用户不允许修改密码.',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => '密码更新',
|
||||
'Class:UserLocal/Attribute:password_renewed_date+' => '上次修改密码的时间',
|
||||
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => '密码必须至少8 个字符,包含大小写、数字和特殊字符.',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => '密码必须至少8个字符,包含大小写,数字和特殊字符.',
|
||||
|
||||
'UserLocal:password:expiration' => '下面的区域需要插件扩展',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => '不允许用户为自己设置"一次性密码"的失效期限',
|
||||
));
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -23,23 +23,23 @@
|
||||
// Database inconsistencies
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// Dictionary entries go here
|
||||
'Menu:DBToolsMenu' => 'DB 工具',
|
||||
'DBTools:Class' => 'Class~~',
|
||||
'Menu:DBToolsMenu' => '数据库工具',
|
||||
'DBTools:Class' => '类',
|
||||
'DBTools:Title' => '数据库维护工具',
|
||||
'DBTools:ErrorsFound' => '发现错误',
|
||||
'DBTools:Indication' => 'Important: after fixing errors in the database you\'ll have to run the analysis again as new inconsistencies will be generated~~',
|
||||
'DBTools:Disclaimer' => 'DISCLAIMER: BACKUP YOUR DATABASE BEFORE RUNNING THE FIXES~~',
|
||||
'DBTools:Indication' => '重要: 修复数据库错误后,可能会出现新的不一致,您必须重新运行一次分析.',
|
||||
'DBTools:Disclaimer' => '免责申明: 在应用修复之前,应先备份数据库',
|
||||
'DBTools:Error' => '错误',
|
||||
'DBTools:Count' => '个数',
|
||||
'DBTools:SQLquery' => 'SQL 查询',
|
||||
'DBTools:FixitSQLquery' => 'SQL query To Fix it (indication)~~',
|
||||
'DBTools:SQLresult' => 'SQL 结果',
|
||||
'DBTools:NoError' => '数据库OK ',
|
||||
'DBTools:NoError' => '数据库正确',
|
||||
'DBTools:HideIds' => '错误列表',
|
||||
'DBTools:ShowIds' => '详细视图',
|
||||
'DBTools:ShowReport' => '报告',
|
||||
'DBTools:IntegrityCheck' => '完整性检查',
|
||||
'DBTools:FetchCheck' => 'Fetch Check (long)~~',
|
||||
'DBTools:FetchCheck' => '提取检查(耗时长)',
|
||||
'DBTools:SelectAnalysisType' => '请选择分析类型',
|
||||
|
||||
'DBTools:Analyze' => '分析',
|
||||
@@ -47,17 +47,17 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'DBTools:ShowAll' => '显示所有错误',
|
||||
|
||||
'DBTools:Inconsistencies' => '数据库不一致',
|
||||
'DBTools:DetailedErrorTitle' => '%2$s error(s) in class %1$s: %3$s~~',
|
||||
'DBTools:DetailedErrorTitle' => '%2$s 个错误在类 %1$s: %3$s',
|
||||
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
|
||||
'DBAnalyzer-Integrity-InvalidExtKey' => '无效的外键 %1$s (列: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => '外键丢失 %1$s (列: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-InvalidValue' => '无效的值 %1$s (列: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
|
||||
'DBAnalyzer-Integrity-HKInvalid' => 'Broken hierarchical key `%1$s`~~',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => '一些用户账号没有角色',
|
||||
'DBAnalyzer-Integrity-HKInvalid' => '损坏的层级链 `%1$s`',
|
||||
'DBAnalyzer-Fetch-Count-Error' => 'Fetch count error in `%1$s`, %2$d entries fetched / %3$d counted~~',
|
||||
'DBAnalyzer-Integrity-FinalClass' => 'Field `%2$s`.`%1$s` must have the same value than `%3$s`.`%1$s`~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
|
||||
'DBAnalyzer-Integrity-FinalClass' => '字段 `%2$s`.`%1$s` 必须是相同的值,而不是 `%3$s`.`%1$s`',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => '字段 `%2$s`.`%1$s` 必须包含一个有效的类',
|
||||
));
|
||||
|
||||
// Database Info
|
||||
@@ -70,11 +70,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// Lost attachments
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'DBTools:LostAttachments' => '缺失附件',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => '可以在此搜索数据库中丢失或错放的附件.这不是数据恢复工具,其无法恢复已删除的数据.',
|
||||
|
||||
'DBTools:LostAttachments:Button:Analyze' => '分析',
|
||||
'DBTools:LostAttachments:Button:Restore' => '还原',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => '该操作无法回退, 请确认是否继续还原.',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => '此操作无法回退, 请确认是否继续还原.',
|
||||
'DBTools:LostAttachments:Button:Busy' => '请稍后...',
|
||||
|
||||
'DBTools:LostAttachments:Step:Analyze' => '首先, 通过分析数据库来搜索丢失或误挪动的附件.',
|
||||
@@ -89,6 +89,6 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'DBTools:LostAttachments:Step:RestoreResults' => '还原结果:',
|
||||
'DBTools:LostAttachments:Step:RestoreResults:Results' => '%1$d/%2$d 的附件被还原.',
|
||||
|
||||
'DBTools:LostAttachments:StoredAsInlineImage' => 'Stored as inline image~~',
|
||||
'DBTools:LostAttachments:History' => '附件 "%1$s" restored with DB 工具~~'
|
||||
'DBTools:LostAttachments:StoredAsInlineImage' => '存储为内嵌图像',
|
||||
'DBTools:LostAttachments:History' => '附件 "%1$s" 已使用数据库工具还原'
|
||||
));
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
<module>combodo-db-tools</module>
|
||||
<module>itop-core-update</module>
|
||||
<module>itop-hub-connector</module>
|
||||
<module>itop-oauth-client</module>
|
||||
<module>combodo-backoffice-darkmoon-theme</module>
|
||||
<module>itop-themes-compat</module>
|
||||
</modules>
|
||||
|
||||
@@ -29,9 +29,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Attachment:Max_Mo' => '(最大文件尺寸: %1$s MB)',
|
||||
'Attachment:Max_Ko' => '(最大文件尺寸: %1$s KB)',
|
||||
'Attachments:NoAttachment' => '没有附件. ',
|
||||
'Attachments:PreviewNotAvailable' => '该附件类型不支持预览.',
|
||||
'Attachments:PreviewNotAvailable' => '此附件类型不支持预览.',
|
||||
'Attachments:Error:FileTooLarge' => '上传的文件过大. %1$s',
|
||||
'Attachments:Error:UploadedFileEmpty' => '收到的文件为空,无法添加. 可能是因为您发送的是空文件,或者咨询 '.ITOP_APPLICATION_SHORT.' 管理员服务器磁盘是否已满. ',
|
||||
'Attachments:Error:UploadedFileEmpty' => '收到的文件为空,无法添加. 可能是因为您发送的是空文件,或者咨询 '.ITOP_APPLICATION_SHORT.' 管理员服务器磁盘是否已满. ',
|
||||
'Attachments:Render:Icons' => '显示为图标',
|
||||
'Attachments:Render:Table' => '显示为列表',
|
||||
'UI:Attachments:DropYourFileHint' => '将文件拖放到此区域的任意位置',
|
||||
@@ -48,11 +48,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Attachment/Attribute:expire+' => '~~',
|
||||
'Class:Attachment/Attribute:temp_id' => '临时id',
|
||||
'Class:Attachment/Attribute:temp_id+' => '~~',
|
||||
'Class:Attachment/Attribute:item_class' => 'Item class~~',
|
||||
'Class:Attachment/Attribute:item_class' => '项目类',
|
||||
'Class:Attachment/Attribute:item_class+' => '~~',
|
||||
'Class:Attachment/Attribute:item_id' => '项目',
|
||||
'Class:Attachment/Attribute:item_id+' => '~~',
|
||||
'Class:Attachment/Attribute:item_org_id' => 'Item 组织~~',
|
||||
'Class:Attachment/Attribute:item_org_id' => '项目组织',
|
||||
'Class:Attachment/Attribute:item_org_id+' => '',
|
||||
'Class:Attachment/Attribute:contents' => '内容',
|
||||
'Class:Attachment/Attribute:contents+' => '',
|
||||
@@ -74,8 +74,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Attachment/Attribute:creation_date' => '创建日期',
|
||||
'Class:Attachment/Attribute:creation_date+' => '~~',
|
||||
'Class:Attachment/Attribute:user_id' => '用户 id',
|
||||
'Class:Attachment/Attribute:user_id' => '用户id',
|
||||
'Class:Attachment/Attribute:user_id+' => '~~',
|
||||
'Class:Attachment/Attribute:contact_id' => '联系人 id',
|
||||
'Class:Attachment/Attribute:contact_id' => '联系人id',
|
||||
'Class:Attachment/Attribute:contact_id+' => '~~',
|
||||
));
|
||||
|
||||
@@ -28,14 +28,14 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Menu:BackupStatus' => '定时备份',
|
||||
'bkp-status-title' => '定时备份',
|
||||
'bkp-status-checks' => '设置与检查',
|
||||
'bkp-mysqldump-ok' => '已找到 mysqldump : %1$s',
|
||||
'bkp-mysqldump-ok' => '已找到mysqldump : %1$s',
|
||||
'bkp-mysqldump-notfound' => 'mysqldump 找不到: %1$s - 请确认它安装在正确的路径, 或者调整'.ITOP_APPLICATION_SHORT.' 配置文件的选项mysql_bindir.',
|
||||
'bkp-mysqldump-issue' => 'mysqldump 无法运行 (retcode=%1$d): 请确认它安装在正确的路径, 或者调整'.ITOP_APPLICATION_SHORT.' 配置文件的选项mysql_bindir',
|
||||
'bkp-missing-dir' => '目标目录 <code>%1$s</code> 找不到',
|
||||
'bkp-free-disk-space' => '<b>%1$s 空闲</b> 在 <code>%2$s</code>',
|
||||
'bkp-free-disk-space' => '<b>%1$s 可用空间 </b> 位于 <code>%2$s</code>',
|
||||
'bkp-dir-not-writeable' => '%1$s 没有写入权限',
|
||||
'bkp-wrong-format-spec' => '当前文件名格式错误 (%1$s). 默认格式应该是: %2$s',
|
||||
'bkp-name-sample' => '备份文件将以数据库名、日期和时间进行命名. 例如: %1$s',
|
||||
'bkp-name-sample' => '备份文件将以数据库名,日期和时间进行命名. 例如: %1$s',
|
||||
'bkp-week-days' => '在每个 <b> %1$s 的 %2$s</b> 进行备份',
|
||||
'bkp-retention' => '最多 <b>%1$d 份备份文件 </b> 在目标目录.',
|
||||
'bkp-next-to-delete' => '当下一次备份时将被删除 (see the setting "retention_count")',
|
||||
@@ -49,7 +49,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'bkp-status-backups-manual' => '手动备份',
|
||||
'bkp-status-backups-none' => '尚未开始备份',
|
||||
'bkp-next-backup' => '下一次备份将发生在 <b>%1$s</b> (%2$s) 的 %3$s',
|
||||
'bkp-next-backup-unknown' => 'The next backup is <b>not scheduled</b> yet.~~',
|
||||
'bkp-next-backup-unknown' => '下一次备份<b>尚未被计划</b>.',
|
||||
'bkp-button-backup-now' => '立即备份!',
|
||||
'bkp-button-restore-now' => '还原!',
|
||||
'bkp-confirm-backup' => '请确认是否立即开始备份.',
|
||||
|
||||
@@ -91,9 +91,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list' => '供应商合同',
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list+' => '该配置项的所有供应商合同',
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list+' => '此配置项的所有供应商合同',
|
||||
'Class:FunctionalCI/Attribute:services_list' => '服务',
|
||||
'Class:FunctionalCI/Attribute:services_list+' => '该配置项影响的所有服务',
|
||||
'Class:FunctionalCI/Attribute:services_list+' => '此配置项影响的所有服务',
|
||||
'Class:FunctionalCI/Attribute:tickets_list' => '工单',
|
||||
'Class:FunctionalCI/Attribute:tickets_list+' => '该配置项包含的所有工单',
|
||||
'Class:FunctionalCI/Attribute:tickets_list+' => '此配置项包含的所有工单',
|
||||
));
|
||||
|
||||
@@ -125,13 +125,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Change/Attribute:parent_name' => '变更编号',
|
||||
'Class:Change/Attribute:parent_name+' => '',
|
||||
'Class:Change/Attribute:related_request_list' => '相关需求',
|
||||
'Class:Change/Attribute:related_request_list+' => '该变更相关的所有用户需求',
|
||||
'Class:Change/Attribute:related_request_list+' => '此变更相关的所有用户需求',
|
||||
'Class:Change/Attribute:related_problems_list' => '相关问题',
|
||||
'Class:Change/Attribute:related_problems_list+' => '该变更相关的所有问题',
|
||||
'Class:Change/Attribute:related_problems_list+' => '此变更相关的所有问题',
|
||||
'Class:Change/Attribute:related_incident_list' => '相关事件',
|
||||
'Class:Change/Attribute:related_incident_list+' => '该变更相关的所有事件',
|
||||
'Class:Change/Attribute:related_incident_list+' => '此变更相关的所有事件',
|
||||
'Class:Change/Attribute:child_changes_list' => '子变更',
|
||||
'Class:Change/Attribute:child_changes_list+' => '该变更相关的字变更',
|
||||
'Class:Change/Attribute:child_changes_list+' => '此变更相关的字变更',
|
||||
'Class:Change/Attribute:parent_id_friendlyname' => '父级变更昵称',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '',
|
||||
'Class:Change/Attribute:parent_id_finalclass_recall' => '变更类型',
|
||||
|
||||
@@ -109,13 +109,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Change/Attribute:fallback_plan' => '回滚计划',
|
||||
'Class:Change/Attribute:fallback_plan+' => '',
|
||||
'Class:Change/Attribute:related_request_list' => '相关需求',
|
||||
'Class:Change/Attribute:related_request_list+' => '该变更相关的所有用户需求',
|
||||
'Class:Change/Attribute:related_request_list+' => '此变更相关的所有用户需求',
|
||||
'Class:Change/Attribute:related_incident_list' => '相关事件',
|
||||
'Class:Change/Attribute:related_incident_list+' => '该变更相关的所有事件',
|
||||
'Class:Change/Attribute:related_incident_list+' => '此变更相关的所有事件',
|
||||
'Class:Change/Attribute:related_problems_list' => '相关问题',
|
||||
'Class:Change/Attribute:related_problems_list+' => '该变更相关的所有问题',
|
||||
'Class:Change/Attribute:related_problems_list+' => '此变更相关的所有问题',
|
||||
'Class:Change/Attribute:child_changes_list' => '子变更',
|
||||
'Class:Change/Attribute:child_changes_list+' => '该变更相关的所有子变更',
|
||||
'Class:Change/Attribute:child_changes_list+' => '此变更相关的所有子变更',
|
||||
'Class:Change/Attribute:parent_id_friendlyname' => '父级变更昵称',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '',
|
||||
'Class:Change/Stimulus:ev_assign' => '分配',
|
||||
|
||||
@@ -29,12 +29,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Relation:impacts/DownStream' => '影响...',
|
||||
'Relation:impacts/DownStream+' => '被影响的元素',
|
||||
'Relation:impacts/UpStream' => '依赖于...',
|
||||
'Relation:impacts/UpStream+' => '该元素依赖的元素...',
|
||||
'Relation:impacts/UpStream+' => '此元素依赖的元素...',
|
||||
// Legacy entries
|
||||
'Relation:depends on/Description' => '该元素依赖的元素...',
|
||||
'Relation:depends on/Description' => '此元素依赖的元素...',
|
||||
'Relation:depends on/DownStream' => '依赖于...',
|
||||
'Relation:depends on/UpStream' => '影响...',
|
||||
'Relation:impacts/LoadData' => 'Load data~~',
|
||||
'Relation:impacts/LoadData' => '加载数据',
|
||||
'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
|
||||
));
|
||||
|
||||
@@ -81,7 +81,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkContactToFunctionalCI' => '链接 联系人 / 功能项',
|
||||
'Class:lnkContactToFunctionalCI' => '关联 联系人/功能项',
|
||||
'Class:lnkContactToFunctionalCI+' => '',
|
||||
'Class:lnkContactToFunctionalCI/Attribute:functionalci_id' => '功能项',
|
||||
'Class:lnkContactToFunctionalCI/Attribute:functionalci_id+' => '',
|
||||
@@ -119,13 +119,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:FunctionalCI/Attribute:move2production' => '投产日期',
|
||||
'Class:FunctionalCI/Attribute:move2production+' => '',
|
||||
'Class:FunctionalCI/Attribute:contacts_list' => '联系人',
|
||||
'Class:FunctionalCI/Attribute:contacts_list+' => '该配置项的所有联系人',
|
||||
'Class:FunctionalCI/Attribute:contacts_list+' => '此配置项的所有联系人',
|
||||
'Class:FunctionalCI/Attribute:documents_list' => '文档',
|
||||
'Class:FunctionalCI/Attribute:documents_list+' => '该配置项关联的所有文档',
|
||||
'Class:FunctionalCI/Attribute:documents_list+' => '此配置项关联的所有文档',
|
||||
'Class:FunctionalCI/Attribute:applicationsolution_list' => '应用方案',
|
||||
'Class:FunctionalCI/Attribute:applicationsolution_list+' => '该配置项依赖的所有应用方案',
|
||||
'Class:FunctionalCI/Attribute:applicationsolution_list+' => '此配置项依赖的所有应用方案',
|
||||
'Class:FunctionalCI/Attribute:softwares_list' => '软件',
|
||||
'Class:FunctionalCI/Attribute:softwares_list+' => '该配置项上已安装的所有软件',
|
||||
'Class:FunctionalCI/Attribute:softwares_list+' => '此配置项上已安装的所有软件',
|
||||
'Class:FunctionalCI/Attribute:finalclass' => '二级配置项',
|
||||
'Class:FunctionalCI/Attribute:finalclass+' => 'Name of the final class',
|
||||
'Class:FunctionalCI/Tab:OpenedTickets' => '活跃的工单',
|
||||
@@ -180,9 +180,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Rack/Attribute:nb_u' => '机柜高度',
|
||||
'Class:Rack/Attribute:nb_u+' => '',
|
||||
'Class:Rack/Attribute:device_list' => '设备',
|
||||
'Class:Rack/Attribute:device_list+' => '该机柜托管的所有物理设备',
|
||||
'Class:Rack/Attribute:device_list+' => '此机柜托管的所有物理设备',
|
||||
'Class:Rack/Attribute:enclosure_list' => '机位',
|
||||
'Class:Rack/Attribute:enclosure_list+' => '该机柜上的所有机位',
|
||||
'Class:Rack/Attribute:enclosure_list+' => '此机柜上的所有机位',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -190,7 +190,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TelephonyCI' => 'Telephony CI',
|
||||
'Class:TelephonyCI' => '电讯配置项',
|
||||
'Class:TelephonyCI+' => '',
|
||||
'Class:TelephonyCI/Attribute:phonenumber' => '电话号码',
|
||||
'Class:TelephonyCI/Attribute:phonenumber+' => '',
|
||||
@@ -270,20 +270,20 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:DatacenterDevice/Attribute:managementip+' => '',
|
||||
'Class:DatacenterDevice/Attribute:powerA_id' => '电源A',
|
||||
'Class:DatacenterDevice/Attribute:powerA_id+' => '',
|
||||
'Class:DatacenterDevice/Attribute:powerA_name' => 'PowerA source name',
|
||||
'Class:DatacenterDevice/Attribute:powerA_name' => '电源A名称',
|
||||
'Class:DatacenterDevice/Attribute:powerA_name+' => '',
|
||||
'Class:DatacenterDevice/Attribute:powerB_id' => '电源B',
|
||||
'Class:DatacenterDevice/Attribute:powerB_id+' => '',
|
||||
'Class:DatacenterDevice/Attribute:powerB_name' => 'PowerB source name',
|
||||
'Class:DatacenterDevice/Attribute:powerB_name' => '电源B名称',
|
||||
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
|
||||
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => '光纤端口',
|
||||
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '该设备的所有光纤端口',
|
||||
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '此设备的所有光纤端口',
|
||||
'Class:DatacenterDevice/Attribute:san_list' => 'SANs',
|
||||
'Class:DatacenterDevice/Attribute:san_list+' => '所有连接到这台设备的SAN 交换机',
|
||||
'Class:DatacenterDevice/Attribute:san_list+' => '所有连接到这台设备的SAN交换机',
|
||||
'Class:DatacenterDevice/Attribute:redundancy' => '冗余',
|
||||
'Class:DatacenterDevice/Attribute:redundancy/count' => '该设备运行正常至少需要一路电源 (A 或 B)',
|
||||
'Class:DatacenterDevice/Attribute:redundancy/count' => '此设备运行正常至少需要一路电源 (A 或 B)',
|
||||
// Unused yet
|
||||
'Class:DatacenterDevice/Attribute:redundancy/disabled' => '所有电源正常,该设备才正常',
|
||||
'Class:DatacenterDevice/Attribute:redundancy/disabled' => '所有电源正常,此设备才正常',
|
||||
'Class:DatacenterDevice/Attribute:redundancy/percent' => '至少 %1$s %% 路电源正常,设备才正常',
|
||||
));
|
||||
|
||||
@@ -299,10 +299,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:NetworkDevice/Attribute:networkdevicetype_name' => '网络设备类型名称',
|
||||
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
|
||||
'Class:NetworkDevice/Attribute:connectablecis_list' => '设备',
|
||||
'Class:NetworkDevice/Attribute:connectablecis_list+' => '连接到该网络设备的所有设备',
|
||||
'Class:NetworkDevice/Attribute:iosversion_id' => 'IOS 版本',
|
||||
'Class:NetworkDevice/Attribute:connectablecis_list+' => '连接到此网络设备的所有设备',
|
||||
'Class:NetworkDevice/Attribute:iosversion_id' => 'IOS版本',
|
||||
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
|
||||
'Class:NetworkDevice/Attribute:iosversion_name' => 'IOS 版本名称',
|
||||
'Class:NetworkDevice/Attribute:iosversion_name' => 'IOS版本名称',
|
||||
'Class:NetworkDevice/Attribute:iosversion_name+' => '',
|
||||
'Class:NetworkDevice/Attribute:ram' => '内存',
|
||||
'Class:NetworkDevice/Attribute:ram+' => '',
|
||||
@@ -332,7 +332,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Server/Attribute:ram' => '内存',
|
||||
'Class:Server/Attribute:ram+' => '',
|
||||
'Class:Server/Attribute:logicalvolumes_list' => '逻辑卷',
|
||||
'Class:Server/Attribute:logicalvolumes_list+' => '连接到该服务器的所有逻辑卷',
|
||||
'Class:Server/Attribute:logicalvolumes_list+' => '连接到此服务器的所有逻辑卷',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -343,7 +343,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:StorageSystem' => '存储系统',
|
||||
'Class:StorageSystem+' => '',
|
||||
'Class:StorageSystem/Attribute:logicalvolume_list' => '逻辑卷',
|
||||
'Class:StorageSystem/Attribute:logicalvolume_list+' => '该存储系统包含的所有逻辑卷',
|
||||
'Class:StorageSystem/Attribute:logicalvolume_list+' => '此存储系统包含的所有逻辑卷',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -351,10 +351,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:SANSwitch' => 'SAN 交换机',
|
||||
'Class:SANSwitch' => 'SAN交换机',
|
||||
'Class:SANSwitch+' => '',
|
||||
'Class:SANSwitch/Attribute:datacenterdevice_list' => '设备',
|
||||
'Class:SANSwitch/Attribute:datacenterdevice_list+' => '连接到该SAN 交换机的所有设备',
|
||||
'Class:SANSwitch/Attribute:datacenterdevice_list+' => '连接到此SAN交换机的所有设备',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -365,7 +365,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TapeLibrary' => '磁带库',
|
||||
'Class:TapeLibrary+' => '',
|
||||
'Class:TapeLibrary/Attribute:tapes_list' => '磁带',
|
||||
'Class:TapeLibrary/Attribute:tapes_list+' => '该磁带库里的所有磁带',
|
||||
'Class:TapeLibrary/Attribute:tapes_list+' => '此磁带库里的所有磁带',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -376,7 +376,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:NAS' => 'NAS',
|
||||
'Class:NAS+' => '',
|
||||
'Class:NAS/Attribute:nasfilesystem_list' => '文件系统',
|
||||
'Class:NAS/Attribute:nasfilesystem_list+' => '该NAS 里的所有文件系统',
|
||||
'Class:NAS/Attribute:nasfilesystem_list+' => '此NAS里的所有文件系统',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -432,7 +432,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:PowerSource' => '电源',
|
||||
'Class:PowerSource+' => '',
|
||||
'Class:PowerSource/Attribute:pdus_list' => 'PDU',
|
||||
'Class:PowerSource/Attribute:pdus_list+' => '使用该电源的所有PDU',
|
||||
'Class:PowerSource/Attribute:pdus_list+' => '使用此电源的所有PDU',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -475,7 +475,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Enclosure/Attribute:nb_u' => '高度',
|
||||
'Class:Enclosure/Attribute:nb_u+' => '',
|
||||
'Class:Enclosure/Attribute:device_list' => '设备',
|
||||
'Class:Enclosure/Attribute:device_list+' => '该机位的所有设备',
|
||||
'Class:Enclosure/Attribute:device_list+' => '此机位的所有设备',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -486,9 +486,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:ApplicationSolution' => '应用方案',
|
||||
'Class:ApplicationSolution+' => '',
|
||||
'Class:ApplicationSolution/Attribute:functionalcis_list' => '配置项',
|
||||
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '该应用方案包含的所有配置项',
|
||||
'Class:ApplicationSolution/Attribute:functionalcis_list+' => '此应用方案包含的所有配置项',
|
||||
'Class:ApplicationSolution/Attribute:businessprocess_list' => '业务流程',
|
||||
'Class:ApplicationSolution/Attribute:businessprocess_list+' => '所有依赖该应用方案的业务流程',
|
||||
'Class:ApplicationSolution/Attribute:businessprocess_list+' => '所有依赖此应用方案的业务流程',
|
||||
'Class:ApplicationSolution/Attribute:status' => '状态',
|
||||
'Class:ApplicationSolution/Attribute:status+' => '',
|
||||
'Class:ApplicationSolution/Attribute:status/Value:active' => '启用',
|
||||
@@ -496,9 +496,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:ApplicationSolution/Attribute:status/Value:inactive' => '停用',
|
||||
'Class:ApplicationSolution/Attribute:status/Value:inactive+' => '停用',
|
||||
'Class:ApplicationSolution/Attribute:redundancy' => '影响分析: 冗余配置',
|
||||
'Class:ApplicationSolution/Attribute:redundancy/disabled' => 'The solution is up if all CIs are up',
|
||||
'Class:ApplicationSolution/Attribute:redundancy/count' => 'The solution is up if at least %1$s CI(s) is(are) up',
|
||||
'Class:ApplicationSolution/Attribute:redundancy/percent' => 'The solution is up if at least %1$s %% of the CIs are up',
|
||||
'Class:ApplicationSolution/Attribute:redundancy/disabled' => '所有配置项正常,此应用方案才正常',
|
||||
'Class:ApplicationSolution/Attribute:redundancy/count' => '至少 %1$s 个配置项正常时此应用方案才正常',
|
||||
'Class:ApplicationSolution/Attribute:redundancy/percent' => '至少 %1$s %% 的配置项正常,此应用方案才正常',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -509,7 +509,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:BusinessProcess' => '业务流程',
|
||||
'Class:BusinessProcess+' => '',
|
||||
'Class:BusinessProcess/Attribute:applicationsolutions_list' => '应用方案',
|
||||
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '所有影响该业务流程的应用方案',
|
||||
'Class:BusinessProcess/Attribute:applicationsolutions_list+' => '所有影响此业务流程的应用方案',
|
||||
'Class:BusinessProcess/Attribute:status' => '状态',
|
||||
'Class:BusinessProcess/Attribute:status+' => '',
|
||||
'Class:BusinessProcess/Attribute:status/Value:active' => '启用',
|
||||
@@ -555,7 +555,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Middleware' => '中间件',
|
||||
'Class:Middleware+' => '',
|
||||
'Class:Middleware/Attribute:middlewareinstance_list' => '中间件实例',
|
||||
'Class:Middleware/Attribute:middlewareinstance_list+' => '该中间件的所有实例',
|
||||
'Class:Middleware/Attribute:middlewareinstance_list+' => '此中间件的所有实例',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -566,7 +566,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:DBServer' => '数据库服务器',
|
||||
'Class:DBServer+' => '',
|
||||
'Class:DBServer/Attribute:dbschema_list' => '数据库',
|
||||
'Class:DBServer/Attribute:dbschema_list+' => '该数据库服务器上的所有数据库架构',
|
||||
'Class:DBServer/Attribute:dbschema_list+' => '此数据库服务器上的所有数据库架构',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -577,7 +577,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:WebServer' => 'Web 服务器',
|
||||
'Class:WebServer+' => '',
|
||||
'Class:WebServer/Attribute:webapp_list' => 'Web 应用',
|
||||
'Class:WebServer/Attribute:webapp_list+' => '该web 服务器上的所有web 应用',
|
||||
'Class:WebServer/Attribute:webapp_list+' => '此web 服务器上的所有web 应用',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -658,7 +658,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:VirtualDevice/Attribute:status/Value:stock' => '库存',
|
||||
'Class:VirtualDevice/Attribute:status/Value:stock+' => '库存',
|
||||
'Class:VirtualDevice/Attribute:logicalvolumes_list' => '逻辑卷',
|
||||
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => '该设备使用的所有逻辑卷',
|
||||
'Class:VirtualDevice/Attribute:logicalvolumes_list+' => '此设备使用的所有逻辑卷',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -669,7 +669,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:VirtualHost' => '宿主机',
|
||||
'Class:VirtualHost+' => '',
|
||||
'Class:VirtualHost/Attribute:virtualmachine_list' => '虚拟机',
|
||||
'Class:VirtualHost/Attribute:virtualmachine_list+' => '该宿主机托管的所有虚拟机',
|
||||
'Class:VirtualHost/Attribute:virtualmachine_list+' => '此宿主机托管的所有虚拟机',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -759,9 +759,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:LogicalVolume/Attribute:storagesystem_name' => '名称',
|
||||
'Class:LogicalVolume/Attribute:storagesystem_name+' => '',
|
||||
'Class:LogicalVolume/Attribute:servers_list' => '服务器',
|
||||
'Class:LogicalVolume/Attribute:servers_list+' => '使用该逻辑卷的服务器',
|
||||
'Class:LogicalVolume/Attribute:servers_list+' => '使用此逻辑卷的服务器',
|
||||
'Class:LogicalVolume/Attribute:virtualdevices_list' => '虚拟设备',
|
||||
'Class:LogicalVolume/Attribute:virtualdevices_list+' => '使用该逻辑卷的所有虚拟设备',
|
||||
'Class:LogicalVolume/Attribute:virtualdevices_list+' => '使用此逻辑卷的所有虚拟设备',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -769,7 +769,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkServerToVolume' => '链接 服务器 / 逻辑卷',
|
||||
'Class:lnkServerToVolume' => '关联 服务器/逻辑卷',
|
||||
'Class:lnkServerToVolume+' => '',
|
||||
'Class:lnkServerToVolume/Attribute:volume_id' => '逻辑卷',
|
||||
'Class:lnkServerToVolume/Attribute:volume_id+' => '',
|
||||
@@ -788,7 +788,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkVirtualDeviceToVolume' => '链接 虚拟设备 / 逻辑卷',
|
||||
'Class:lnkVirtualDeviceToVolume' => '关联 虚拟设备/逻辑卷',
|
||||
'Class:lnkVirtualDeviceToVolume+' => '',
|
||||
'Class:lnkVirtualDeviceToVolume/Attribute:volume_id' => '逻辑卷',
|
||||
'Class:lnkVirtualDeviceToVolume/Attribute:volume_id+' => '',
|
||||
@@ -807,7 +807,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkSanToDatacenterDevice' => '链接 SAN / 数据中心设备',
|
||||
'Class:lnkSanToDatacenterDevice' => '关联 SAN/数据中心设备',
|
||||
'Class:lnkSanToDatacenterDevice+' => '',
|
||||
'Class:lnkSanToDatacenterDevice/Attribute:san_id' => 'SAN 交换机',
|
||||
'Class:lnkSanToDatacenterDevice/Attribute:san_id+' => '',
|
||||
@@ -877,7 +877,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Software/Attribute:version' => '版本',
|
||||
'Class:Software/Attribute:version+' => '',
|
||||
'Class:Software/Attribute:documents_list' => '文档',
|
||||
'Class:Software/Attribute:documents_list+' => '该软件的所有文档',
|
||||
'Class:Software/Attribute:documents_list+' => '此软件的所有文档',
|
||||
'Class:Software/Attribute:type' => '类型',
|
||||
'Class:Software/Attribute:type+' => '',
|
||||
'Class:Software/Attribute:type/Value:DBServer' => '数据库服务器',
|
||||
@@ -891,11 +891,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Software/Attribute:type/Value:WebServer' => 'Web 服务器',
|
||||
'Class:Software/Attribute:type/Value:WebServer+' => 'Web 服务器',
|
||||
'Class:Software/Attribute:softwareinstance_list' => '软件实例',
|
||||
'Class:Software/Attribute:softwareinstance_list+' => '该软件的所有实例',
|
||||
'Class:Software/Attribute:softwareinstance_list+' => '此软件的所有实例',
|
||||
'Class:Software/Attribute:softwarepatch_list' => '软件补丁',
|
||||
'Class:Software/Attribute:softwarepatch_list+' => '该软件的所有补丁',
|
||||
'Class:Software/Attribute:softwarepatch_list+' => '此软件的所有补丁',
|
||||
'Class:Software/Attribute:softwarelicence_list' => '软件许可证',
|
||||
'Class:Software/Attribute:softwarelicence_list+' => '该软件的所有许可证',
|
||||
'Class:Software/Attribute:softwarelicence_list+' => '此软件的所有许可证',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -908,7 +908,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Patch/Attribute:name' => '名称',
|
||||
'Class:Patch/Attribute:name+' => '',
|
||||
'Class:Patch/Attribute:documents_list' => '文档',
|
||||
'Class:Patch/Attribute:documents_list+' => '该补丁关联的所有文档',
|
||||
'Class:Patch/Attribute:documents_list+' => '此补丁关联的所有文档',
|
||||
'Class:Patch/Attribute:description' => '描述',
|
||||
'Class:Patch/Attribute:description+' => '',
|
||||
'Class:Patch/Attribute:finalclass' => '补丁子类别',
|
||||
@@ -923,7 +923,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:OSPatch' => '操作系统补丁',
|
||||
'Class:OSPatch+' => '',
|
||||
'Class:OSPatch/Attribute:functionalcis_list' => '设备',
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => '已安装该补丁的所有系统',
|
||||
'Class:OSPatch/Attribute:functionalcis_list+' => '已安装此补丁的所有系统',
|
||||
'Class:OSPatch/Attribute:osversion_id' => '操作系统版本',
|
||||
'Class:OSPatch/Attribute:osversion_id+' => '',
|
||||
'Class:OSPatch/Attribute:osversion_name' => '名称',
|
||||
@@ -942,7 +942,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:SoftwarePatch/Attribute:software_name' => '名称',
|
||||
'Class:SoftwarePatch/Attribute:software_name+' => '',
|
||||
'Class:SoftwarePatch/Attribute:softwareinstances_list' => '软件实例',
|
||||
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => '已安装该软件补丁的所有系统',
|
||||
'Class:SoftwarePatch/Attribute:softwareinstances_list+' => '已安装此软件补丁的所有系统',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -955,7 +955,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Licence/Attribute:name' => '名称',
|
||||
'Class:Licence/Attribute:name+' => '',
|
||||
'Class:Licence/Attribute:documents_list' => '文档',
|
||||
'Class:Licence/Attribute:documents_list+' => '该许可证关联的所有文档',
|
||||
'Class:Licence/Attribute:documents_list+' => '此许可证关联的所有文档',
|
||||
'Class:Licence/Attribute:org_id' => '组织',
|
||||
'Class:Licence/Attribute:org_id+' => '',
|
||||
'Class:Licence/Attribute:organization_name' => '组织名称',
|
||||
@@ -992,9 +992,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:OSLicence/Attribute:osversion_name' => '名称',
|
||||
'Class:OSLicence/Attribute:osversion_name+' => '',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list' => '虚拟机',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list+' => '使用该许可证的所有虚拟机',
|
||||
'Class:OSLicence/Attribute:virtualmachines_list+' => '使用此许可证的所有虚拟机',
|
||||
'Class:OSLicence/Attribute:servers_list' => '服务器',
|
||||
'Class:OSLicence/Attribute:servers_list+' => '使用该许可证的所有服务器',
|
||||
'Class:OSLicence/Attribute:servers_list+' => '使用此许可证的所有服务器',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1009,7 +1009,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:SoftwareLicence/Attribute:software_name' => '名称',
|
||||
'Class:SoftwareLicence/Attribute:software_name+' => '',
|
||||
'Class:SoftwareLicence/Attribute:softwareinstance_list' => '软件实例',
|
||||
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => '使用该许可证的所有系统',
|
||||
'Class:SoftwareLicence/Attribute:softwareinstance_list+' => '使用此许可证的所有系统',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1017,7 +1017,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkDocumentToLicence' => '链接 文档 / 许可证',
|
||||
'Class:lnkDocumentToLicence' => '关联 文档/许可证',
|
||||
'Class:lnkDocumentToLicence+' => '',
|
||||
'Class:lnkDocumentToLicence/Attribute:licence_id' => '许可证',
|
||||
'Class:lnkDocumentToLicence/Attribute:licence_id+' => '',
|
||||
@@ -1059,9 +1059,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Brand' => '品牌',
|
||||
'Class:Brand+' => '',
|
||||
'Class:Brand/Attribute:physicaldevices_list' => '物理设备',
|
||||
'Class:Brand/Attribute:physicaldevices_list+' => '该品牌的所有物理设备',
|
||||
'Class:Brand/Attribute:physicaldevices_list+' => '此品牌的所有物理设备',
|
||||
'Class:Brand/UniquenessRule:name+' => '名称必须唯一',
|
||||
'Class:Brand/UniquenessRule:name' => '该品牌已存在',
|
||||
'Class:Brand/UniquenessRule:name' => '此品牌已存在',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1083,8 +1083,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Model/Attribute:type/Value:DiskArray+' => '磁盘阵列',
|
||||
'Class:Model/Attribute:type/Value:Enclosure' => '机位',
|
||||
'Class:Model/Attribute:type/Value:Enclosure+' => '机位',
|
||||
'Class:Model/Attribute:type/Value:IPPhone' => 'IP 电话',
|
||||
'Class:Model/Attribute:type/Value:IPPhone+' => 'IP 电话',
|
||||
'Class:Model/Attribute:type/Value:IPPhone' => 'IP电话',
|
||||
'Class:Model/Attribute:type/Value:IPPhone+' => 'IP电话',
|
||||
'Class:Model/Attribute:type/Value:MobilePhone' => '移动电话',
|
||||
'Class:Model/Attribute:type/Value:MobilePhone+' => '移动电话',
|
||||
'Class:Model/Attribute:type/Value:NAS' => 'NAS',
|
||||
@@ -1101,10 +1101,10 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Model/Attribute:type/Value:Printer+' => '打印机',
|
||||
'Class:Model/Attribute:type/Value:Rack' => '机柜',
|
||||
'Class:Model/Attribute:type/Value:Rack+' => '机柜',
|
||||
'Class:Model/Attribute:type/Value:SANSwitch' => 'SAN 交换机',
|
||||
'Class:Model/Attribute:type/Value:SANSwitch+' => 'SAN 交换机',
|
||||
'Class:Model/Attribute:type/Value:SANSwitch' => 'SAN交换机',
|
||||
'Class:Model/Attribute:type/Value:SANSwitch+' => 'SAN交换机',
|
||||
'Class:Model/Attribute:type/Value:Server' => '服务器',
|
||||
'Class:Model/Attribute:type/Value:Server+' => 'Server',
|
||||
'Class:Model/Attribute:type/Value:Server+' => '服务器',
|
||||
'Class:Model/Attribute:type/Value:StorageSystem' => '存储系统',
|
||||
'Class:Model/Attribute:type/Value:StorageSystem+' => '存储系统',
|
||||
'Class:Model/Attribute:type/Value:Tablet' => '平板',
|
||||
@@ -1114,9 +1114,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Model/Attribute:type/Value:Phone' => '电话',
|
||||
'Class:Model/Attribute:type/Value:Phone+' => '电话',
|
||||
'Class:Model/Attribute:physicaldevices_list' => '物理设备',
|
||||
'Class:Model/Attribute:physicaldevices_list+' => '该型号的所有物理设备',
|
||||
'Class:Model/Attribute:physicaldevices_list+' => '此型号的所有物理设备',
|
||||
'Class:Model/UniquenessRule:name_brand+' => '名称必须唯一',
|
||||
'Class:Model/UniquenessRule:name_brand' => '该型号已存在',
|
||||
'Class:Model/UniquenessRule:name_brand' => '此型号已存在',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1127,7 +1127,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:NetworkDeviceType' => '网络设备类型',
|
||||
'Class:NetworkDeviceType+' => '',
|
||||
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => '网络设备',
|
||||
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => '该类型的所有网络设备',
|
||||
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => '此类型的所有网络设备',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -1135,7 +1135,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:IOSVersion' => 'IOS 版本',
|
||||
'Class:IOSVersion' => 'IOS版本',
|
||||
'Class:IOSVersion+' => '',
|
||||
'Class:IOSVersion/Attribute:brand_id' => '品牌',
|
||||
'Class:IOSVersion/Attribute:brand_id+' => '',
|
||||
@@ -1148,7 +1148,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkDocumentToPatch' => '链接 文档 / 补丁',
|
||||
'Class:lnkDocumentToPatch' => '关联 文档/补丁',
|
||||
'Class:lnkDocumentToPatch+' => '',
|
||||
'Class:lnkDocumentToPatch/Attribute:patch_id' => '补丁',
|
||||
'Class:lnkDocumentToPatch/Attribute:patch_id+' => '',
|
||||
@@ -1165,7 +1165,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkSoftwareInstanceToSoftwarePatch' => '链接 软件实例 / 软件补丁',
|
||||
'Class:lnkSoftwareInstanceToSoftwarePatch' => ' 关联 软件实例/软件补丁',
|
||||
'Class:lnkSoftwareInstanceToSoftwarePatch+' => '',
|
||||
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id' => '软件补丁',
|
||||
'Class:lnkSoftwareInstanceToSoftwarePatch/Attribute:softwarepatch_id+' => '',
|
||||
@@ -1182,7 +1182,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkFunctionalCIToOSPatch' => '链接 功能项 / 操作系统补丁',
|
||||
'Class:lnkFunctionalCIToOSPatch' => '关联 功能项/操作系统补丁',
|
||||
'Class:lnkFunctionalCIToOSPatch+' => '',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id' => '操作系统补丁',
|
||||
'Class:lnkFunctionalCIToOSPatch/Attribute:ospatch_id+' => '',
|
||||
@@ -1199,7 +1199,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkDocumentToSoftware' => '链接 文档 / 软件',
|
||||
'Class:lnkDocumentToSoftware' => '关联 文档/软件',
|
||||
'Class:lnkDocumentToSoftware+' => '',
|
||||
'Class:lnkDocumentToSoftware/Attribute:software_id' => '软件',
|
||||
'Class:lnkDocumentToSoftware/Attribute:software_id+' => '',
|
||||
@@ -1241,7 +1241,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:VLAN' => 'VLAN',
|
||||
'Class:VLAN+' => '',
|
||||
'Class:VLAN/Attribute:vlan_tag' => 'VLAN 标记',
|
||||
'Class:VLAN/Attribute:vlan_tag' => 'VLAN标记',
|
||||
'Class:VLAN/Attribute:vlan_tag+' => '',
|
||||
'Class:VLAN/Attribute:description' => '描述',
|
||||
'Class:VLAN/Attribute:description+' => '',
|
||||
@@ -1260,7 +1260,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkSubnetToVLAN' => '链接 子网 / VLAN',
|
||||
'Class:lnkSubnetToVLAN' => '关联 子网/VLAN',
|
||||
'Class:lnkSubnetToVLAN+' => '',
|
||||
'Class:lnkSubnetToVLAN/Attribute:subnet_id' => '子网',
|
||||
'Class:lnkSubnetToVLAN/Attribute:subnet_id+' => '',
|
||||
@@ -1292,13 +1292,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:IPInterface' => 'IP Interface',
|
||||
'Class:IPInterface' => 'IP接口',
|
||||
'Class:IPInterface+' => '',
|
||||
'Class:IPInterface/Attribute:ipaddress' => 'IP 地址',
|
||||
'Class:IPInterface/Attribute:ipaddress' => 'IP地址',
|
||||
'Class:IPInterface/Attribute:ipaddress+' => '',
|
||||
|
||||
|
||||
'Class:IPInterface/Attribute:macaddress' => 'MAC 地址',
|
||||
'Class:IPInterface/Attribute:macaddress' => 'MAC地址',
|
||||
'Class:IPInterface/Attribute:macaddress+' => '',
|
||||
'Class:IPInterface/Attribute:comment' => '注释',
|
||||
'Class:IPInterface/Attribute:coment+' => '',
|
||||
@@ -1330,7 +1330,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkPhysicalInterfaceToVLAN' => '链接 物理网卡 / VLAN',
|
||||
'Class:lnkPhysicalInterfaceToVLAN' => '关联 物理网卡/VLAN',
|
||||
'Class:lnkPhysicalInterfaceToVLAN+' => '',
|
||||
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id' => '物理网卡',
|
||||
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_id+' => '',
|
||||
@@ -1342,7 +1342,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkPhysicalInterfaceToVLAN/Attribute:physicalinterface_device_name+' => '',
|
||||
'Class:lnkPhysicalInterfaceToVLAN/Attribute:vlan_id' => 'VLAN',
|
||||
'Class:lnkPhysicalInterfaceToVLAN/Attribute:vlan_id+' => '',
|
||||
'Class:lnkPhysicalInterfaceToVLAN/Attribute:vlan_tag' => 'VLAN 标记',
|
||||
'Class:lnkPhysicalInterfaceToVLAN/Attribute:vlan_tag' => 'VLAN标记',
|
||||
'Class:lnkPhysicalInterfaceToVLAN/Attribute:vlan_tag+' => '',
|
||||
));
|
||||
|
||||
@@ -1384,7 +1384,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkConnectableCIToNetworkDevice' => '链接 可连接项 / 网络设备',
|
||||
'Class:lnkConnectableCIToNetworkDevice' => '关联 可连接项/网络设备',
|
||||
'Class:lnkConnectableCIToNetworkDevice+' => '',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id' => '网络设备',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:networkdevice_id+' => '',
|
||||
@@ -1411,7 +1411,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkApplicationSolutionToFunctionalCI' => '链接 应用方案 / 功能项',
|
||||
'Class:lnkApplicationSolutionToFunctionalCI' => '关联 应用方案/功能项',
|
||||
'Class:lnkApplicationSolutionToFunctionalCI+' => '',
|
||||
'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id' => '应用方案',
|
||||
'Class:lnkApplicationSolutionToFunctionalCI/Attribute:applicationsolution_id+' => '',
|
||||
@@ -1428,7 +1428,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkApplicationSolutionToBusinessProcess' => '链接 应用方案 / 业务流程',
|
||||
'Class:lnkApplicationSolutionToBusinessProcess' => '关联 应用方案/业务流程',
|
||||
'Class:lnkApplicationSolutionToBusinessProcess+' => '',
|
||||
'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id' => '业务流程',
|
||||
'Class:lnkApplicationSolutionToBusinessProcess/Attribute:businessprocess_id+' => '',
|
||||
@@ -1470,8 +1470,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Group/Attribute:parent_id+' => '',
|
||||
'Class:Group/Attribute:parent_name' => '名称',
|
||||
'Class:Group/Attribute:parent_name+' => '',
|
||||
'Class:Group/Attribute:ci_list' => '链接的配置项',
|
||||
'Class:Group/Attribute:ci_list+' => '该组关联的所有配置项',
|
||||
'Class:Group/Attribute:ci_list' => '关联的配置项',
|
||||
'Class:Group/Attribute:ci_list+' => '此组关联的所有配置项',
|
||||
'Class:Group/Attribute:parent_id_friendlyname' => '上级配置组',
|
||||
'Class:Group/Attribute:parent_id_friendlyname+' => '',
|
||||
));
|
||||
@@ -1481,7 +1481,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkGroupToCI' => '链接 配置组 / 配置项',
|
||||
'Class:lnkGroupToCI' => '关联 配置组/配置项',
|
||||
'Class:lnkGroupToCI+' => '',
|
||||
'Class:lnkGroupToCI/Attribute:group_id' => '组',
|
||||
'Class:lnkGroupToCI/Attribute:group_id+' => '',
|
||||
@@ -1505,8 +1505,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Server:power' => '电力供应',
|
||||
'Class:Subnet/Tab:IPUsage' => 'IP 使用率',
|
||||
'Class:Subnet/Tab:IPUsage-explain' => '网卡IP范围: <em>%1$s</em> 到 <em>%2$s</em>',
|
||||
'Class:Subnet/Tab:FreeIPs' => '空闲 IP',
|
||||
'Class:Subnet/Tab:FreeIPs-count' => '空闲 IP: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs' => '空闲IP',
|
||||
'Class:Subnet/Tab:FreeIPs-count' => '空闲IP: %1$s',
|
||||
'Class:Subnet/Tab:FreeIPs-explain' => '以下是抽取的10个空闲IP',
|
||||
'Class:Document:PreviewTab' => '预览',
|
||||
));
|
||||
@@ -1517,7 +1517,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkDocumentToFunctionalCI' => '链接 文档 / 功能项',
|
||||
'Class:lnkDocumentToFunctionalCI' => '关联 文档/功能项',
|
||||
'Class:lnkDocumentToFunctionalCI+' => '',
|
||||
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id' => '功能项',
|
||||
'Class:lnkDocumentToFunctionalCI/Attribute:functionalci_id+' => '',
|
||||
@@ -1574,7 +1574,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Menu:ConfigManagement:Misc' => '杂项',
|
||||
'Menu:Group' => '配置组',
|
||||
'Menu:Group+' => '配置组',
|
||||
'Menu:OSVersion' => 'OS 版本',
|
||||
'Menu:OSVersion' => 'OS版本',
|
||||
'Menu:OSVersion+' => '',
|
||||
'Menu:Software' => '软件清单',
|
||||
'Menu:Software+' => '软件清单',
|
||||
|
||||
@@ -25,7 +25,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'itop-core-update:UI:SelectUpdateFile' => '应用升级',
|
||||
'itop-core-update:UI:ConfirmUpdate' => ' 升级',
|
||||
'itop-core-update:UI:UpdateCoreFiles' => '应用升级',
|
||||
'iTopUpdate:UI:MaintenanceModeActive' => 'The application is currently under maintenance, no user can access the application. You have to run a setup or restore the application archive to return in normal mode.~~',
|
||||
'iTopUpdate:UI:MaintenanceModeActive' => '此应用当前维护中,不允许任何用户访问.必须运行安装或恢复归档来使其处于正常模式.',
|
||||
'itop-core-update:UI:UpdateDone' => '应用升级',
|
||||
|
||||
'itop-core-update/Operation:SelectUpdateFile/Title' => '应用升级',
|
||||
@@ -94,15 +94,15 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'iTopUpdate:Error:MissingFunction' => '无法开始升级, 功能缺失',
|
||||
'iTopUpdate:Error:MissingFile' => '缺少文件: %1$s',
|
||||
'iTopUpdate:Error:CorruptedFile' => '文件 %1$s 已损坏',
|
||||
'iTopUpdate:Error:BadFileFormat' => '上传的不是zip 文件',
|
||||
'iTopUpdate:Error:BadFileFormat' => '上传的不是zip格式的文件',
|
||||
'iTopUpdate:Error:BadFileContent' => '升级文件不是程序升级包',
|
||||
'iTopUpdate:Error:BadItopProduct' => '升级文件与您的系统不兼容',
|
||||
'iTopUpdate:Error:Copy' => '错误, 无法复制 \'%1$s\' 到 \'%2$s\'',
|
||||
'iTopUpdate:Error:FileNotFound' => '文件找不到',
|
||||
'iTopUpdate:Error:NoFile' => '没有提供文件',
|
||||
'iTopUpdate:Error:InvalidToken' => '无效的 token',
|
||||
'iTopUpdate:Error:InvalidToken' => '无效的token',
|
||||
'iTopUpdate:Error:UpdateFailed' => '升级失败',
|
||||
'iTopUpdate:Error:FileUploadMaxSizeTooSmall' => '上传上限太小. 请调整 PHP 配置.',
|
||||
'iTopUpdate:Error:FileUploadMaxSizeTooSmall' => '上传上限太小. 请调整PHP配置.',
|
||||
|
||||
'iTopUpdate:UI:RestoreArchive' => '您可以从归档文件 \'%1$s\' 还原应用程序',
|
||||
'iTopUpdate:UI:RestoreBackup' => '您可以从 \'%1$s\' 还原数据库',
|
||||
|
||||
@@ -62,7 +62,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:FAQ/Attribute:error_code+' => '',
|
||||
'Class:FAQ/Attribute:key_words' => '关键字',
|
||||
'Class:FAQ/Attribute:key_words+' => '',
|
||||
'Class:FAQ/Attribute:domains' => '领域~~',
|
||||
'Class:FAQ/Attribute:domains' => '范围',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -70,19 +70,19 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:FAQCategory' => 'FAQ 类别',
|
||||
'Class:FAQCategory+' => 'FAQ 类别',
|
||||
'Class:FAQCategory' => 'FAQ类别',
|
||||
'Class:FAQCategory+' => 'FAQ类别',
|
||||
'Class:FAQCategory/Attribute:name' => '名称',
|
||||
'Class:FAQCategory/Attribute:name+' => '',
|
||||
'Class:FAQCategory/Attribute:faq_list' => 'FAQ',
|
||||
'Class:FAQCategory/Attribute:faq_list+' => '该类别FAQ 相关的所有常见问题',
|
||||
'Class:FAQCategory/Attribute:faq_list+' => '此类别FAQ 相关的所有常见问题',
|
||||
));
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Menu:ProblemManagement' => '问题管理',
|
||||
'Menu:ProblemManagement+' => '问题管理',
|
||||
'Menu:Problem:Shortcuts' => '快捷方式',
|
||||
'Menu:FAQCategory' => 'FAQ 类别',
|
||||
'Menu:FAQCategory+' => '所有FAQ 类别',
|
||||
'Menu:FAQCategory+' => '所有FAQ类别',
|
||||
'Menu:FAQ' => 'FAQ',
|
||||
'Menu:FAQ+' => '所有FAQ',
|
||||
'Brick:Portal:FAQ:Menu' => 'FAQ',
|
||||
|
||||
@@ -24,7 +24,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// Errors
|
||||
'FilesInformation:Error:MissingFile' => '文件丢失: %1$s~~',
|
||||
'FilesInformation:Error:CorruptedFile' => '文件 %1$s 已损坏',
|
||||
'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
|
||||
'FilesInformation:Error:ListCorruptedFile' => '已损坏的文件: %1$s',
|
||||
'FilesInformation:Error:CantWriteToFile' => '文件 %1$s 无法写入',
|
||||
));
|
||||
|
||||
|
||||
@@ -15,12 +15,13 @@
|
||||
<module_parameters>
|
||||
<parameters id="itop-hub-connector" _delta="define">
|
||||
<url>https://www.itophub.io</url>
|
||||
<route_landing>/my-instances/landing-from-remote</route_landing>
|
||||
<route_landing_stateless>/stateless-remote-itop/landing-from-remote-stateless</route_landing_stateless>
|
||||
<route_fetch_unread_messages>/api/messages</route_fetch_unread_messages>
|
||||
<route_mark_all_messages_as_read>/api/messages/mark-all-as-read</route_mark_all_messages_as_read>
|
||||
<route_view_all_messages>/messages</route_view_all_messages>
|
||||
<route_landing>/my-instances/landing-from-remote</route_landing>
|
||||
<route_landing_stateless>/stateless-remote-itop/landing-from-remote-stateless</route_landing_stateless>
|
||||
<route_fetch_unread_messages>/api/messages</route_fetch_unread_messages>
|
||||
<route_mark_all_messages_as_read>/api/messages/mark-all-as-read</route_mark_all_messages_as_read>
|
||||
<route_view_all_messages>/messages</route_view_all_messages>
|
||||
<setup_url>../pages/exec.php?exec_module=itop-hub-connector&exec_page=launch.php&target=inform_after_setup</setup_url>
|
||||
<rgpd_url>https://www.itophub.io/page/data-privacy</rgpd_url>
|
||||
</parameters>
|
||||
</module_parameters>
|
||||
</itop_design>
|
||||
|
||||
@@ -23,46 +23,46 @@
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
// Dictionary entries go here
|
||||
'Menu:iTopHub' => 'iTop Hub',
|
||||
'Menu:iTopHub:Register' => '进入 iTop Hub ',
|
||||
'Menu:iTopHub:Register+' => '进入 iTop Hub 更新您的组件',
|
||||
'Menu:iTopHub:Register:Description' => '<p>进入 iTop Hub 社区平台!</br>寻找您想要的内容和信息, 管理本机扩展或安装新的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到 iTop Hub 上.</p>',
|
||||
'Menu:iTopHub:Register' => '进入iTop Hub',
|
||||
'Menu:iTopHub:Register+' => '进入iTop Hub更新您的组件',
|
||||
'Menu:iTopHub:Register:Description' => '<p>进入iTop Hub社区平台!</br>寻找您想要的内容和信息, 管理本机扩展或安装新的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到 iTop Hub 上.</p>',
|
||||
'Menu:iTopHub:MyExtensions' => '已安装的扩展',
|
||||
'Menu:iTopHub:MyExtensions+' => '查看本机已安装的扩展',
|
||||
'Menu:iTopHub:BrowseExtensions' => '从 iTop Hub 获取扩展',
|
||||
'Menu:iTopHub:BrowseExtensions+' => '去 iTop Hub 浏览更多的扩展',
|
||||
'Menu:iTopHub:BrowseExtensions:Description' => '<p>进入 iTop Hub 商店, 一站式查找各种iTop 扩展的地方 !</br>寻找符合您要求的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到 iTop Hub 上.</p>',
|
||||
'Menu:iTopHub:BrowseExtensions' => '从iTop Hub获取扩展',
|
||||
'Menu:iTopHub:BrowseExtensions+' => '去iTop Hub浏览更多的扩展',
|
||||
'Menu:iTopHub:BrowseExtensions:Description' => '<p>进入iTop Hub商店, 一站式查找各种iTop扩展的地方 !</br>寻找符合您要求的扩展.</br><br/>通过这个页面连接到iTop Hub, 本机的信息也会被推送到 iTop Hub 上.</p>',
|
||||
'iTopHub:GoBtn' => '进入iTop Hub',
|
||||
'iTopHub:CloseBtn' => '关闭',
|
||||
'iTopHub:GoBtn:Tooltip' => '跳到 www.itophub.io',
|
||||
'iTopHub:OpenInNewWindow' => '从新窗口打开 iTop Hub',
|
||||
'iTopHub:AutoSubmit' => '不再询问. 下次自动进入 iTop Hub .',
|
||||
'iTopHub:OpenInNewWindow' => '从新窗口打开iTop Hub',
|
||||
'iTopHub:AutoSubmit' => '不再询问. 下次自动进入iTop Hub .',
|
||||
'UI:About:RemoteExtensionSource' => 'iTop Hub',
|
||||
'iTopHub:Explanation' => '点击这个按钮您将被引导至 iTop Hub.',
|
||||
'iTopHub:Explanation' => '点击这个按钮您将被引导至iTop Hub.',
|
||||
|
||||
'iTopHub:BackupFreeDiskSpaceIn' => '%1$s free disk space in %2$s.',
|
||||
'iTopHub:FailedToCheckFreeDiskSpace' => '检查空闲的磁盘空间失败.',
|
||||
'iTopHub:BackupFreeDiskSpaceIn' => '%1$s 可用磁盘空间位于 %2$s.',
|
||||
'iTopHub:FailedToCheckFreeDiskSpace' => '检查可用磁盘空间失败.',
|
||||
'iTopHub:BackupOk' => '备份成功.',
|
||||
'iTopHub:BackupFailed' => '备份失败!',
|
||||
'iTopHub:Landing:Status' => '安装状态',
|
||||
'iTopHub:Landing:Install' => '扩展安装进行中...',
|
||||
'iTopHub:CompiledOK' => '编译成功.',
|
||||
'iTopHub:ConfigurationSafelyReverted' => '安装时发生错误!<br/>iTop 配置将不会改变.',
|
||||
'iTopHub:ConfigurationSafelyReverted' => '安装时发生错误!<br/>iTop配置将不会改变.',
|
||||
'iTopHub:FailAuthent' => '认证失败.',
|
||||
|
||||
'iTopHub:InstalledExtensions' => '本机已安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Manual' => '手动安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Manual+' => '下列已安装的扩展是手动将文件放置到 %1$s 目录的:',
|
||||
'iTopHub:ExtensionCategory:Remote' => '从 iTop Hub 安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Remote+' => '下列已安装的扩展是来自 iTop Hub:',
|
||||
'iTopHub:ExtensionCategory:Remote' => '从iTop Hub 安装的扩展',
|
||||
'iTopHub:ExtensionCategory:Remote+' => '下列已安装的扩展是来自iTop Hub:',
|
||||
'iTopHub:NoExtensionInThisCategory' => '尚未安装扩展',
|
||||
'iTopHub:NoExtensionInThisCategory+' => '浏览 iTop Hub ,去寻找符合您喜欢的扩展吧.',
|
||||
'iTopHub:NoExtensionInThisCategory+' => '浏览iTop Hub,去寻找符合您喜欢的扩展吧.',
|
||||
'iTopHub:ExtensionNotInstalled' => '未安装',
|
||||
'iTopHub:GetMoreExtensions' => '从 iTop Hub 获取扩展...',
|
||||
'iTopHub:GetMoreExtensions' => '从iTop Hub获取扩展...',
|
||||
|
||||
'iTopHub:LandingWelcome' => '恭喜! 下列来自 iTop Hub 的扩展已被下载并安装到本机.',
|
||||
'iTopHub:LandingWelcome' => '恭喜! 下列来自iTop Hub的扩展已被下载并安装到本机.',
|
||||
'iTopHub:GoBackToITopBtn' => '返回'.ITOP_APPLICATION_SHORT,
|
||||
'iTopHub:Uncompressing' => '扩展解压中...',
|
||||
'iTopHub:InstallationWelcome' => '安装来自 iTop Hub 的扩展',
|
||||
'iTopHub:InstallationWelcome' => '安装来自iTop Hub的扩展',
|
||||
'iTopHub:DBBackupLabel' => '本机备份',
|
||||
'iTopHub:DBBackupSentence' => '在升级之前,备份数据库和 '.ITOP_APPLICATION_SHORT.' 配置文件',
|
||||
'iTopHub:DeployBtn' => '安装 !',
|
||||
@@ -75,7 +75,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'iTopHub:InstallationProgress:DatabaseBackup' => ITOP_APPLICATION_SHORT.' 本机备份...',
|
||||
'iTopHub:InstallationProgress:ExtensionsInstallation' => '安装扩展',
|
||||
'iTopHub:InstallationEffect:MissingDependencies' => '扩展无法安装,因为未知的依赖.',
|
||||
'iTopHub:InstallationEffect:MissingDependencies_Details' => '该扩展依赖模块: %1$s',
|
||||
'iTopHub:InstallationEffect:MissingDependencies_Details' => '此扩展依赖模块: %1$s',
|
||||
'iTopHub:InstallationProgress:InstallationSuccessful' => '安装成功!',
|
||||
|
||||
'iTopHub:InstallationStatus:Installed_Version' => '%1$s 版本: %2$s.',
|
||||
|
||||
@@ -116,8 +116,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Incident/Attribute:origin/Value:monitoring+' => '监控',
|
||||
'Class:Incident/Attribute:origin/Value:phone' => '电话',
|
||||
'Class:Incident/Attribute:origin/Value:phone+' => '电话',
|
||||
'Class:Incident/Attribute:origin/Value:portal' => 'portal',
|
||||
'Class:Incident/Attribute:origin/Value:portal+' => 'portal',
|
||||
'Class:Incident/Attribute:origin/Value:portal' => '门户',
|
||||
'Class:Incident/Attribute:origin/Value:portal+' => '门户',
|
||||
'Class:Incident/Attribute:service_id' => '服务',
|
||||
'Class:Incident/Attribute:service_id+' => '',
|
||||
'Class:Incident/Attribute:service_name' => '服务名称',
|
||||
@@ -164,8 +164,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Incident/Attribute:resolution_code+' => '',
|
||||
'Class:Incident/Attribute:resolution_code/Value:assistance' => '外部支持',
|
||||
'Class:Incident/Attribute:resolution_code/Value:assistance+' => '外部支持',
|
||||
'Class:Incident/Attribute:resolution_code/Value:bug fixed' => 'bug 修复',
|
||||
'Class:Incident/Attribute:resolution_code/Value:bug fixed+' => 'bug 修复',
|
||||
'Class:Incident/Attribute:resolution_code/Value:bug fixed' => '缺陷修复',
|
||||
'Class:Incident/Attribute:resolution_code/Value:bug fixed+' => '缺陷修复',
|
||||
'Class:Incident/Attribute:resolution_code/Value:hardware repair' => '硬件维修',
|
||||
'Class:Incident/Attribute:resolution_code/Value:hardware repair+' => '硬件维修',
|
||||
'Class:Incident/Attribute:resolution_code/Value:other' => '其它',
|
||||
@@ -188,14 +188,14 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Incident/Attribute:parent_change_id+' => '',
|
||||
'Class:Incident/Attribute:parent_change_ref' => '变更编号',
|
||||
'Class:Incident/Attribute:parent_change_ref+' => '',
|
||||
'Class:Incident/Attribute:parent_problem_id' => 'Parent problem id~~',
|
||||
'Class:Incident/Attribute:parent_problem_id' => '父级问题',
|
||||
'Class:Incident/Attribute:parent_problem_id+' => '~~',
|
||||
'Class:Incident/Attribute:parent_problem_ref' => 'Parent problem ref~~',
|
||||
'Class:Incident/Attribute:parent_problem_ref' => '父级问题编号',
|
||||
'Class:Incident/Attribute:parent_problem_ref+' => '~~',
|
||||
'Class:Incident/Attribute:related_request_list' => '相关需求',
|
||||
'Class:Incident/Attribute:related_request_list+' => '该事件相关的所有需求',
|
||||
'Class:Incident/Attribute:related_request_list+' => '此事件相关的所有需求',
|
||||
'Class:Incident/Attribute:child_incidents_list' => '衍生事件',
|
||||
'Class:Incident/Attribute:child_incidents_list+' => '该事件相关的所有子事件',
|
||||
'Class:Incident/Attribute:child_incidents_list+' => '此事件相关的所有子事件',
|
||||
'Class:Incident/Attribute:public_log' => '评论',
|
||||
'Class:Incident/Attribute:public_log+' => '',
|
||||
'Class:Incident/Attribute:user_satisfaction' => '用户满意度',
|
||||
@@ -210,7 +210,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:4+' => '非常不满意',
|
||||
'Class:Incident/Attribute:user_comment' => '用户评论',
|
||||
'Class:Incident/Attribute:user_comment+' => '',
|
||||
'Class:Incident/Attribute:parent_incident_id_friendlyname' => '好记的父级事件ID名称',
|
||||
'Class:Incident/Attribute:parent_incident_id_friendlyname' => '父级事件名称',
|
||||
'Class:Incident/Attribute:parent_incident_id_friendlyname+' => '',
|
||||
'Class:Incident/Stimulus:ev_assign' => '分配',
|
||||
'Class:Incident/Stimulus:ev_assign+' => '',
|
||||
|
||||
@@ -85,9 +85,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:KnownError/Attribute:version' => '版本',
|
||||
'Class:KnownError/Attribute:version+' => '',
|
||||
'Class:KnownError/Attribute:ci_list' => '配置项',
|
||||
'Class:KnownError/Attribute:ci_list+' => '该已知错误相关的所有配置项',
|
||||
'Class:KnownError/Attribute:ci_list+' => '此已知错误相关的所有配置项',
|
||||
'Class:KnownError/Attribute:document_list' => '文档',
|
||||
'Class:KnownError/Attribute:document_list+' => '该已知错误相关的所有文档',
|
||||
'Class:KnownError/Attribute:document_list+' => '此已知错误相关的所有文档',
|
||||
));
|
||||
|
||||
//
|
||||
|
||||
2
datamodels/2.x/itop-oauth-client/README.md
Normal file
2
datamodels/2.x/itop-oauth-client/README.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# Extension OAuth 2.0 client
|
||||
|
||||
24
datamodels/2.x/itop-oauth-client/ajax.php
Normal file
24
datamodels/2.x/itop-oauth-client/ajax.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2022 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\OAuthClient;
|
||||
|
||||
use Combodo\iTop\OAuthClient\Controller\AjaxOauthClientController;
|
||||
|
||||
require_once(APPROOT.'application/startup.inc.php');
|
||||
|
||||
if (version_compare(ITOP_DESIGN_LATEST_VERSION , '3.0') >= 0) {
|
||||
$sTemplates = MODULESROOT.'itop-oauth-client/templates';
|
||||
} else {
|
||||
$sTemplates = MODULESROOT.'itop-oauth-client/templates/legacy';
|
||||
}
|
||||
|
||||
$oUpdateController = new AjaxOauthClientController($sTemplates, 'itop-oauth-client');
|
||||
$oUpdateController->AllowOnlyAdmin();
|
||||
$oUpdateController->SetDefaultOperation('CreateMailbox');
|
||||
$oUpdateController->HandleOperation();
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><linearGradient id="k8yl7~hDat~FaoWq8WjN6a" x1="-1254.397" x2="-1261.911" y1="877.268" y2="899.466" gradientTransform="translate(1981.75 -1362.063) scale(1.5625)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#114a8b"/><stop offset="1" stop-color="#0669bc"/></linearGradient><path fill="url(#k8yl7~hDat~FaoWq8WjN6a)" d="M17.634,6h11.305L17.203,40.773c-0.247,0.733-0.934,1.226-1.708,1.226H6.697 c-0.994,0-1.8-0.806-1.8-1.8c0-0.196,0.032-0.39,0.094-0.576L15.926,7.227C16.173,6.494,16.86,6,17.634,6L17.634,6z"/><path fill="#0078d4" d="M34.062,29.324H16.135c-0.458-0.001-0.83,0.371-0.831,0.829c0,0.231,0.095,0.451,0.264,0.608 l11.52,10.752C27.423,41.826,27.865,42,28.324,42h10.151L34.062,29.324z"/><linearGradient id="k8yl7~hDat~FaoWq8WjN6b" x1="-1252.05" x2="-1253.788" y1="887.612" y2="888.2" gradientTransform="translate(1981.75 -1362.063) scale(1.5625)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-opacity=".3"/><stop offset=".071" stop-opacity=".2"/><stop offset=".321" stop-opacity=".1"/><stop offset=".623" stop-opacity=".05"/><stop offset="1" stop-opacity="0"/></linearGradient><path fill="url(#k8yl7~hDat~FaoWq8WjN6b)" d="M17.634,6c-0.783-0.003-1.476,0.504-1.712,1.25L5.005,39.595 c-0.335,0.934,0.151,1.964,1.085,2.299C6.286,41.964,6.493,42,6.702,42h9.026c0.684-0.122,1.25-0.603,1.481-1.259l2.177-6.416 l7.776,7.253c0.326,0.27,0.735,0.419,1.158,0.422h10.114l-4.436-12.676l-12.931,0.003L28.98,6H17.634z"/><linearGradient id="k8yl7~hDat~FaoWq8WjN6c" x1="-1252.952" x2="-1244.704" y1="876.6" y2="898.575" gradientTransform="translate(1981.75 -1362.063) scale(1.5625)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3ccbf4"/><stop offset="1" stop-color="#2892df"/></linearGradient><path fill="url(#k8yl7~hDat~FaoWq8WjN6c)" d="M32.074,7.225C31.827,6.493,31.141,6,30.368,6h-12.6c0.772,0,1.459,0.493,1.705,1.224 l10.935,32.399c0.318,0.942-0.188,1.963-1.13,2.281C29.093,41.968,28.899,42,28.703,42h12.6c0.994,0,1.8-0.806,1.8-1.801 c0-0.196-0.032-0.39-0.095-0.575L32.074,7.225z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#fbc02d" d="M43.611,20.083H42V20H24v8h11.303c-1.649,4.657-6.08,8-11.303,8c-6.627,0-12-5.373-12-12 s5.373-12,12-12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C12.955,4,4,12.955,4,24s8.955,20,20,20 s20-8.955,20-20C44,22.659,43.862,21.35,43.611,20.083z"/><path fill="#e53935" d="M6.306,14.691l6.571,4.819C14.655,15.108,18.961,12,24,12c3.059,0,5.842,1.154,7.961,3.039 l5.657-5.657C34.046,6.053,29.268,4,24,4C16.318,4,9.656,8.337,6.306,14.691z"/><path fill="#4caf50" d="M24,44c5.166,0,9.86-1.977,13.409-5.192l-6.19-5.238C29.211,35.091,26.715,36,24,36 c-5.202,0-9.619-3.317-11.283-7.946l-6.522,5.025C9.505,39.556,16.227,44,24,44z"/><path fill="#1565c0" d="M43.611,20.083L43.595,20L42,20H24v8h11.303c-0.792,2.237-2.231,4.166-4.087,5.571 c0.001-0.001,0.002-0.001,0.003-0.002l6.19,5.238C36.971,39.205,44,34,44,24C44,22.659,43.862,21.35,43.611,20.083z"/></svg>
|
||||
|
After Width: | Height: | Size: 977 B |
99
datamodels/2.x/itop-oauth-client/assets/js/oauth_connect.js
Normal file
99
datamodels/2.x/itop-oauth-client/assets/js/oauth_connect.js
Normal file
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2022 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
// Function used to open OAuth popup
|
||||
var oWindowObjectReference = null;
|
||||
var sPreviousUrl = null;
|
||||
var oListener = null;
|
||||
var sOAuthAjaxURI = null;
|
||||
var sOAuthObjClass = null;
|
||||
var sOAuthObjKey = null;
|
||||
var sOAuthReturnURI = null;
|
||||
|
||||
|
||||
const oOnOauthSuccess = function (event) {
|
||||
if (oListener !== null) {
|
||||
clearInterval(oListener);
|
||||
}
|
||||
|
||||
$.post(
|
||||
sOAuthAjaxURI,
|
||||
{
|
||||
operation: 'GetDisplayAuthenticationResults',
|
||||
class: sOAuthObjClass,
|
||||
id: sOAuthObjKey,
|
||||
redirect_url: event.data
|
||||
},
|
||||
function (oData) {
|
||||
window.location = oData.data;
|
||||
}
|
||||
);
|
||||
}
|
||||
const oOpenSignInWindow = function (url, name) {
|
||||
// Remove any existing event listener
|
||||
window.removeEventListener('message', oOnOauthSuccess);
|
||||
if (oListener !== null) {
|
||||
clearInterval(oListener);
|
||||
}
|
||||
|
||||
// Window features
|
||||
const sWindowFeatures = 'toolbar=no, menubar=no, width=600, height=700, top=100, left=100';
|
||||
|
||||
if (oWindowObjectReference === null || oWindowObjectReference.closed) {
|
||||
/* If the pointer to the window object in memory does not exist
|
||||
or if such pointer exists but the window was closed */
|
||||
oWindowObjectReference = window.open(url, name, sWindowFeatures);
|
||||
} else if (sPreviousUrl !== url) {
|
||||
/* If the resource to load is different,
|
||||
then we load it in the already opened secondary window, and then
|
||||
we bring such window back on top/in front of its parent window. */
|
||||
oWindowObjectReference = window.open(url, name, sWindowFeatures);
|
||||
oWindowObjectReference.focus();
|
||||
} else {
|
||||
/* Else the window reference must exist and the window
|
||||
is not closed; therefore, we can bring it back on top of any other
|
||||
window with the focus() method. There would be no need to re-create
|
||||
the window or to reload the referenced resource. */
|
||||
oWindowObjectReference.focus();
|
||||
}
|
||||
/* Let know every second our child window that we're waiting for it to complete,
|
||||
once we reach our landing page, it'll send us a reply
|
||||
*/
|
||||
oListener = window.setInterval(function () {
|
||||
if (oWindowObjectReference.closed) {
|
||||
clearInterval(oListener);
|
||||
}
|
||||
oWindowObjectReference.postMessage('anyone', sOAuthReturnURI);
|
||||
}, 1000);
|
||||
|
||||
/* Once we receive a response, transmit it to the server to get authenticate and display
|
||||
results
|
||||
*/
|
||||
window.addEventListener('message', oOnOauthSuccess, false);
|
||||
// Assign the previous URL
|
||||
sPreviousUrl = url;
|
||||
};
|
||||
|
||||
|
||||
const OAuthConnect = function(sClass, sId, sAjaxUri, sReturnUri) {
|
||||
sOAuthAjaxURI = sAjaxUri;
|
||||
sOAuthObjClass = sClass;
|
||||
sOAuthObjKey = sId;
|
||||
sOAuthReturnURI = sReturnUri;
|
||||
|
||||
$.post(
|
||||
sOAuthAjaxURI,
|
||||
{
|
||||
operation: 'GetOAuthAuthorizationUrl',
|
||||
class: sOAuthObjClass,
|
||||
id: sOAuthObjKey
|
||||
},
|
||||
function (oData) {
|
||||
if (oData.status === 'success') {
|
||||
oOpenSignInWindow(oData.data.authorization_url, 'OAuth authorization')
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
16
datamodels/2.x/itop-oauth-client/composer.json
Normal file
16
datamodels/2.x/itop-oauth-client/composer.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"config": {
|
||||
"classmap-authoritative": true
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Combodo\\iTop\\OAuthClient\\": "src"
|
||||
}
|
||||
},
|
||||
"name": "combodo/itop-oauth-client",
|
||||
"type": "itop-extension",
|
||||
"description": "Remote authentication for OAuth 2.0",
|
||||
"require": {
|
||||
"composer-runtime-api": "^2.0"
|
||||
}
|
||||
}
|
||||
20
datamodels/2.x/itop-oauth-client/composer.lock
generated
Normal file
20
datamodels/2.x/itop-oauth-client/composer.lock
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "285a4d33f818950c151bb893193d2cce",
|
||||
"packages": [],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
"composer-runtime-api": "^2.0"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.1.0"
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('DA DA', 'Danish', 'Dansk', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
301
datamodels/2.x/itop-oauth-client/datamodel.itop-oauth-client.xml
Normal file
301
datamodels/2.x/itop-oauth-client/datamodel.itop-oauth-client.xml
Normal file
@@ -0,0 +1,301 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1">
|
||||
<constants/>
|
||||
<classes>
|
||||
<class id="OAuthClient" _delta="define">
|
||||
<parent>cmdbAbstractObject</parent>
|
||||
<properties>
|
||||
<category>cloud,searchable</category>
|
||||
<abstract>true</abstract>
|
||||
<key_type>autoincrement</key_type>
|
||||
<db_table>priv_oauth_client</db_table>
|
||||
<db_key_field>id</db_key_field>
|
||||
<db_final_class_field/>
|
||||
<naming>
|
||||
<attributes>
|
||||
<attribute id="provider"/>
|
||||
<attribute id="name"/>
|
||||
</attributes>
|
||||
</naming>
|
||||
<display_template/>
|
||||
<icon/>
|
||||
<reconciliation>
|
||||
<attributes>
|
||||
<attribute id="provider"/>
|
||||
<attribute id="name"/>
|
||||
</attributes>
|
||||
</reconciliation>
|
||||
</properties>
|
||||
<fields>
|
||||
<field id="provider" xsi:type="AttributeString">
|
||||
<sql>provider</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
</field>
|
||||
<field id="name" xsi:type="AttributeString">
|
||||
<sql>name</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
</field>
|
||||
<field id="status" xsi:type="AttributeEnum">
|
||||
<always_load_in_tables>true</always_load_in_tables>
|
||||
<values>
|
||||
<value id="active">
|
||||
<code>active</code>
|
||||
<style>
|
||||
<main_color>$ibo-lifecycle-active-state-primary-color</main_color>
|
||||
<complementary_color>$ibo-lifecycle-active-state-secondary-color</complementary_color>
|
||||
<decoration_classes/>
|
||||
</style>
|
||||
</value>
|
||||
<value id="inactive">
|
||||
<code>inactive</code>
|
||||
<style>
|
||||
<main_color>$ibo-lifecycle-inactive-state-primary-color</main_color>
|
||||
<complementary_color>$ibo-lifecycle-inactive-state-secondary-color</complementary_color>
|
||||
<decoration_classes/>
|
||||
</style>
|
||||
</value>
|
||||
</values>
|
||||
<sql>status</sql>
|
||||
<default_value>inactive</default_value>
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
</field>
|
||||
<field id="description" xsi:type="AttributeText">
|
||||
<sql>description</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
</field>
|
||||
<field id="client_id" xsi:type="AttributeText">
|
||||
<sql>client_id</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
</field>
|
||||
<field id="client_secret" xsi:type="AttributeText">
|
||||
<sql>client_secret</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
</field>
|
||||
<field id="refresh_token" xsi:type="AttributeText">
|
||||
<sql>refresh_token</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
<tracking_level>none</tracking_level>
|
||||
</field>
|
||||
<field id="refresh_token_expiration" xsi:type="AttributeDateTime">
|
||||
<sql>refresh_token_expiration</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
<tracking_level>none</tracking_level>
|
||||
</field>
|
||||
<field id="token" xsi:type="AttributeText">
|
||||
<sql>token</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
<tracking_level>none</tracking_level>
|
||||
</field>
|
||||
<field id="token_expiration" xsi:type="AttributeDateTime">
|
||||
<sql>token_expiration</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
<tracking_level>none</tracking_level>
|
||||
</field>
|
||||
<field id="redirect_url" xsi:type="AttributeURL">
|
||||
<sql>redirect_url</sql>
|
||||
<default_value/>
|
||||
<target>_blank</target>
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
</field>
|
||||
<field id="mailbox_list" xsi:type="AttributeLinkedSet">
|
||||
<linked_class>MailInboxOAuth</linked_class>
|
||||
<ext_key_to_me>oauth_client_id</ext_key_to_me>
|
||||
<count_min>0</count_min>
|
||||
<count_max>0</count_max>
|
||||
</field>
|
||||
</fields>
|
||||
<methods>
|
||||
<method id="DisplayBareHeader">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<type>Overload-DBObject</type>
|
||||
<code><![CDATA[
|
||||
public function DisplayBareHeader(WebPage $oPage, $bEditMode = false)
|
||||
{
|
||||
parent::DisplayBareHeader($oPage, $bEditMode);
|
||||
if (!$bEditMode) {
|
||||
$oConfig = utils::GetConfig();
|
||||
$sScope = $this->Get('scope');
|
||||
if ($this->Get('status') == 'inactive') {
|
||||
$oPage->p('<b>'.Dict::S('itop-oauth-client:Message:MissingToken').'</b>');
|
||||
} elseif (($sScope == 'SMTP' || $sScope == 'EMail') && $oConfig->Get('email_transport_smtp.username') == $this->Get('name')) {
|
||||
$sLabel = Dict::S('itop-oauth-client:UsedForSMTP');
|
||||
$sTestLabel = Dict::S('itop-oauth-client:TestSMTP');
|
||||
$sTestURL = utils::GetAbsoluteUrlAppRoot().'setup/email.test.php';
|
||||
$oPage->p("<b>$sLabel</b> <a href='$sTestURL' target='_blank'>$sTestLabel</a>");
|
||||
}
|
||||
}
|
||||
}
|
||||
]]></code>
|
||||
</method>
|
||||
<method id="GetAttributeFlags">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<type>Overload-DBObject</type>
|
||||
<code><![CDATA[
|
||||
public function GetAttributeFlags($sAttCode, &$aReasons = array(), $sTargetState = '')
|
||||
{
|
||||
if ($sAttCode == 'status') {
|
||||
return OPT_ATT_READONLY;
|
||||
}
|
||||
|
||||
return parent::GetAttributeFlags($sAttCode, $aReasons, $sTargetState);
|
||||
}
|
||||
]]></code>
|
||||
</method>
|
||||
<method id="GetInitialStateAttributeFlags">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<type>Overload-DBObject</type>
|
||||
<code><![CDATA[
|
||||
public function GetInitialStateAttributeFlags($sAttCode, &$aReasons = array())
|
||||
{
|
||||
if ($sAttCode == 'status') {
|
||||
return OPT_ATT_READONLY;
|
||||
}
|
||||
|
||||
return parent::GetInitialStateAttributeFlags($sAttCode, $aReasons);
|
||||
}
|
||||
]]></code>
|
||||
</method>
|
||||
<method id="GetDefaultMailServer">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<code><![CDATA[
|
||||
public function GetDefaultMailServer()
|
||||
{
|
||||
return 'imap.'.$this->Get('provider').'.com';
|
||||
}
|
||||
]]></code>
|
||||
</method>
|
||||
<method id="GetDefaultMailServerPort">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<code><![CDATA[
|
||||
public function GetDefaultMailServerPort()
|
||||
{
|
||||
return 993;
|
||||
}
|
||||
]]></code>
|
||||
</method>
|
||||
<method id="GetAccessToken">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<code><![CDATA[
|
||||
public function GetAccessToken()
|
||||
{
|
||||
if ($this->Get('status') == 'active') {
|
||||
return new \League\OAuth2\Client\Token\AccessToken([
|
||||
'access_token' => $this->Get('token'),
|
||||
'expires_in' => date_format(new DateTime($this->Get('token_expiration')), 'U') - time(),
|
||||
'refresh_token' => $this->Get('refresh_token'),
|
||||
'token_type' => 'Bearer',
|
||||
]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
]]></code>
|
||||
</method>
|
||||
<method id="SetAccessToken">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<code><![CDATA[
|
||||
public function SetAccessToken(\League\OAuth2\Client\Token\AccessTokenInterface $oAccessToken)
|
||||
{
|
||||
$this->Set('token', $oAccessToken->getToken());
|
||||
$this->Set('token_expiration', date(AttributeDateTime::GetSQLFormat(), $oAccessToken->getExpires()));
|
||||
if (!empty($oAccessToken->getRefreshToken())) {
|
||||
$this->Set('refresh_token', $oAccessToken->getRefreshToken());
|
||||
}
|
||||
$this->Set('status', 'active');
|
||||
$this->DBUpdate();
|
||||
}
|
||||
]]></code>
|
||||
</method>
|
||||
</methods>
|
||||
<presentation>
|
||||
<details>
|
||||
<items>
|
||||
<item id="name">
|
||||
<rank>1</rank>
|
||||
</item>
|
||||
<item id="description">
|
||||
<rank>2</rank>
|
||||
</item>
|
||||
<item id="provider">
|
||||
<rank>3</rank>
|
||||
</item>
|
||||
<item id="redirect_url">
|
||||
<rank>5</rank>
|
||||
</item>
|
||||
<item id="client_id">
|
||||
<rank>6</rank>
|
||||
</item>
|
||||
<item id="client_secret">
|
||||
<rank>7</rank>
|
||||
</item>
|
||||
<item id="mailbox_list">
|
||||
<rank>8</rank>
|
||||
</item>
|
||||
</items>
|
||||
</details>
|
||||
<list>
|
||||
<items>
|
||||
<item id="status">
|
||||
<rank>1</rank>
|
||||
</item>
|
||||
<item id="provider">
|
||||
<rank>3</rank>
|
||||
</item>
|
||||
</items>
|
||||
</list>
|
||||
<search>
|
||||
<items>
|
||||
<item id="name">
|
||||
<rank>1</rank>
|
||||
</item>
|
||||
<item id="provider">
|
||||
<rank>2</rank>
|
||||
</item>
|
||||
</items>
|
||||
</search>
|
||||
<default_search>
|
||||
<items>
|
||||
<item id="name">
|
||||
<rank>1</rank>
|
||||
</item>
|
||||
<item id="provider">
|
||||
<rank>2</rank>
|
||||
</item>
|
||||
</items>
|
||||
</default_search>
|
||||
</presentation>
|
||||
</class>
|
||||
</classes>
|
||||
<menus>
|
||||
<menu id="OAuthClient" xsi:type="OQLMenuNode" _delta="define">
|
||||
<rank>100</rank>
|
||||
<parent>ConfigurationTools</parent>
|
||||
<oql><![CDATA[SELECT OAuthClient]]></oql>
|
||||
<do_search>1</do_search>
|
||||
<enable_admin_only>0</enable_admin_only>
|
||||
<enable_class>OAuthClient</enable_class>
|
||||
<enable_action>UR_ACTION_READ</enable_action>
|
||||
</menu>
|
||||
</menus>
|
||||
<user_rights>
|
||||
<groups>
|
||||
</groups>
|
||||
<profiles>
|
||||
</profiles>
|
||||
</user_rights>
|
||||
</itop_design>
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access token...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access token...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...',
|
||||
'Menu:OAuthClient' => 'OAuth Client',
|
||||
'Menu:OAuthClient+' => '',
|
||||
'Menu:GenerateTokens' => 'Generate access token...',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access token...',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', [
|
||||
'Class:OAuthClient' => 'Oauth Client',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider',
|
||||
'Class:OAuthClient/Attribute:provider+' => '',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login',
|
||||
'Class:OAuthClient/Attribute:name+' => '',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope',
|
||||
'Class:OAuthClient/Attribute:scope+' => '',
|
||||
'Class:OAuthClient/Attribute:status' => 'Status',
|
||||
'Class:OAuthClient/Attribute:status+' => '',
|
||||
'Class:OAuthClient/Attribute:status/Value:active' => 'Access token generated',
|
||||
'Class:OAuthClient/Attribute:status/Value:inactive' => 'No Access token',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description',
|
||||
'Class:OAuthClient/Attribute:description+' => '',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token',
|
||||
'Class:OAuthClient/Attribute:token+' => '',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('EN US', 'English', 'English', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('EN US', 'English', 'English', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('FR FR', 'French', 'Français', [
|
||||
'Menu:CreateMailbox' => 'Créer une boite mail...',
|
||||
'Menu:OAuthClient' => 'Client OAuth',
|
||||
'Menu:OAuthClient+' => '',
|
||||
'Menu:GenerateTokens' => 'Créer un jeton d\'accès...',
|
||||
'Menu:RegenerateTokens' => 'Recréer un jeton d\'accès..',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Création de boite mail',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'Ce client Oauth est utilisé pour SMTP',
|
||||
'itop-oauth-client:TestSMTP' => 'Tester l\'envoi de mail',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Il n\'y a pas de client OAuth pour l\'utilisateur %1$s',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Générez le jeton d\'accès avant d\'utiliser ce client OAuth',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Le jeton d\'accès à été créé',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Le jeton d\'accès à été renouvelé',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', [
|
||||
'Class:OAuthClient' => 'Client OAuth',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Fournisseur',
|
||||
'Class:OAuthClient/Attribute:provider+' => '',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login',
|
||||
'Class:OAuthClient/Attribute:name+' => '',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Niveaux d\'accès',
|
||||
'Class:OAuthClient/Attribute:scope+' => '',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description',
|
||||
'Class:OAuthClient/Attribute:description+' => '',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'ID Client',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Code secret du client',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Jeton de renouvellement',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Date d\'expiration du jeton de renouvellement',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '',
|
||||
'Class:OAuthClient/Attribute:token' => 'Jeton d\'accès',
|
||||
'Class:OAuthClient/Attribute:token+' => '',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Date d\'expiration du jeton d\'accès',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'URL de redirection',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('FR FR', 'French', 'Français', [
|
||||
'Class:OAuthClientAzure' => 'Client OAuth pour Microsoft Azure',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('FR FR', 'French', 'Français', [
|
||||
'Class:OAuthClientGoogle' => 'Client OAuth pour Google',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)',
|
||||
]);
|
||||
|
||||
|
||||
// Additional language entries not present in English dict
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:OAuthClient/Name' => '%1$s-%%2$~',
|
||||
));
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
24
datamodels/2.x/itop-oauth-client/index.php
Normal file
24
datamodels/2.x/itop-oauth-client/index.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2022 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\OAuthClient;
|
||||
|
||||
use Combodo\iTop\OAuthClient\Controller\OAuthClientController;
|
||||
|
||||
require_once(APPROOT.'application/startup.inc.php');
|
||||
|
||||
if (version_compare(ITOP_DESIGN_LATEST_VERSION , '3.0') >= 0) {
|
||||
$sTemplates = MODULESROOT.'itop-oauth-client/templates';
|
||||
} else {
|
||||
$sTemplates = MODULESROOT.'itop-oauth-client/templates/legacy';
|
||||
}
|
||||
|
||||
$oUpdateController = new OAuthClientController($sTemplates, 'itop-oauth-client');
|
||||
$oUpdateController->AllowOnlyAdmin();
|
||||
$oUpdateController->SetDefaultOperation('CreateMailbox');
|
||||
$oUpdateController->HandleOperation();
|
||||
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('IT IT', 'Italian', 'Italiano', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('IT IT', 'Italian', 'Italiano', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('IT IT', 'Italian', 'Italiano', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('IT IT', 'Italian', 'Italiano', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('JA JP', 'Japanese', '日本語', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
//
|
||||
// iTop module definition file
|
||||
//
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-oauth-client/3.1.0',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
'label' => 'OAuth 2.0 client',
|
||||
'category' => 'business',
|
||||
|
||||
// Setup
|
||||
//
|
||||
'dependencies' => array(
|
||||
'itop-welcome-itil/3.1.0,',
|
||||
),
|
||||
'mandatory' => false,
|
||||
'visible' => true,
|
||||
|
||||
// Components
|
||||
//
|
||||
'datamodel' => array(
|
||||
'vendor/autoload.php',
|
||||
'model.itop-oauth-client.php', // Contains the PHP code generated by the "compilation" of datamodel.remote-authent-oauth.xml
|
||||
'src/Model/OAuthClientGoogle.php',
|
||||
'src/Model/OAuthClientAzure.php',
|
||||
'src/Service/PopupMenuExtension.php',
|
||||
),
|
||||
'webservice' => array(
|
||||
|
||||
),
|
||||
'data.struct' => array(
|
||||
// add your 'structure' definition XML files here,
|
||||
),
|
||||
'data.sample' => array(
|
||||
// add your sample data XML files here,
|
||||
),
|
||||
|
||||
// Documentation
|
||||
//
|
||||
'doc.manual_setup' => '', // hyperlink to manual setup documentation, if any
|
||||
'doc.more_information' => '', // hyperlink to more information, if any
|
||||
|
||||
// Default settings
|
||||
//
|
||||
'settings' => array(
|
||||
// Module specific settings go here, if any
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2022 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\OAuthClient\Controller;
|
||||
|
||||
use cmdbAbstractObject;
|
||||
use Combodo\iTop\Application\TwigBase\Controller\Controller;
|
||||
use Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderFactory;
|
||||
use Dict;
|
||||
use IssueLog;
|
||||
use MetaModel;
|
||||
use utils;
|
||||
|
||||
class AjaxOauthClientController extends Controller
|
||||
{
|
||||
const LOG_CHANNEL = 'OAuth';
|
||||
|
||||
public function OperationGetOAuthAuthorizationUrl()
|
||||
{
|
||||
$sClass = utils::ReadParam('class');
|
||||
$sId = utils::ReadParam('id');
|
||||
|
||||
IssueLog::Debug("GetAuthorizationUrl for $sClass::$sId", self::LOG_CHANNEL);
|
||||
|
||||
/** @var \OAuthClient $oOAuthClient */
|
||||
$oOAuthClient = MetaModel::GetObject($sClass, $sId);
|
||||
|
||||
$aResult = ['status' => 'success', 'data' => []];
|
||||
|
||||
$sAuthorizationUrl = OAuthClientProviderFactory::GetAuthorizationUrl($oOAuthClient);
|
||||
$aResult['data']['authorization_url'] = $sAuthorizationUrl;
|
||||
|
||||
$this->DisplayJSONPage($aResult);
|
||||
}
|
||||
|
||||
public function OperationGetDisplayAuthenticationResults()
|
||||
{
|
||||
$sClass = utils::ReadParam('class');
|
||||
$sId = utils::ReadParam('id');
|
||||
|
||||
IssueLog::Debug("GetDisplayAuthenticationResults for $sClass::$sId", self::LOG_CHANNEL);
|
||||
|
||||
/** @var \OAuthClient $oOAuthClient */
|
||||
$oOAuthClient = MetaModel::GetObject($sClass, $sId);
|
||||
$bIsCreation = empty($oOAuthClient->Get('token'));
|
||||
|
||||
$sRedirectUrl = utils::ReadParam('redirect_url', '', false, 'raw');
|
||||
|
||||
$sRedirectUrlQuery = parse_url($sRedirectUrl)['query'];
|
||||
|
||||
$aQuery = [];
|
||||
parse_str($sRedirectUrlQuery, $aQuery);
|
||||
$sCode = $aQuery['code'];
|
||||
$oAccessToken = OAuthClientProviderFactory::GetAccessTokenFromCode($oOAuthClient, $sCode);
|
||||
|
||||
$oOAuthClient->SetAccessToken($oAccessToken);
|
||||
|
||||
cmdbAbstractObject::SetSessionMessage(
|
||||
$sClass,
|
||||
$sId,
|
||||
"$sClass:$sId:TokenCreated",
|
||||
$bIsCreation ? Dict::S('itop-oauth-client:Message:TokenCreated') : Dict::S('itop-oauth-client:Message:TokenRecreated'),
|
||||
'ok',
|
||||
1,
|
||||
true
|
||||
);
|
||||
|
||||
$aResult = ['status' => 'success'];
|
||||
$aResult['data'] = utils::GetAbsoluteUrlAppRoot()."pages/UI.php?operation=details&class=$sClass&id=$sId";
|
||||
|
||||
$this->DisplayJSONPage($aResult);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2022 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\OAuthClient\Controller;
|
||||
|
||||
use Combodo\iTop\Application\TwigBase\Controller\Controller;
|
||||
use IssueLog;
|
||||
use MetaModel;
|
||||
use utils;
|
||||
|
||||
class OAuthClientController extends Controller
|
||||
{
|
||||
const LOG_CHANNEL = 'OAuth';
|
||||
|
||||
public function OperationCreateMailbox()
|
||||
{
|
||||
$aParams = [];
|
||||
|
||||
$sClass = utils::ReadParam('class');
|
||||
$sId = utils::ReadParam('id');
|
||||
|
||||
IssueLog::Debug("CreateMailbox for $sClass::$sId", self::LOG_CHANNEL);
|
||||
|
||||
$oOAuthClient = MetaModel::GetObject($sClass, $sId);
|
||||
$sLogin = $oOAuthClient->Get('name');
|
||||
$sDefaultServer = $oOAuthClient->GetDefaultMailServer();
|
||||
$sDefaultPort = $oOAuthClient->GetDefaultMailServerPort();
|
||||
|
||||
$aParams['sURL'] = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=new&class=MailInboxOAuth'.
|
||||
'&default[mailbox]=INBOX'.
|
||||
'&default[server]='.$sDefaultServer.
|
||||
'&default[port]='.$sDefaultPort.
|
||||
'&default[oauth_client_id]='.$sId.
|
||||
'&default[login]='.$sLogin;
|
||||
|
||||
$this->DisplayPage($aParams);
|
||||
}
|
||||
}
|
||||
128
datamodels/2.x/itop-oauth-client/src/Model/OAuthClientAzure.php
Normal file
128
datamodels/2.x/itop-oauth-client/src/Model/OAuthClientAzure.php
Normal file
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2022 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
use Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderFactory;
|
||||
|
||||
class OAuthClientAzure extends OAuthClient
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = [
|
||||
'category' => 'cloud',
|
||||
'key_type' => 'autoincrement',
|
||||
'name_attcode' => ['name', 'scope'],
|
||||
'state_attcode' => '',
|
||||
'reconc_keys' => ['provider', 'name'],
|
||||
'db_table' => 'priv_oauth_client_azure',
|
||||
'db_key_field' => 'id',
|
||||
'icon' => utils::GetAbsoluteUrlModulesRoot().'itop-oauth-client/assets/img/icons8-azure.svg',
|
||||
'db_finalclass_field' => '',
|
||||
'uniqueness_rules' => [
|
||||
'Username for scope' =>
|
||||
[
|
||||
'attributes' => ['name', 'scope'],
|
||||
'filter' => null,
|
||||
'disabled' => false,
|
||||
'is_blocking' => true,
|
||||
],
|
||||
'OAuth Server' =>
|
||||
[
|
||||
'attributes' => ['provider', 'scope', 'client_id', 'client_secret'],
|
||||
'filter' => null,
|
||||
'disabled' => false,
|
||||
'is_blocking' => true,
|
||||
],
|
||||
],
|
||||
];
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_InheritAttributes();
|
||||
MetaModel::Init_AddAttribute(new AttributeEnum('scope', [
|
||||
'allowed_values' => new ValueSetEnum('EMail'),
|
||||
'display_style' => 'list',
|
||||
'sql' => 'scope',
|
||||
'default_value' => 'EMail',
|
||||
'is_null_allowed' => false,
|
||||
'depends_on' => [],
|
||||
'always_load_in_tables' => true,
|
||||
]));
|
||||
|
||||
MetaModel::Init_SetZListItems('details', [
|
||||
'name',
|
||||
'status',
|
||||
'description',
|
||||
'provider',
|
||||
'scope',
|
||||
'redirect_url',
|
||||
'client_id',
|
||||
'client_secret',
|
||||
'mailbox_list',
|
||||
]);
|
||||
MetaModel::Init_SetZListItems('standard_search', [
|
||||
'name',
|
||||
'provider',
|
||||
'status',
|
||||
]);
|
||||
MetaModel::Init_SetZListItems('list', [
|
||||
'status',
|
||||
'provider',
|
||||
]);
|
||||
}
|
||||
|
||||
public function PrefillCreationForm(&$aContextParam)
|
||||
{
|
||||
$this->Set('provider', 'Azure');
|
||||
$this->Set('redirect_url', OAuthClientProviderFactory::GetRedirectUri());
|
||||
|
||||
parent::PrefillCreationForm($aContextParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute read-only values
|
||||
*
|
||||
* @return void
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
*/
|
||||
public function ComputeValues()
|
||||
{
|
||||
parent::ComputeValues();
|
||||
if (empty($this->Get('provider'))) {
|
||||
$this->Set('provider', 'Azure');
|
||||
}
|
||||
if (empty($this->Get('redirect_url'))) {
|
||||
$this->Set('redirect_url', OAuthClientProviderFactory::GetRedirectUri());
|
||||
}
|
||||
}
|
||||
|
||||
public function GetAttributeFlags($sAttCode, &$aReasons = array(), $sTargetState = '')
|
||||
{
|
||||
if ($sAttCode == 'provider' || $sAttCode == 'redirect_url') {
|
||||
return OPT_ATT_READONLY;
|
||||
}
|
||||
|
||||
return parent::GetAttributeFlags($sAttCode, $aReasons, $sTargetState);
|
||||
}
|
||||
|
||||
public function GetInitialStateAttributeFlags($sAttCode, &$aReasons = array())
|
||||
{
|
||||
if ($sAttCode == 'provider' || $sAttCode == 'redirect_url') {
|
||||
return OPT_ATT_READONLY;
|
||||
}
|
||||
|
||||
return parent::GetInitialStateAttributeFlags($sAttCode, $aReasons);
|
||||
}
|
||||
|
||||
public function GetDefaultMailServer()
|
||||
{
|
||||
return 'outlook.office365.com';
|
||||
}
|
||||
|
||||
public function GetScope()
|
||||
{
|
||||
return 'https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send offline_access';
|
||||
}
|
||||
}
|
||||
134
datamodels/2.x/itop-oauth-client/src/Model/OAuthClientGoogle.php
Normal file
134
datamodels/2.x/itop-oauth-client/src/Model/OAuthClientGoogle.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2022 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
use Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderFactory;
|
||||
|
||||
class OAuthClientGoogle extends OAuthClient
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
'category' => 'cloud',
|
||||
'key_type' => 'autoincrement',
|
||||
'name_attcode' => ['name', 'scope'],
|
||||
'state_attcode' => '',
|
||||
'reconc_keys' => ['provider', 'name'],
|
||||
'db_table' => 'priv_oauth_client_google',
|
||||
'db_key_field' => 'id',
|
||||
'icon' => utils::GetAbsoluteUrlModulesRoot().'itop-oauth-client/assets/img/icons8-google.svg',
|
||||
'db_finalclass_field' => '',
|
||||
'uniqueness_rules' => [
|
||||
'Username for scope' =>
|
||||
[
|
||||
'attributes' => ['name', 'scope'],
|
||||
'filter' => null,
|
||||
'disabled' => false,
|
||||
'is_blocking' => true,
|
||||
],
|
||||
'OAuth Server' =>
|
||||
[
|
||||
'attributes' => ['provider', 'scope', 'client_id', 'client_secret'],
|
||||
'filter' => null,
|
||||
'disabled' => false,
|
||||
'is_blocking' => true,
|
||||
],
|
||||
],
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_InheritAttributes();
|
||||
MetaModel::Init_AddAttribute(new AttributeEnum('scope', [
|
||||
'allowed_values' => new ValueSetEnum('EMail'),
|
||||
'display_style' => 'list',
|
||||
'sql' => 'scope',
|
||||
'default_value' => 'EMail',
|
||||
'is_null_allowed' => false,
|
||||
'depends_on' => [],
|
||||
'always_load_in_tables' => true,
|
||||
]));
|
||||
|
||||
MetaModel::Init_SetZListItems('details', [
|
||||
'name',
|
||||
'status',
|
||||
'description',
|
||||
'provider',
|
||||
'scope',
|
||||
'redirect_url',
|
||||
'client_id',
|
||||
'client_secret',
|
||||
'mailbox_list',
|
||||
]);
|
||||
MetaModel::Init_SetZListItems('standard_search', [
|
||||
'name',
|
||||
'provider',
|
||||
'status',
|
||||
]);
|
||||
MetaModel::Init_SetZListItems('list', [
|
||||
'status',
|
||||
'provider',
|
||||
]);
|
||||
}
|
||||
|
||||
public function PrefillCreationForm(&$aContextParam)
|
||||
{
|
||||
$this->Set('provider', 'Google');
|
||||
$this->Set('scope', 'EMail');
|
||||
$this->Set('redirect_url', OAuthClientProviderFactory::GetRedirectUri());
|
||||
|
||||
parent::PrefillCreationForm($aContextParam);
|
||||
}
|
||||
|
||||
public function GetAttributeFlags($sAttCode, &$aReasons = array(), $sTargetState = '')
|
||||
{
|
||||
if ($sAttCode == 'provider' || $sAttCode == 'scope' || $sAttCode == 'redirect_url') {
|
||||
return OPT_ATT_READONLY;
|
||||
}
|
||||
|
||||
return parent::GetAttributeFlags($sAttCode, $aReasons, $sTargetState);
|
||||
}
|
||||
|
||||
public function GetInitialStateAttributeFlags($sAttCode, &$aReasons = array())
|
||||
{
|
||||
if ($sAttCode == 'provider' || $sAttCode == 'scope' || $sAttCode == 'redirect_url') {
|
||||
return OPT_ATT_READONLY;
|
||||
}
|
||||
|
||||
return parent::GetInitialStateAttributeFlags($sAttCode, $aReasons);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute read-only values
|
||||
*
|
||||
* @return void
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
*/
|
||||
public function ComputeValues()
|
||||
{
|
||||
parent::ComputeValues();
|
||||
if (empty($this->Get('provider'))) {
|
||||
$this->Set('provider', 'Google');
|
||||
}
|
||||
if (empty($this->Get('redirect_url'))) {
|
||||
$this->Set('redirect_url', OAuthClientProviderFactory::GetRedirectUri());
|
||||
}
|
||||
if (empty($this->Get('scope'))) {
|
||||
$this->Set('scope', 'EMail');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function GetDefaultMailServer()
|
||||
{
|
||||
return 'imap.gmail.com';
|
||||
}
|
||||
|
||||
public function GetScope()
|
||||
{
|
||||
return 'https://mail.google.com/';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2022 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\OAuthClient\Service;
|
||||
|
||||
use ApplicationContext;
|
||||
use Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderFactory;
|
||||
use Dict;
|
||||
use iPopupMenuExtension;
|
||||
use JSPopupMenuItem;
|
||||
use OAuthClient;
|
||||
use SeparatorPopupMenuItem;
|
||||
use URLPopupMenuItem;
|
||||
use utils;
|
||||
|
||||
class PopupMenuExtension implements \iPopupMenuExtension
|
||||
{
|
||||
const MODULE_CODE = 'itop-oauth-client';
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function EnumItems($iMenuId, $param)
|
||||
{
|
||||
$aResult = [];
|
||||
|
||||
switch ($iMenuId) {
|
||||
case iPopupMenuExtension::MENU_OBJDETAILS_ACTIONS:
|
||||
$oObj = $param;
|
||||
if ($oObj instanceof OAuthClient) {
|
||||
$bHasToken = !empty($oObj->Get('token'));
|
||||
$aResult[] = new SeparatorPopupMenuItem();
|
||||
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sMenu = $bHasToken ? 'Menu:RegenerateTokens' : 'Menu:GenerateTokens';
|
||||
$sObjClass = get_class($oObj);
|
||||
$sClass = $sObjClass;
|
||||
$sId = $oObj->GetKey();
|
||||
$sAjaxUri = utils::GetAbsoluteUrlModulePage(static::MODULE_CODE, 'ajax.php');
|
||||
// Add a new menu item that triggers a custom JS function defined in our own javascript file: js/sample.js
|
||||
$sJSFileUrl = utils::GetAbsoluteUrlModulesRoot().static::MODULE_CODE.'/assets/js/oauth_connect.js';
|
||||
$sRedirectUri = OAuthClientProviderFactory::GetRedirectUri();
|
||||
$aResult[] = new JSPopupMenuItem(
|
||||
$sMenu.' from '.$sObjClass,
|
||||
Dict::S($sMenu),
|
||||
"OAuthConnect('$sClass', $sId, '$sAjaxUri', '$sRedirectUri')",
|
||||
[$sJSFileUrl]
|
||||
);
|
||||
|
||||
if ($bHasToken) {
|
||||
$sScope = $oObj->Get('scope');
|
||||
if ($sScope == 'EMail') {
|
||||
$aParams = $oAppContext->GetAsHash();
|
||||
$sMenu = 'Menu:CreateMailbox';
|
||||
$sObjClass = get_class($oObj);
|
||||
$aParams['class'] = $sObjClass;
|
||||
$aParams['id'] = $oObj->GetKey();
|
||||
$aParams['operation'] = 'CreateMailbox';
|
||||
$aResult[] = new URLPopupMenuItem(
|
||||
$sMenu.' from '.$sObjClass,
|
||||
Dict::S($sMenu),
|
||||
utils::GetAbsoluteUrlModulePage(static::MODULE_CODE, 'index.php', $aParams)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
// Unknown type of menu, do nothing
|
||||
break;
|
||||
}
|
||||
|
||||
return $aResult;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{# @copyright Copyright (C) 2010-2022 Combodo SARL #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
{# @copyright Copyright (C) 2010-2022 Combodo SARL #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
|
||||
window.location.href = '{{ sURL|raw }}'
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
7
datamodels/2.x/itop-oauth-client/vendor/autoload.php
vendored
Normal file
7
datamodels/2.x/itop-oauth-client/vendor/autoload.php
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
// autoload.php @generated by Composer
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInitd52424b43ff18219f2ec935428aff074::getLoader();
|
||||
572
datamodels/2.x/itop-oauth-client/vendor/composer/ClassLoader.php
vendored
Normal file
572
datamodels/2.x/itop-oauth-client/vendor/composer/ClassLoader.php
vendored
Normal file
@@ -0,0 +1,572 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
/**
|
||||
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
||||
*
|
||||
* $loader = new \Composer\Autoload\ClassLoader();
|
||||
*
|
||||
* // register classes with namespaces
|
||||
* $loader->add('Symfony\Component', __DIR__.'/component');
|
||||
* $loader->add('Symfony', __DIR__.'/framework');
|
||||
*
|
||||
* // activate the autoloader
|
||||
* $loader->register();
|
||||
*
|
||||
* // to enable searching the include path (eg. for PEAR packages)
|
||||
* $loader->setUseIncludePath(true);
|
||||
*
|
||||
* In this example, if you try to use a class in the Symfony\Component
|
||||
* namespace or one of its children (Symfony\Component\Console for instance),
|
||||
* the autoloader will first look for the class under the component/
|
||||
* directory, and it will then fallback to the framework/ directory if not
|
||||
* found before giving up.
|
||||
*
|
||||
* This class is loosely based on the Symfony UniversalClassLoader.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @see https://www.php-fig.org/psr/psr-0/
|
||||
* @see https://www.php-fig.org/psr/psr-4/
|
||||
*/
|
||||
class ClassLoader
|
||||
{
|
||||
/** @var ?string */
|
||||
private $vendorDir;
|
||||
|
||||
// PSR-4
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, array<string, int>>
|
||||
*/
|
||||
private $prefixLengthsPsr4 = array();
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, array<int, string>>
|
||||
*/
|
||||
private $prefixDirsPsr4 = array();
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, string>
|
||||
*/
|
||||
private $fallbackDirsPsr4 = array();
|
||||
|
||||
// PSR-0
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, array<string, string[]>>
|
||||
*/
|
||||
private $prefixesPsr0 = array();
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, string>
|
||||
*/
|
||||
private $fallbackDirsPsr0 = array();
|
||||
|
||||
/** @var bool */
|
||||
private $useIncludePath = false;
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
* @psalm-var array<string, string>
|
||||
*/
|
||||
private $classMap = array();
|
||||
|
||||
/** @var bool */
|
||||
private $classMapAuthoritative = false;
|
||||
|
||||
/**
|
||||
* @var bool[]
|
||||
* @psalm-var array<string, bool>
|
||||
*/
|
||||
private $missingClasses = array();
|
||||
|
||||
/** @var ?string */
|
||||
private $apcuPrefix;
|
||||
|
||||
/**
|
||||
* @var self[]
|
||||
*/
|
||||
private static $registeredLoaders = array();
|
||||
|
||||
/**
|
||||
* @param ?string $vendorDir
|
||||
*/
|
||||
public function __construct($vendorDir = null)
|
||||
{
|
||||
$this->vendorDir = $vendorDir;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getPrefixes()
|
||||
{
|
||||
if (!empty($this->prefixesPsr0)) {
|
||||
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
* @psalm-return array<string, array<int, string>>
|
||||
*/
|
||||
public function getPrefixesPsr4()
|
||||
{
|
||||
return $this->prefixDirsPsr4;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
* @psalm-return array<string, string>
|
||||
*/
|
||||
public function getFallbackDirs()
|
||||
{
|
||||
return $this->fallbackDirsPsr0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
* @psalm-return array<string, string>
|
||||
*/
|
||||
public function getFallbackDirsPsr4()
|
||||
{
|
||||
return $this->fallbackDirsPsr4;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[] Array of classname => path
|
||||
* @psalm-var array<string, string>
|
||||
*/
|
||||
public function getClassMap()
|
||||
{
|
||||
return $this->classMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[] $classMap Class to filename map
|
||||
* @psalm-param array<string, string> $classMap
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function addClassMap(array $classMap)
|
||||
{
|
||||
if ($this->classMap) {
|
||||
$this->classMap = array_merge($this->classMap, $classMap);
|
||||
} else {
|
||||
$this->classMap = $classMap;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-0 directories for a given prefix, either
|
||||
* appending or prepending to the ones previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param string[]|string $paths The PSR-0 root directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function add($prefix, $paths, $prepend = false)
|
||||
{
|
||||
if (!$prefix) {
|
||||
if ($prepend) {
|
||||
$this->fallbackDirsPsr0 = array_merge(
|
||||
(array) $paths,
|
||||
$this->fallbackDirsPsr0
|
||||
);
|
||||
} else {
|
||||
$this->fallbackDirsPsr0 = array_merge(
|
||||
$this->fallbackDirsPsr0,
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$first = $prefix[0];
|
||||
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
||||
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
||||
|
||||
return;
|
||||
}
|
||||
if ($prepend) {
|
||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||
(array) $paths,
|
||||
$this->prefixesPsr0[$first][$prefix]
|
||||
);
|
||||
} else {
|
||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||
$this->prefixesPsr0[$first][$prefix],
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-4 directories for a given namespace, either
|
||||
* appending or prepending to the ones previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param string[]|string $paths The PSR-4 base directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function addPsr4($prefix, $paths, $prepend = false)
|
||||
{
|
||||
if (!$prefix) {
|
||||
// Register directories for the root namespace.
|
||||
if ($prepend) {
|
||||
$this->fallbackDirsPsr4 = array_merge(
|
||||
(array) $paths,
|
||||
$this->fallbackDirsPsr4
|
||||
);
|
||||
} else {
|
||||
$this->fallbackDirsPsr4 = array_merge(
|
||||
$this->fallbackDirsPsr4,
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
||||
// Register directories for a new namespace.
|
||||
$length = strlen($prefix);
|
||||
if ('\\' !== $prefix[$length - 1]) {
|
||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||
}
|
||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||
} elseif ($prepend) {
|
||||
// Prepend directories for an already registered namespace.
|
||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||
(array) $paths,
|
||||
$this->prefixDirsPsr4[$prefix]
|
||||
);
|
||||
} else {
|
||||
// Append directories for an already registered namespace.
|
||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||
$this->prefixDirsPsr4[$prefix],
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-0 directories for a given prefix,
|
||||
* replacing any others previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param string[]|string $paths The PSR-0 base directories
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function set($prefix, $paths)
|
||||
{
|
||||
if (!$prefix) {
|
||||
$this->fallbackDirsPsr0 = (array) $paths;
|
||||
} else {
|
||||
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-4 directories for a given namespace,
|
||||
* replacing any others previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param string[]|string $paths The PSR-4 base directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setPsr4($prefix, $paths)
|
||||
{
|
||||
if (!$prefix) {
|
||||
$this->fallbackDirsPsr4 = (array) $paths;
|
||||
} else {
|
||||
$length = strlen($prefix);
|
||||
if ('\\' !== $prefix[$length - 1]) {
|
||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||
}
|
||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns on searching the include path for class files.
|
||||
*
|
||||
* @param bool $useIncludePath
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUseIncludePath($useIncludePath)
|
||||
{
|
||||
$this->useIncludePath = $useIncludePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be used to check if the autoloader uses the include path to check
|
||||
* for classes.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getUseIncludePath()
|
||||
{
|
||||
return $this->useIncludePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns off searching the prefix and fallback directories for classes
|
||||
* that have not been registered with the class map.
|
||||
*
|
||||
* @param bool $classMapAuthoritative
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||
{
|
||||
$this->classMapAuthoritative = $classMapAuthoritative;
|
||||
}
|
||||
|
||||
/**
|
||||
* Should class lookup fail if not found in the current class map?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isClassMapAuthoritative()
|
||||
{
|
||||
return $this->classMapAuthoritative;
|
||||
}
|
||||
|
||||
/**
|
||||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||
*
|
||||
* @param string|null $apcuPrefix
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setApcuPrefix($apcuPrefix)
|
||||
{
|
||||
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The APCu prefix in use, or null if APCu caching is not enabled.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getApcuPrefix()
|
||||
{
|
||||
return $this->apcuPrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers this instance as an autoloader.
|
||||
*
|
||||
* @param bool $prepend Whether to prepend the autoloader or not
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register($prepend = false)
|
||||
{
|
||||
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||
|
||||
if (null === $this->vendorDir) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($prepend) {
|
||||
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
||||
} else {
|
||||
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||
self::$registeredLoaders[$this->vendorDir] = $this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregisters this instance as an autoloader.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function unregister()
|
||||
{
|
||||
spl_autoload_unregister(array($this, 'loadClass'));
|
||||
|
||||
if (null !== $this->vendorDir) {
|
||||
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the given class or interface.
|
||||
*
|
||||
* @param string $class The name of the class
|
||||
* @return true|null True if loaded, null otherwise
|
||||
*/
|
||||
public function loadClass($class)
|
||||
{
|
||||
if ($file = $this->findFile($class)) {
|
||||
includeFile($file);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the path to the file where the class is defined.
|
||||
*
|
||||
* @param string $class The name of the class
|
||||
*
|
||||
* @return string|false The path if found, false otherwise
|
||||
*/
|
||||
public function findFile($class)
|
||||
{
|
||||
// class map lookup
|
||||
if (isset($this->classMap[$class])) {
|
||||
return $this->classMap[$class];
|
||||
}
|
||||
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
||||
return false;
|
||||
}
|
||||
if (null !== $this->apcuPrefix) {
|
||||
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
||||
if ($hit) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
$file = $this->findFileWithExtension($class, '.php');
|
||||
|
||||
// Search for Hack files if we are running on HHVM
|
||||
if (false === $file && defined('HHVM_VERSION')) {
|
||||
$file = $this->findFileWithExtension($class, '.hh');
|
||||
}
|
||||
|
||||
if (null !== $this->apcuPrefix) {
|
||||
apcu_add($this->apcuPrefix.$class, $file);
|
||||
}
|
||||
|
||||
if (false === $file) {
|
||||
// Remember that this class does not exist.
|
||||
$this->missingClasses[$class] = true;
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the currently registered loaders indexed by their corresponding vendor directories.
|
||||
*
|
||||
* @return self[]
|
||||
*/
|
||||
public static function getRegisteredLoaders()
|
||||
{
|
||||
return self::$registeredLoaders;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $class
|
||||
* @param string $ext
|
||||
* @return string|false
|
||||
*/
|
||||
private function findFileWithExtension($class, $ext)
|
||||
{
|
||||
// PSR-4 lookup
|
||||
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
||||
|
||||
$first = $class[0];
|
||||
if (isset($this->prefixLengthsPsr4[$first])) {
|
||||
$subPath = $class;
|
||||
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
||||
$subPath = substr($subPath, 0, $lastPos);
|
||||
$search = $subPath . '\\';
|
||||
if (isset($this->prefixDirsPsr4[$search])) {
|
||||
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
||||
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
||||
if (file_exists($file = $dir . $pathEnd)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-4 fallback dirs
|
||||
foreach ($this->fallbackDirsPsr4 as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 lookup
|
||||
if (false !== $pos = strrpos($class, '\\')) {
|
||||
// namespaced class name
|
||||
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
||||
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
||||
} else {
|
||||
// PEAR-like class name
|
||||
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
||||
}
|
||||
|
||||
if (isset($this->prefixesPsr0[$first])) {
|
||||
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
||||
if (0 === strpos($class, $prefix)) {
|
||||
foreach ($dirs as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 fallback dirs
|
||||
foreach ($this->fallbackDirsPsr0 as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 include paths.
|
||||
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope isolated include.
|
||||
*
|
||||
* Prevents access to $this/self from included files.
|
||||
*
|
||||
* @param string $file
|
||||
* @return void
|
||||
* @private
|
||||
*/
|
||||
function includeFile($file)
|
||||
{
|
||||
include $file;
|
||||
}
|
||||
350
datamodels/2.x/itop-oauth-client/vendor/composer/InstalledVersions.php
vendored
Normal file
350
datamodels/2.x/itop-oauth-client/vendor/composer/InstalledVersions.php
vendored
Normal file
@@ -0,0 +1,350 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer;
|
||||
|
||||
use Composer\Autoload\ClassLoader;
|
||||
use Composer\Semver\VersionParser;
|
||||
|
||||
/**
|
||||
* This class is copied in every Composer installed project and available to all
|
||||
*
|
||||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
||||
*
|
||||
* To require its presence, you can require `composer-runtime-api ^2.0`
|
||||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
private static $canGetVendors;
|
||||
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
||||
*/
|
||||
private static $installedByVendor = array();
|
||||
|
||||
/**
|
||||
* Returns a list of all package names which are present, either by being installed, replaced or provided
|
||||
*
|
||||
* @return string[]
|
||||
* @psalm-return list<string>
|
||||
*/
|
||||
public static function getInstalledPackages()
|
||||
{
|
||||
$packages = array();
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
$packages[] = array_keys($installed['versions']);
|
||||
}
|
||||
|
||||
if (1 === \count($packages)) {
|
||||
return $packages[0];
|
||||
}
|
||||
|
||||
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all package names with a specific type e.g. 'library'
|
||||
*
|
||||
* @param string $type
|
||||
* @return string[]
|
||||
* @psalm-return list<string>
|
||||
*/
|
||||
public static function getInstalledPackagesByType($type)
|
||||
{
|
||||
$packagesByType = array();
|
||||
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
foreach ($installed['versions'] as $name => $package) {
|
||||
if (isset($package['type']) && $package['type'] === $type) {
|
||||
$packagesByType[] = $name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $packagesByType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the given package is installed
|
||||
*
|
||||
* This also returns true if the package name is provided or replaced by another package
|
||||
*
|
||||
* @param string $packageName
|
||||
* @param bool $includeDevRequirements
|
||||
* @return bool
|
||||
*/
|
||||
public static function isInstalled($packageName, $includeDevRequirements = true)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (isset($installed['versions'][$packageName])) {
|
||||
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the given package satisfies a version constraint
|
||||
*
|
||||
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
|
||||
*
|
||||
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
|
||||
*
|
||||
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
|
||||
* @param string $packageName
|
||||
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
|
||||
* @return bool
|
||||
*/
|
||||
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
||||
{
|
||||
$constraint = $parser->parseConstraints($constraint);
|
||||
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
||||
|
||||
return $provided->matches($constraint);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a version constraint representing all the range(s) which are installed for a given package
|
||||
*
|
||||
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
|
||||
* whether a given version of a package is installed, and not just whether it exists
|
||||
*
|
||||
* @param string $packageName
|
||||
* @return string Version constraint usable with composer/semver
|
||||
*/
|
||||
public static function getVersionRanges($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$ranges = array();
|
||||
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
||||
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
||||
}
|
||||
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
||||
}
|
||||
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
||||
}
|
||||
|
||||
return implode(' || ', $ranges);
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
||||
*/
|
||||
public static function getVersion($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isset($installed['versions'][$packageName]['version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $installed['versions'][$packageName]['version'];
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
||||
*/
|
||||
public static function getPrettyVersion($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
|
||||
*/
|
||||
public static function getReference($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isset($installed['versions'][$packageName]['reference'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $installed['versions'][$packageName]['reference'];
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
|
||||
*/
|
||||
public static function getInstallPath($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
|
||||
*/
|
||||
public static function getRootPackage()
|
||||
{
|
||||
$installed = self::getInstalled();
|
||||
|
||||
return $installed[0]['root'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the raw installed.php data for custom implementations
|
||||
*
|
||||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
||||
* @return array[]
|
||||
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
|
||||
*/
|
||||
public static function getRawData()
|
||||
{
|
||||
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
|
||||
|
||||
if (null === self::$installed) {
|
||||
// only require the installed.php file if this file is loaded from its dumped location,
|
||||
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||
self::$installed = include __DIR__ . '/installed.php';
|
||||
} else {
|
||||
self::$installed = array();
|
||||
}
|
||||
}
|
||||
|
||||
return self::$installed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
||||
*
|
||||
* @return array[]
|
||||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
||||
*/
|
||||
public static function getAllRawData()
|
||||
{
|
||||
return self::getInstalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Lets you reload the static array from another file
|
||||
*
|
||||
* This is only useful for complex integrations in which a project needs to use
|
||||
* this class but then also needs to execute another project's autoloader in process,
|
||||
* and wants to ensure both projects have access to their version of installed.php.
|
||||
*
|
||||
* A typical case would be PHPUnit, where it would need to make sure it reads all
|
||||
* the data it needs from this class, then call reload() with
|
||||
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
|
||||
* the project in which it runs can then also use this class safely, without
|
||||
* interference between PHPUnit's dependencies and the project's dependencies.
|
||||
*
|
||||
* @param array[] $data A vendor/composer/installed.php data set
|
||||
* @return void
|
||||
*
|
||||
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
|
||||
*/
|
||||
public static function reload($data)
|
||||
{
|
||||
self::$installed = $data;
|
||||
self::$installedByVendor = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
|
||||
*/
|
||||
private static function getInstalled()
|
||||
{
|
||||
if (null === self::$canGetVendors) {
|
||||
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
||||
}
|
||||
|
||||
$installed = array();
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
|
||||
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||
self::$installed = $installed[count($installed) - 1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (null === self::$installed) {
|
||||
// only require the installed.php file if this file is loaded from its dumped location,
|
||||
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||
self::$installed = require __DIR__ . '/installed.php';
|
||||
} else {
|
||||
self::$installed = array();
|
||||
}
|
||||
}
|
||||
$installed[] = self::$installed;
|
||||
|
||||
return $installed;
|
||||
}
|
||||
}
|
||||
21
datamodels/2.x/itop-oauth-client/vendor/composer/LICENSE
vendored
Normal file
21
datamodels/2.x/itop-oauth-client/vendor/composer/LICENSE
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
Copyright (c) Nils Adermann, Jordi Boggiano
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished
|
||||
to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
13
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_classmap.php
vendored
Normal file
13
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_classmap.php
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
// autoload_classmap.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Combodo\\iTop\\OAuthClient\\Controller\\AjaxOauthClientController' => $baseDir . '/src/Controller/AjaxOauthClientController.php',
|
||||
'Combodo\\iTop\\OAuthClient\\Controller\\OAuthClientController' => $baseDir . '/src/Controller/OAuthClientController.php',
|
||||
'Combodo\\iTop\\OAuthClient\\Service\\PopupMenuExtension' => $baseDir . '/src/Service/PopupMenuExtension.php',
|
||||
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
||||
);
|
||||
9
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_namespaces.php
vendored
Normal file
9
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_namespaces.php
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// autoload_namespaces.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
);
|
||||
10
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_psr4.php
vendored
Normal file
10
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_psr4.php
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
// autoload_psr4.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Combodo\\iTop\\OAuthClient\\' => array($baseDir . '/src'),
|
||||
);
|
||||
46
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_real.php
vendored
Normal file
46
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_real.php
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInitd52424b43ff18219f2ec935428aff074
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
public static function loadClassLoader($class)
|
||||
{
|
||||
if ('Composer\Autoload\ClassLoader' === $class) {
|
||||
require __DIR__ . '/ClassLoader.php';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Composer\Autoload\ClassLoader
|
||||
*/
|
||||
public static function getLoader()
|
||||
{
|
||||
if (null !== self::$loader) {
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInitd52424b43ff18219f2ec935428aff074', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInitd52424b43ff18219f2ec935428aff074', 'loadClassLoader'));
|
||||
|
||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||
if ($useStaticLoader) {
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInitd52424b43ff18219f2ec935428aff074::getInitializer($loader));
|
||||
} else {
|
||||
$classMap = require __DIR__ . '/autoload_classmap.php';
|
||||
if ($classMap) {
|
||||
$loader->addClassMap($classMap);
|
||||
}
|
||||
}
|
||||
|
||||
$loader->setClassMapAuthoritative(true);
|
||||
$loader->register(true);
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
||||
39
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_static.php
vendored
Normal file
39
datamodels/2.x/itop-oauth-client/vendor/composer/autoload_static.php
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
// autoload_static.php @generated by Composer
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInitd52424b43ff18219f2ec935428aff074
|
||||
{
|
||||
public static $prefixLengthsPsr4 = array (
|
||||
'C' =>
|
||||
array (
|
||||
'Combodo\\iTop\\OAuthClient\\' => 25,
|
||||
),
|
||||
);
|
||||
|
||||
public static $prefixDirsPsr4 = array (
|
||||
'Combodo\\iTop\\OAuthClient\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/../..' . '/src',
|
||||
),
|
||||
);
|
||||
|
||||
public static $classMap = array (
|
||||
'Combodo\\iTop\\OAuthClient\\Controller\\AjaxOauthClientController' => __DIR__ . '/../..' . '/src/Controller/AjaxOauthClientController.php',
|
||||
'Combodo\\iTop\\OAuthClient\\Controller\\OAuthClientController' => __DIR__ . '/../..' . '/src/Controller/OAuthClientController.php',
|
||||
'Combodo\\iTop\\OAuthClient\\Service\\PopupMenuExtension' => __DIR__ . '/../..' . '/src/Service/PopupMenuExtension.php',
|
||||
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
||||
);
|
||||
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInitd52424b43ff18219f2ec935428aff074::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInitd52424b43ff18219f2ec935428aff074::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInitd52424b43ff18219f2ec935428aff074::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
}
|
||||
5
datamodels/2.x/itop-oauth-client/vendor/composer/installed.json
vendored
Normal file
5
datamodels/2.x/itop-oauth-client/vendor/composer/installed.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"packages": [],
|
||||
"dev": true,
|
||||
"dev-package-names": []
|
||||
}
|
||||
23
datamodels/2.x/itop-oauth-client/vendor/composer/installed.php
vendored
Normal file
23
datamodels/2.x/itop-oauth-client/vendor/composer/installed.php
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php return array(
|
||||
'root' => array(
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'type' => 'itop-extension',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'reference' => '1135896b3d084aa9df778bfbb724b7e992534989',
|
||||
'name' => 'combodo/itop-oauth-client',
|
||||
'dev' => true,
|
||||
),
|
||||
'versions' => array(
|
||||
'combodo/itop-oauth-client' => array(
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'type' => 'itop-extension',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'reference' => '1135896b3d084aa9df778bfbb724b7e992534989',
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Menu:CreateMailbox' => 'Create a mailbox...~~',
|
||||
'Menu:OAuthClient' => 'OAuth Client~~',
|
||||
'Menu:OAuthClient+' => '~~',
|
||||
'Menu:GenerateTokens' => 'Generate access tokens...~~',
|
||||
'Menu:RegenerateTokens' => 'Regenerate access tokens...~~',
|
||||
|
||||
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
|
||||
|
||||
'itop-oauth-client:UsedForSMTP' => 'This OAuth client is used for SMTP~~',
|
||||
'itop-oauth-client:TestSMTP' => 'Email send test~~',
|
||||
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s~~',
|
||||
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
|
||||
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
|
||||
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClient
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:OAuthClient' => 'Oauth Client~~',
|
||||
'Class:OAuthClient/Attribute:provider' => 'Provider~~',
|
||||
'Class:OAuthClient/Attribute:provider+' => '~~',
|
||||
'Class:OAuthClient/Attribute:name' => 'Login~~',
|
||||
'Class:OAuthClient/Attribute:name+' => '~~',
|
||||
'Class:OAuthClient/Attribute:scope' => 'Scope~~',
|
||||
'Class:OAuthClient/Attribute:scope+' => '~~',
|
||||
'Class:OAuthClient/Attribute:description' => 'Description~~',
|
||||
'Class:OAuthClient/Attribute:description+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_id' => 'Client id~~',
|
||||
'Class:OAuthClient/Attribute:client_id+' => '~~',
|
||||
'Class:OAuthClient/Attribute:client_secret' => 'Client secret~~',
|
||||
'Class:OAuthClient/Attribute:client_secret+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token' => 'Refresh token~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration' => 'Refresh token expiration~~',
|
||||
'Class:OAuthClient/Attribute:refresh_token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token' => 'Access token~~',
|
||||
'Class:OAuthClient/Attribute:token+' => '~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration' => 'Access token expiration~~',
|
||||
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url' => 'Redirect url~~',
|
||||
'Class:OAuthClient/Attribute:redirect_url+' => '~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list' => 'Mailbox list~~',
|
||||
'Class:OAuthClient/Attribute:mailbox_list+' => '~~',
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientAzure
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
|
||||
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
|
||||
|
||||
]);
|
||||
|
||||
//
|
||||
// Class: OAuthClientGoogle
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
||||
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
|
||||
'Class:OAuthClientGoogle/Name' => '%1$s (%2$s)~~',
|
||||
]);
|
||||
|
||||
@@ -33,28 +33,28 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Portal:Button:Delete' => '删除',
|
||||
'Portal:EnvironmentBanner:Title' => '您目前处于 <strong>%1$s</strong> 模式',
|
||||
'Portal:EnvironmentBanner:GoToProduction' => '回到产品模式',
|
||||
'Error:HTTP:400' => 'Bad request~~',
|
||||
'Error:HTTP:401' => '认证',
|
||||
'Error:HTTP:400' => '请求错误',
|
||||
'Error:HTTP:401' => '认证错误',
|
||||
'Error:HTTP:404' => '页面找不到',
|
||||
'Error:HTTP:500' => 'Oops! 发生了一个错误.',
|
||||
'Error:HTTP:GetHelp' => '如果问题仍然存在,请联系管理员.',
|
||||
'Error:XHR:Fail' => '无法加载数据, 请联系管理员',
|
||||
'Portal:ErrorUserLoggedOut' => '您已退出,请重新登录.',
|
||||
'Portal:ErrorUserLoggedOut' => '您已退出,请重新登录.',
|
||||
'Portal:Datatables:Language:Processing' => '请稍后...',
|
||||
'Portal:Datatables:Language:Search' => '过滤器:',
|
||||
'Portal:Datatables:Language:LengthMenu' => '每页显示 _MENU_ 项',
|
||||
'Portal:Datatables:Language:ZeroRecords' => '没有结果',
|
||||
'Portal:Datatables:Language:Info' => '第 _PAGE_ 页,共 _PAGES_ 页',
|
||||
'Portal:Datatables:Language:InfoEmpty' => '没有信息',
|
||||
'Portal:Datatables:Language:InfoFiltered' => 'filtered out of _MAX_ items',
|
||||
'Portal:Datatables:Language:InfoFiltered' => '最多过滤 _MAX_ 项',
|
||||
'Portal:Datatables:Language:EmptyTable' => '表格中没有数据',
|
||||
'Portal:Datatables:Language:DisplayLength:All' => '全部',
|
||||
'Portal:Datatables:Language:Paginate:First' => '首页',
|
||||
'Portal:Datatables:Language:Paginate:Previous' => '上一页',
|
||||
'Portal:Datatables:Language:Paginate:Next' => '下一页',
|
||||
'Portal:Datatables:Language:Paginate:Last' => '尾页',
|
||||
'Portal:Datatables:Language:Sort:Ascending' => '升序排序',
|
||||
'Portal:Datatables:Language:Sort:Descending' => '降序排序',
|
||||
'Portal:Datatables:Language:Sort:Ascending' => '升序',
|
||||
'Portal:Datatables:Language:Sort:Descending' => '降序',
|
||||
'Portal:Autocomplete:NoResult' => '没有数据',
|
||||
'Portal:Attachments:DropZone:Message' => '把文件添加为附件',
|
||||
'Portal:File:None' => '没有文件',
|
||||
@@ -110,7 +110,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Brick:Portal:Manage:Name' => '管理项目',
|
||||
'Brick:Portal:Manage:Table:NoData' => '没有项目.',
|
||||
'Brick:Portal:Manage:Table:ItemActions' => 'Actions',
|
||||
'Brick:Portal:Manage:Table:ItemActions' => '操作',
|
||||
'Brick:Portal:Manage:DisplayMode:list' => '列表',
|
||||
'Brick:Portal:Manage:DisplayMode:pie-chart' => '饼图',
|
||||
'Brick:Portal:Manage:DisplayMode:bar-chart' => '条形图',
|
||||
@@ -135,8 +135,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Brick:Portal:Object:Form:Message:ObjectSaved' => '已保存 %1$s~~',
|
||||
'Brick:Portal:Object:Search:Regular:Title' => '选择 %1$s (%2$s)',
|
||||
'Brick:Portal:Object:Search:Hierarchy:Title' => '选择 %1$s (%2$s)',
|
||||
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s~~',
|
||||
'Brick:Portal:Object:Copy:Tooltip' => 'Copy object link~~',
|
||||
'Brick:Portal:Object:Copy:TextToCopy' => '%1$s: %2$s',
|
||||
'Brick:Portal:Object:Copy:Tooltip' => '复制对象链接',
|
||||
'Brick:Portal:Object:Copy:CopiedTooltip' => '已复制'
|
||||
));
|
||||
|
||||
|
||||
@@ -14,20 +14,18 @@ set_time_limit(0);
|
||||
|
||||
if (!defined('APPROOT'))
|
||||
{
|
||||
if (file_exists(__DIR__.'/../../../../approot.inc.php'))
|
||||
{
|
||||
require_once __DIR__.'/../../../../approot.inc.php'; // When in env-xxxx folder
|
||||
}
|
||||
else
|
||||
{
|
||||
require_once __DIR__.'/../../../../../approot.inc.php'; // When in datamodels/x.x folder
|
||||
}
|
||||
if (file_exists(__DIR__.'/../../../../approot.inc.php')) {
|
||||
require_once __DIR__ . '/../../../../approot.inc.php'; // When in env-xxxx folder
|
||||
} else {
|
||||
require_once __DIR__ . '/../../../../../approot.inc.php'; // When in datamodels/x.x folder
|
||||
}
|
||||
}
|
||||
require_once APPROOT.'lib/autoload.php';
|
||||
require_once APPROOT . 'lib/autoload.php';
|
||||
|
||||
if (!class_exists(Application::class))
|
||||
{
|
||||
throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.');
|
||||
require_once APPROOT . 'application/startup.inc.php';
|
||||
|
||||
if (!class_exists(Application::class)) {
|
||||
throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.');
|
||||
}
|
||||
|
||||
// Remove --portal_id from CLI params to avoid SF CLI conflicts
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
// Disable PhpUnhandledExceptionInspection as the exception handling is made by the file including this one
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
|
||||
use Symfony\Component\Debug\Debug;
|
||||
use Symfony\Component\ErrorHandler\Debug;
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
|
||||
// Global autoloader (portal autoloader is already required through module.itop-portal-base.php)
|
||||
@@ -43,55 +43,43 @@ if (!defined('MODULESROOT'))
|
||||
|
||||
// Load cached env vars if the .env.local.php file exists
|
||||
// Run "composer dump-env prod" to create it (requires symfony/flex >=1.2)
|
||||
if (is_array($sEnv = @include dirname(__DIR__).'/.env.local.php'))
|
||||
{
|
||||
$_ENV += $sEnv;
|
||||
}
|
||||
elseif (!class_exists(Dotenv::class))
|
||||
{
|
||||
if (file_exists(dirname(__DIR__).'/.env.local.php')) {
|
||||
if (is_array($sEnv = @include dirname(__DIR__).'/.env.local.php')) {
|
||||
$_ENV += $sEnv;
|
||||
}
|
||||
} elseif (!class_exists(Dotenv::class)) {
|
||||
throw new RuntimeException('Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.');
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
$sPath = dirname(__DIR__).'/.env';
|
||||
$oDotenv = new Dotenv();
|
||||
$oDotenv->usePutenv();
|
||||
|
||||
// load all the .env files
|
||||
if (method_exists($oDotenv, 'loadEnv'))
|
||||
{
|
||||
if (method_exists($oDotenv, 'loadEnv')) {
|
||||
$oDotenv->loadEnv($sPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
// fallback code in case your Dotenv component is not 4.2 or higher (when loadEnv() was added)
|
||||
|
||||
if (file_exists($sPath) || !file_exists($sPathDist = "$sPath.dist"))
|
||||
{
|
||||
if (file_exists($sPath) || !file_exists($sPathDist = "$sPath.dist")) {
|
||||
$oDotenv->load($sPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
$oDotenv->load($sPathDist);
|
||||
}
|
||||
|
||||
if (null === $sEnv = (isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : null)))
|
||||
{
|
||||
if (null === $sEnv = (isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : null))) {
|
||||
$oDotenv->populate(array('APP_ENV' => $sEnv = 'prod'));
|
||||
}
|
||||
|
||||
if ('test' !== $sEnv && file_exists($sPathDist = "$sPath.local"))
|
||||
{
|
||||
if ('test' !== $sEnv && file_exists($sPathDist = "$sPath.local")) {
|
||||
$oDotenv->load($sPathDist);
|
||||
$sEnv = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : (isset($_ENV['APP_ENV']) ? $_ENV['APP_ENV'] : $sEnv);
|
||||
}
|
||||
|
||||
if (file_exists($sPathDist = "$sPath.$sEnv"))
|
||||
{
|
||||
if (file_exists($sPathDist = "$sPath.$sEnv")) {
|
||||
$oDotenv->load($sPathDist);
|
||||
}
|
||||
|
||||
if (file_exists($sPathDist = "$sPath.$sEnv.local"))
|
||||
{
|
||||
if (file_exists($sPathDist = "$sPath.$sEnv.local")) {
|
||||
$oDotenv->load($sPathDist);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
framework:
|
||||
cache:
|
||||
# Put the unique name of your app here: the prefix seed
|
||||
# is used to compute stable namespaces for cache keys.
|
||||
# Unique name of your app: used to compute stable namespaces for cache keys.
|
||||
#prefix_seed: your_vendor_name/app_name
|
||||
|
||||
# The app cache caches to the filesystem by default.
|
||||
# The "app" cache stores to the filesystem by default.
|
||||
# The data in this cache should persist between deploys.
|
||||
# Other options include:
|
||||
|
||||
# Redis
|
||||
@@ -16,4 +16,4 @@ framework:
|
||||
|
||||
# Namespaced pools use the above "app" backend by default
|
||||
#pools:
|
||||
#my.dedicated.cache: ~
|
||||
#my.dedicated.cache: null
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
framework:
|
||||
router:
|
||||
strict_requirements: true
|
||||
@@ -1,6 +0,0 @@
|
||||
web_profiler:
|
||||
toolbar: true
|
||||
intercept_redirects: false
|
||||
|
||||
framework:
|
||||
profiler: { only_exceptions: false }
|
||||
@@ -7,9 +7,25 @@ framework:
|
||||
# Enables session support. Note that the session will ONLY be started if you read or write from it.
|
||||
# Remove or comment this section to explicitly disable session support.
|
||||
session:
|
||||
handler_id: ~
|
||||
handler_id: null
|
||||
cookie_secure: auto
|
||||
cookie_samesite: lax
|
||||
storage_factory_id: session.storage.factory.native
|
||||
|
||||
#esi: true
|
||||
#fragments: true
|
||||
php_errors:
|
||||
log: true
|
||||
|
||||
when@test:
|
||||
framework:
|
||||
test: true
|
||||
profiler: { collect: false }
|
||||
router: { strict_requirements: true}
|
||||
session:
|
||||
storage_factory_id: session.storage.factory.mock_file
|
||||
|
||||
when@dev:
|
||||
framework:
|
||||
profiler: { only_exceptions: false }
|
||||
router: { strict_requirements: true}
|
||||
@@ -1,3 +1,17 @@
|
||||
framework:
|
||||
router:
|
||||
strict_requirements: ~
|
||||
utf8: true
|
||||
|
||||
# Configure how to generate URLs in non-HTTP contexts, such as CLI commands.
|
||||
# See https://symfony.com/doc/current/routing.html#generating-urls-in-commands
|
||||
#default_uri: http://localhost
|
||||
|
||||
when@prod:
|
||||
framework:
|
||||
router:
|
||||
strict_requirements: null
|
||||
|
||||
when@dev:
|
||||
framework:
|
||||
router:
|
||||
strict_requirements: true
|
||||
@@ -1,4 +0,0 @@
|
||||
framework:
|
||||
test: true
|
||||
session:
|
||||
storage_id: session.storage.mock_file
|
||||
@@ -1,3 +0,0 @@
|
||||
framework:
|
||||
router:
|
||||
strict_requirements: true
|
||||
@@ -1,6 +0,0 @@
|
||||
web_profiler:
|
||||
toolbar: false
|
||||
intercept_redirects: false
|
||||
|
||||
framework:
|
||||
profiler: { collect: false }
|
||||
@@ -2,3 +2,7 @@ twig:
|
||||
default_path: '%combodo.modules.absolute_path%'
|
||||
debug: '%kernel.debug%'
|
||||
strict_variables: '%kernel.debug%'
|
||||
|
||||
when@test:
|
||||
twig:
|
||||
strict_variables: true
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
when@dev:
|
||||
web_profiler:
|
||||
toolbar: true
|
||||
intercept_redirects: false
|
||||
|
||||
when@test:
|
||||
web_profiler:
|
||||
toolbar: false
|
||||
intercept_redirects: false
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
_errors:
|
||||
resource: '@TwigBundle/Resources/config/routing/errors.xml'
|
||||
prefix: /_error
|
||||
@@ -1,7 +0,0 @@
|
||||
web_profiler_wdt:
|
||||
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
|
||||
prefix: /_wdt
|
||||
|
||||
web_profiler_profiler:
|
||||
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
|
||||
prefix: /_profiler
|
||||
@@ -0,0 +1,4 @@
|
||||
when@dev:
|
||||
_errors:
|
||||
resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
|
||||
prefix: /_error
|
||||
@@ -0,0 +1,8 @@
|
||||
when@dev:
|
||||
web_profiler_wdt:
|
||||
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
|
||||
prefix: /_wdt
|
||||
|
||||
web_profiler_profiler:
|
||||
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
|
||||
prefix: /_profiler
|
||||
@@ -24,8 +24,6 @@ imports:
|
||||
# Put parameters here that don't need to change on each machine where the app is deployed
|
||||
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
|
||||
parameters:
|
||||
# Replace default url generator service
|
||||
router.options.generator_base_class: Combodo\iTop\Portal\Routing\UrlGenerator
|
||||
|
||||
# Used in templates
|
||||
combodo.current_environment: '%env(string:COMBODO_CURRENT_ENVIRONMENT)%'
|
||||
@@ -100,17 +98,19 @@ services:
|
||||
- '@Combodo\iTop\Portal\Twig\AppVariable.inner'
|
||||
- '@service_container'
|
||||
|
||||
Combodo\iTop\Portal\Routing\UrlGenerator:
|
||||
decorates: 'router'
|
||||
arguments: ['@Combodo\iTop\Portal\Routing\UrlGenerator.inner']
|
||||
|
||||
# Standard services
|
||||
combodo.current_contact.photo_url:
|
||||
public: true
|
||||
class: Combodo\iTop\Portal\VariableAccessor\CombodoCurrentContactPhotoUrl
|
||||
arguments: ['@combodo.current_user', '@service_container']
|
||||
# Note: This service is initialized with a UserLocal object as it needs a class that can be instantiated.
|
||||
# Anyway, it will be replaced with the real class by UserProvider in onKernelRequestEvent.
|
||||
# Note: Services relying on this one should use \User in their signature and not \UserLocal.
|
||||
arguments: ['@Combodo\iTop\Portal\EventListener\UserProvider', '@service_container']
|
||||
|
||||
combodo.current_user:
|
||||
alias: Combodo\iTop\Portal\Twig\CurrentUserAccessor
|
||||
public: true
|
||||
class: UserLocal
|
||||
|
||||
# Aliases
|
||||
brick_collection:
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
namespace Combodo\iTop\Portal\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use \Symfony\Bundle\FrameworkBundle\Controller\AbstractController as SymfonyAbstractController;
|
||||
|
||||
/**
|
||||
* Class AbstractController
|
||||
@@ -29,8 +29,37 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
* @author Guillaume Lajarige <guillaume.lajarige@combodo.com>
|
||||
* @since 2.3.0
|
||||
*/
|
||||
abstract class AbstractController extends Controller
|
||||
abstract class AbstractController extends SymfonyAbstractController
|
||||
{
|
||||
/**
|
||||
* Return services needed inside controllers.
|
||||
* Allow access to service via $controller->get(`service_name`).
|
||||
*
|
||||
* Improvement: Use service dependency injection
|
||||
*
|
||||
* @return array array of service injected to controllers
|
||||
* @since 3.1.0
|
||||
*
|
||||
*/
|
||||
public static function getSubscribedServices(): array
|
||||
{
|
||||
return array_merge(parent::getSubscribedServices(), [
|
||||
'brick_collection' => 'Combodo\iTop\Portal\Brick\BrickCollection',
|
||||
'request_manipulator' => 'Combodo\iTop\Portal\Helper\RequestManipulatorHelper',
|
||||
'scope_validator' => 'Combodo\iTop\Portal\Helper\ScopeValidatorHelper',
|
||||
'security_helper' => 'Combodo\iTop\Portal\Helper\SecurityHelper',
|
||||
'context_manipulator' => 'Combodo\iTop\Portal\Helper\ContextManipulatorHelper',
|
||||
'navigation_rule_helper' => 'Combodo\iTop\Portal\Helper\NavigationRuleHelper',
|
||||
'ui_extensions_helper' => 'Combodo\iTop\Portal\Helper\UIExtensionsHelper',
|
||||
'lifecycle_validator' => 'Combodo\iTop\Portal\Helper\LifecycleValidatorHelper',
|
||||
'url_generator' => 'router',
|
||||
'object_form_handler' => 'Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper',
|
||||
'browse_brick' => 'Combodo\iTop\Portal\Helper\BrowseBrickHelper',
|
||||
'brick_controller_helper' => 'Combodo\iTop\Portal\Helper\BrickControllerHelper',
|
||||
'session_message_helper' => 'Combodo\iTop\Portal\Helper\SessionMessageHelper',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlike {@see \Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait::redirectToRoute()}, this method directly calls the route controller without creating a redirection client side
|
||||
*
|
||||
|
||||
@@ -40,11 +40,11 @@ class AggregatePageBrickController extends BrickController
|
||||
{
|
||||
/**
|
||||
* @param \Symfony\Component\HttpFoundation\Request $oRequest
|
||||
* @param string $sBrickId
|
||||
* @param string $sBrickId
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*
|
||||
* @throws \Combodo\iTop\Portal\Brick\BrickNotFoundException
|
||||
* @throws BrickNotFoundException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function DisplayAction(Request $oRequest, $sBrickId)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
namespace Combodo\iTop\Portal\EventListener;
|
||||
|
||||
use ApplicationContext;
|
||||
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
||||
use Symfony\Component\HttpKernel\Event\RequestEvent;
|
||||
use UserRights;
|
||||
use utils;
|
||||
|
||||
@@ -34,17 +34,16 @@ use utils;
|
||||
class ApplicationContextSetPluginPropertyClass
|
||||
{
|
||||
/**
|
||||
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $oGetResponseEvent
|
||||
* @param RequestEvent $oRequestEvent
|
||||
*/
|
||||
public function onKernelRequest(GetResponseEvent $oGetResponseEvent)
|
||||
{
|
||||
// Enable archived data
|
||||
utils::InitArchiveMode();
|
||||
|
||||
// Enabling datalocalizer if needed
|
||||
if (!defined('DISABLE_DATA_LOCALIZER_PORTAL'))
|
||||
{
|
||||
ApplicationContext::SetPluginProperty('QueryLocalizerPlugin', 'language_code', UserRights::GetUserLanguage());
|
||||
}
|
||||
}
|
||||
public function onKernelRequest(RequestEvent $oRequestEvent)
|
||||
{
|
||||
// Enable archived data
|
||||
utils::InitArchiveMode();
|
||||
|
||||
// Enabling datalocalizer if needed
|
||||
if (!defined('DISABLE_DATA_LOCALIZER_PORTAL')) {
|
||||
ApplicationContext::SetPluginProperty('QueryLocalizerPlugin', 'language_code', UserRights::GetUserLanguage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@
|
||||
namespace Combodo\iTop\Portal\EventListener;
|
||||
|
||||
use ApplicationContext;
|
||||
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
||||
use Symfony\Component\HttpKernel\Event\RequestEvent;
|
||||
|
||||
/**
|
||||
* Class ApplicationContextSetUrlMakerClass
|
||||
@@ -43,13 +43,12 @@ class ApplicationContextSetUrlMakerClass
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $oGetResponseEvent
|
||||
* @param RequestEvent $oRequestEvent
|
||||
*/
|
||||
public function onKernelRequest(GetResponseEvent $oGetResponseEvent)
|
||||
{
|
||||
if ($this->aCombodoPortalInstanceConf['properties']['urlmaker_class'] !== null)
|
||||
{
|
||||
ApplicationContext::SetUrlMakerClass($this->aCombodoPortalInstanceConf['properties']['urlmaker_class']);
|
||||
}
|
||||
}
|
||||
public function onKernelRequest(RequestEvent $oRequestEvent)
|
||||
{
|
||||
if ($this->aCombodoPortalInstanceConf['properties']['urlmaker_class'] !== null) {
|
||||
ApplicationContext::SetUrlMakerClass($this->aCombodoPortalInstanceConf['properties']['urlmaker_class']);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
namespace Combodo\iTop\Portal\EventListener;
|
||||
|
||||
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
||||
use Symfony\Component\HttpKernel\Event\RequestEvent;
|
||||
use utils;
|
||||
|
||||
/**
|
||||
@@ -47,19 +47,17 @@ class CssFromSassCompiler
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $oGetResponseEvent
|
||||
* @param RequestEvent $oRequestEvent
|
||||
*/
|
||||
public function onKernelRequest(GetResponseEvent $oGetResponseEvent)
|
||||
public function onKernelRequest(RequestEvent $oRequestEvent)
|
||||
{
|
||||
// Force compilation need only when by-passing cache to limit server load.
|
||||
if (isset($_SERVER['HTTP_CACHE_CONTROL']) && ($_SERVER['HTTP_CACHE_CONTROL'] !== 'no-cache'))
|
||||
{
|
||||
if (isset($_SERVER['HTTP_CACHE_CONTROL']) && ($_SERVER['HTTP_CACHE_CONTROL'] !== 'no-cache')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$aImportPaths = array($_ENV['COMBODO_PORTAL_BASE_ABSOLUTE_PATH'].'css/');
|
||||
foreach ($this->aCombodoPortalInstanceConf['properties']['themes'] as $sKey => $value)
|
||||
{
|
||||
foreach ($this->aCombodoPortalInstanceConf['properties']['themes'] as $sKey => $value) {
|
||||
if (!is_array($value))
|
||||
{
|
||||
utils::GetCSSFromSASS('env-'.utils::GetCurrentEnvironment().'/'.$value, $aImportPaths);
|
||||
|
||||
@@ -24,13 +24,12 @@ namespace Combodo\iTop\Portal\EventListener;
|
||||
|
||||
use Dict;
|
||||
use ExceptionLog;
|
||||
use IssueLog;
|
||||
use Symfony\Component\Debug\Exception\FlattenException;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Symfony\Component\ErrorHandler\Exception\FlattenException;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
|
||||
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
|
||||
|
||||
/**
|
||||
@@ -52,10 +51,10 @@ class ExceptionListener implements ContainerAwareInterface
|
||||
* @throws \Twig\Error\RuntimeError
|
||||
* @throws \Twig\Error\SyntaxError
|
||||
*/
|
||||
public function onKernelException(GetResponseForExceptionEvent $oEvent)
|
||||
public function onKernelException(ExceptionEvent $oEvent)
|
||||
{
|
||||
// Get the exception object from the received event
|
||||
$oException = $oEvent->getException();
|
||||
$oException = $oEvent->getThrowable();
|
||||
|
||||
// Prepare / format exception data
|
||||
if ($oException instanceof \MySQLException) {
|
||||
@@ -78,7 +77,7 @@ class ExceptionListener implements ContainerAwareInterface
|
||||
}
|
||||
|
||||
// Prepare flatten exception
|
||||
$oFlattenException = ($_SERVER['APP_DEBUG'] == 1) ? FlattenException::create($oException) : null;
|
||||
$oFlattenException = ($_SERVER['APP_DEBUG'] == 1) ? FlattenException::createFromThrowable($oException) : null;
|
||||
// Remove APPROOT from file paths if in production (SF context)
|
||||
if (!is_null($oFlattenException) && ($_SERVER['APP_ENV'] === 'prod'))
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@ use ModuleDesign;
|
||||
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
||||
use Symfony\Component\HttpKernel\Event\RequestEvent;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use UserRights;
|
||||
|
||||
@@ -44,12 +44,16 @@ class UserProvider implements ContainerAwareInterface
|
||||
private $sPortalId;
|
||||
/** @var \Symfony\Component\DependencyInjection\ContainerInterface $container */
|
||||
private $oContainer;
|
||||
/** @var \User $oUser */
|
||||
private $oUser;
|
||||
/** @var array $aAllowedPortals */
|
||||
private $aAllowedPortals;
|
||||
|
||||
/**
|
||||
* UserProvider constructor.
|
||||
*
|
||||
* @param \ModuleDesign $oModuleDesign
|
||||
* @param string $sPortalId
|
||||
* @param string $sPortalId
|
||||
*/
|
||||
public function __construct(ModuleDesign $oModuleDesign, $sPortalId)
|
||||
{
|
||||
@@ -58,11 +62,11 @@ class UserProvider implements ContainerAwareInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $oGetResponseEvent
|
||||
* @param RequestEvent $oRequestEvent
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function onKernelRequest(GetResponseEvent $oGetResponseEvent)
|
||||
public function onKernelRequest(RequestEvent $oRequestEvent)
|
||||
{
|
||||
// User pre-checks
|
||||
// Note: The following note and handling of the $iExitMethod were for the old login mechanism
|
||||
@@ -71,45 +75,62 @@ class UserProvider implements ContainerAwareInterface
|
||||
//
|
||||
// Note: At this point the Exception handler is not registered, so we can't use $oApp::abort() method, hence the die().
|
||||
// - Checking user rights and prompt if needed (401 HTTP code returned if XHR request)
|
||||
$iExitMethod = ($oGetResponseEvent->getRequest()->isXmlHttpRequest()) ? LoginWebPage::EXIT_RETURN : LoginWebPage::EXIT_PROMPT;
|
||||
$iExitMethod = ($oRequestEvent->getRequest()->isXmlHttpRequest()) ? LoginWebPage::EXIT_RETURN : LoginWebPage::EXIT_PROMPT;
|
||||
$iLogonRes = LoginWebPage::DoLoginEx($this->sPortalId, false, $iExitMethod);
|
||||
if( ($iExitMethod === LoginWebPage::EXIT_RETURN) && ($iLogonRes != 0) )
|
||||
{
|
||||
if( ($iExitMethod === LoginWebPage::EXIT_RETURN) && ($iLogonRes != 0) ) {
|
||||
die(Dict::S('Portal:ErrorUserLoggedOut'));
|
||||
}
|
||||
// - User must be associated with a Contact
|
||||
if (UserRights::GetContactId() == 0)
|
||||
{
|
||||
if (UserRights::GetContactId() == 0) {
|
||||
die(Dict::S('Portal:ErrorNoContactForThisUser'));
|
||||
}
|
||||
|
||||
// User
|
||||
$oUser = UserRights::GetUserObject();
|
||||
if ($oUser === null)
|
||||
{
|
||||
$this->oUser = UserRights::GetUserObject();
|
||||
if ($this->oUser === null) {
|
||||
throw new Exception('Could not load connected user.');
|
||||
}
|
||||
$this->oContainer->set('combodo.current_user', $oUser);
|
||||
|
||||
// Allowed portals
|
||||
$aAllowedPortals = UserRights::GetAllowedPortals();
|
||||
|
||||
// Checking that user is allowed this portal
|
||||
$bAllowed = false;
|
||||
foreach ($aAllowedPortals as $aAllowedPortal)
|
||||
{
|
||||
if ($aAllowedPortal['id'] === $this->sPortalId)
|
||||
{
|
||||
foreach ($aAllowedPortals as $aAllowedPortal) {
|
||||
if ($aAllowedPortal['id'] === $this->sPortalId) {
|
||||
$bAllowed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$bAllowed)
|
||||
{
|
||||
if (!$bAllowed) {
|
||||
throw new HttpException(Response::HTTP_NOT_FOUND);
|
||||
}
|
||||
/** @noinspection PhpParamsInspection It's an array and it's gonna stay that way */
|
||||
$this->oContainer->set('combodo.current_user.allowed_portals', $aAllowedPortals);
|
||||
|
||||
$this->aAllowedPortals = $aAllowedPortals;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current user.
|
||||
*
|
||||
* @return \User current user
|
||||
* @since 3.1.0
|
||||
*
|
||||
*/
|
||||
public function getCurrentUser()
|
||||
{
|
||||
return $this->oUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get allowed portals.
|
||||
*
|
||||
* @return array allowed portals
|
||||
* @since 3.1.0
|
||||
*
|
||||
*/
|
||||
public function getAllowedPortals()
|
||||
{
|
||||
return $this->aAllowedPortals;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -36,7 +36,8 @@ use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use Twig_Environment;
|
||||
use Twig\Environment;
|
||||
use Twig\Loader\ArrayLoader;
|
||||
use Twig_Loader_Array;
|
||||
use URLButtonItem;
|
||||
use UserRights;
|
||||
@@ -420,7 +421,7 @@ class ObjectFormHandlerHelper
|
||||
public function RenderFormFromTwig($sId, $sTwigString, $aData)
|
||||
{
|
||||
// Creating sandbox twig env. to load and test the custom form template
|
||||
$oTwig = new Twig_Environment(new Twig_Loader_Array(array($sId => $sTwigString)));
|
||||
$oTwig = new Environment(new ArrayLoader(array($sId => $sTwigString)));
|
||||
|
||||
// Manually registering filters and functions as we didn't find how to do it automatically
|
||||
$aFilters = $this->oAppExtension->getFilters();
|
||||
|
||||
@@ -83,9 +83,6 @@ class Kernel extends BaseKernel
|
||||
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader)
|
||||
{
|
||||
$container->addResource(new FileResource($this->getProjectDir().'/config/bundles.php'));
|
||||
// Feel free to remove the "container.autowiring.strict_mode" parameter
|
||||
// if you are using symfony/dependency-injection 4.0+ as it's the default behavior
|
||||
$container->setParameter('container.autowiring.strict_mode', true);
|
||||
$container->setParameter('container.dumper.inline_class_loader', true);
|
||||
$confDir = $this->getProjectDir().'/config';
|
||||
|
||||
|
||||
@@ -19,43 +19,72 @@
|
||||
|
||||
namespace Combodo\iTop\Portal\Routing;
|
||||
|
||||
use Symfony\Component\Routing\RequestContext;
|
||||
use Symfony\Component\Routing\RouterInterface;
|
||||
use utils;
|
||||
use Symfony\Component\Routing\Generator\UrlGenerator as BaseUrlGenerator;
|
||||
|
||||
/**
|
||||
* Class UrlGenerator
|
||||
*
|
||||
* @author Benjamin Dalsass <benjamin.dalsass@combodo.com>
|
||||
* @package Combodo\iTop\Portal\Routing
|
||||
* @since 2.7.0
|
||||
* @author Bruno Da Silva <bruno.dasilva@combodo.com>
|
||||
* @author Guillaume Lajarige <guillaume.lajarige@combodo.com>
|
||||
* @since 3.1.0
|
||||
*/
|
||||
class UrlGenerator extends BaseUrlGenerator
|
||||
class UrlGenerator implements RouterInterface
|
||||
{
|
||||
/** @noinspection PhpTooManyParametersInspection */
|
||||
/** @var \Symfony\Component\Routing\RouterInterface $router */
|
||||
private $router;
|
||||
|
||||
/**
|
||||
* Overloading of the parent function to add the $_REQUEST parameters to the url parameters.
|
||||
* This is used to keep additional parameters in the url, especially when portal is accessed from the /pages/exec.php
|
||||
* Constructor.
|
||||
*
|
||||
* Note: As of now, it only adds the exec_module/exec_page/portal_id/env_switch/debug parameters. Any other parameter will be ignored.
|
||||
*
|
||||
* @param $variables
|
||||
* @param $defaults
|
||||
* @param $requirements
|
||||
* @param $tokens
|
||||
* @param $parameters
|
||||
* @param $name
|
||||
* @param $referenceType
|
||||
* @param $hostTokens
|
||||
* @param array $requiredSchemes
|
||||
*
|
||||
* @return string
|
||||
* @param \Symfony\Component\Routing\RouterInterface $router
|
||||
*/
|
||||
protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, array $requiredSchemes = array())
|
||||
public function __construct(RouterInterface $router)
|
||||
{
|
||||
$this->router = $router;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH)
|
||||
{
|
||||
$parameters = $this->getExtraParams($parameters);
|
||||
|
||||
return parent::doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, $requiredSchemes);
|
||||
return $this->router->generate($name, $parameters, $referenceType);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setContext(RequestContext $context)
|
||||
{
|
||||
$this->router->setContext($context);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function getContext()
|
||||
{
|
||||
return $this->router->getContext();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function getRouteCollection()
|
||||
{
|
||||
return $this->router->getRouteCollection();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function match($pathinfo)
|
||||
{
|
||||
return $this->router->match($pathinfo);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -67,26 +96,22 @@ class UrlGenerator extends BaseUrlGenerator
|
||||
{
|
||||
$sExecModule = utils::ReadParam('exec_module', '', false, 'string');
|
||||
$sExecPage = utils::ReadParam('exec_page', '', false, 'string');
|
||||
if ($sExecModule !== '' && $sExecPage !== '')
|
||||
{
|
||||
if ($sExecModule !== '' && $sExecPage !== '') {
|
||||
$aParameters['exec_module'] = $sExecModule;
|
||||
$aParameters['exec_page'] = $sExecPage;
|
||||
}
|
||||
|
||||
// Optional parameters
|
||||
$sPortalId = utils::ReadParam('portal_id', '', false, 'string');
|
||||
if ($sPortalId !== '')
|
||||
{
|
||||
if ($sPortalId !== '') {
|
||||
$aParameters['portal_id'] = $sPortalId;
|
||||
}
|
||||
$sEnvSwitch = utils::ReadParam('env_switch', '', false, 'string');
|
||||
if ($sEnvSwitch !== '')
|
||||
{
|
||||
if ($sEnvSwitch !== '') {
|
||||
$aParameters['env_switch'] = $sEnvSwitch;
|
||||
}
|
||||
$sDebug = utils::ReadParam('debug', '', false, 'string');
|
||||
if ($sDebug !== '')
|
||||
{
|
||||
if ($sDebug !== '') {
|
||||
$aParameters['debug'] = $sDebug;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,18 +19,9 @@
|
||||
|
||||
namespace Combodo\iTop\Portal\Twig;
|
||||
|
||||
use AttributeDate;
|
||||
use Combodo\iTop\Application\TwigBase\Twig\Extension;
|
||||
use Twig\Extension\AbstractExtension;
|
||||
|
||||
use AttributeDateTime;
|
||||
use AttributeText;
|
||||
use Twig_SimpleFilter;
|
||||
use Twig_SimpleFunction;
|
||||
use utils;
|
||||
use Dict;
|
||||
use MetaModel;
|
||||
|
||||
/**
|
||||
* Class AppExtension
|
||||
*
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2013-2021 Combodo SARL
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop 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 Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\Portal\Twig;
|
||||
|
||||
use Combodo\iTop\Portal\EventListener\UserProvider;
|
||||
use Twig\Extension\AbstractExtension;
|
||||
use Twig\Extension\GlobalsInterface;
|
||||
|
||||
/**
|
||||
* Class AppGlobal
|
||||
*
|
||||
* Twig global injection.
|
||||
*
|
||||
* @author Benjamin Dalsass <benjamin.dalsass@combodo.com>
|
||||
* @package Combodo\iTop\Portal\Twig
|
||||
* @since 3.1.0
|
||||
*/
|
||||
class AppGlobal extends AbstractExtension implements GlobalsInterface
|
||||
{
|
||||
/** @var \Combodo\iTop\Portal\EventListener\UserProvider $userProvider */
|
||||
private $userProvider;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param \Combodo\iTop\Portal\EventListener\UserProvider $userProvider
|
||||
*/
|
||||
public function __construct(UserProvider $userProvider)
|
||||
{
|
||||
$this->userProvider = $userProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return global variables.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getGlobals(): array
|
||||
{
|
||||
$data = array();
|
||||
$data['allowed_portals'] = $this->userProvider->getAllowedPortals();
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2013-2021 Combodo SARL
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop 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 Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\Portal\Twig;
|
||||
|
||||
use Combodo\iTop\Portal\EventListener\UserProvider;
|
||||
|
||||
/**
|
||||
* Class CurrentUserAccessor
|
||||
*
|
||||
* Compatibility purpose 3.1:
|
||||
* Twig templates access current user objet directly from container, but it's not possible anymore.
|
||||
* >> app['combodo.current_user'].Get('first_name')
|
||||
* To prevent changes in templates we expose a service CurrentUserAccessor with a bridge role.
|
||||
*
|
||||
* @author Benjamin Dalsass <benjamin.dalsass@combodo.com>
|
||||
* @package Combodo\iTop\Portal\Twig
|
||||
* @since 3.1.0
|
||||
*/
|
||||
class CurrentUserAccessor
|
||||
{
|
||||
/** @var \Combodo\iTop\Portal\EventListener\UserProvider $userProvider */
|
||||
private $userProvider;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param \Combodo\iTop\Portal\EventListener\UserProvider $userProvider
|
||||
*/
|
||||
public function __construct(UserProvider $userProvider)
|
||||
{
|
||||
$this->userProvider = $userProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get (UserLocal meme function)
|
||||
*
|
||||
* @param $key
|
||||
*
|
||||
* @return int|mixed|\ormLinkSet|string|null
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
*/
|
||||
public function Get($key)
|
||||
{
|
||||
return $this->userProvider->getCurrentUser()->Get($key);
|
||||
}
|
||||
}
|
||||
@@ -20,10 +20,10 @@
|
||||
namespace Combodo\iTop\Portal\VariableAccessor;
|
||||
|
||||
|
||||
use Combodo\iTop\Portal\EventListener\UserProvider;
|
||||
use Exception;
|
||||
use MetaModel;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use User;
|
||||
use UserRights;
|
||||
|
||||
/**
|
||||
@@ -35,25 +35,24 @@ use UserRights;
|
||||
*/
|
||||
class CombodoCurrentContactPhotoUrl
|
||||
{
|
||||
/** @var \User $oUser */
|
||||
private $oUser;
|
||||
/** @var string $sCombodoPortalBaseAbsoluteUrl */
|
||||
private $sCombodoPortalBaseAbsoluteUrl;
|
||||
/** @var string|null $sContactPhotoUrl */
|
||||
private $sContactPhotoUrl;
|
||||
/** @var \Symfony\Component\DependencyInjection\ContainerInterface */
|
||||
private $oContainer;
|
||||
/** @var UserProvider $oUserProvider */
|
||||
private $oUserProvider;
|
||||
|
||||
/**
|
||||
* CombodoCurrentContactPhotoUrl constructor.
|
||||
*
|
||||
* @param \User $oUser
|
||||
* @param \Symfony\Component\DependencyInjection\ContainerInterface $oContainer
|
||||
* @param string $sCombodoPortalBaseAbsoluteUrl
|
||||
* @param string $sCombodoPortalBaseAbsoluteUrl
|
||||
*/
|
||||
public function __construct(User $oUser, ContainerInterface $oContainer, $sCombodoPortalBaseAbsoluteUrl)
|
||||
public function __construct(UserProvider $userProvider, ContainerInterface $oContainer, $sCombodoPortalBaseAbsoluteUrl)
|
||||
{
|
||||
$this->oUser = $oUser;
|
||||
$this->oUserProvider = $userProvider;
|
||||
$this->oContainer = $oContainer;
|
||||
$this->sCombodoPortalBaseAbsoluteUrl = $sCombodoPortalBaseAbsoluteUrl;
|
||||
$this->sContactPhotoUrl = null;
|
||||
@@ -65,8 +64,7 @@ class CombodoCurrentContactPhotoUrl
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
if ($this->sContactPhotoUrl === null)
|
||||
{
|
||||
if ($this->sContactPhotoUrl === null) {
|
||||
$this->sContactPhotoUrl = $this->ComputeContactPhotoUrl();
|
||||
}
|
||||
|
||||
@@ -84,44 +82,35 @@ class CombodoCurrentContactPhotoUrl
|
||||
// Contact
|
||||
$sContactPhotoUrl = "{$this->sCombodoPortalBaseAbsoluteUrl}img/user-profile-default-256px.png";
|
||||
// - Checking if we can load the contact
|
||||
try
|
||||
{
|
||||
try {
|
||||
/** @var \cmdbAbstractObject $oContact */
|
||||
$oContact = UserRights::GetContactObject();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$oAllowedOrgSet = $this->oUser->Get('allowed_org_list');
|
||||
if ($oAllowedOrgSet->Count() > 0)
|
||||
{
|
||||
catch (Exception $e) {
|
||||
$oUser = $this->oUserProvider->getCurrentUser();
|
||||
$oAllowedOrgSet = $oUser->Get('allowed_org_list');
|
||||
if ($oAllowedOrgSet->Count() > 0) {
|
||||
throw new Exception('Could not load contact related to connected user. (Tip: Make sure the contact\'s organization is among the user\'s allowed organizations)');
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
throw new Exception('Could not load contact related to connected user.');
|
||||
}
|
||||
}
|
||||
// - Retrieving picture
|
||||
if ($oContact)
|
||||
{
|
||||
if ($oContact) {
|
||||
$sPictureAttCode = 'picture';
|
||||
if (MetaModel::IsValidAttCode(get_class($oContact), $sPictureAttCode))
|
||||
{
|
||||
if (MetaModel::IsValidAttCode(get_class($oContact), $sPictureAttCode)) {
|
||||
/** @var \ormDocument $oImage */
|
||||
$oImage = $oContact->Get($sPictureAttCode);
|
||||
if (is_object($oImage) && !$oImage->IsEmpty())
|
||||
{
|
||||
if (is_object($oImage) && !$oImage->IsEmpty()) {
|
||||
// TODO: This should be changed when refactoring the ormDocument GetDisplayUrl() and GetDownloadUrl() in iTop 3.0
|
||||
$sContactPhotoUrl = $this->oContainer->get('url_generator')->generate('p_object_document_display', [
|
||||
'sObjectClass' => get_class($oContact),
|
||||
'sObjectId' => $oContact->GetKey(),
|
||||
'sObjectId' => $oContact->GetKey(),
|
||||
'sObjectField' => $sPictureAttCode,
|
||||
'cache' => 86400,
|
||||
's' => $oImage->GetSignature(),
|
||||
]);
|
||||
}
|
||||
else
|
||||
{
|
||||
'cache' => 86400,
|
||||
's' => $oImage->GetSignature(),
|
||||
]);
|
||||
} else {
|
||||
$sContactPhotoUrl = MetaModel::GetAttributeDef(get_class($oContact), $sPictureAttCode)->Get('default_image');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,26 +22,6 @@
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
{# Stack trace is only displayed in debug #}
|
||||
{% if app['kernel'].debug == true %}
|
||||
code {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
{# Include SF style for the stack trace #}
|
||||
{{ include('@Twig/exception.css.twig') }}
|
||||
|
||||
{# In production (SF context, not iTop), we hide some element as the code will not be displayed #}
|
||||
{% if app['kernel'].environment == 'prod' %}
|
||||
.trace-line-header > .icon{
|
||||
display: none !important;
|
||||
}
|
||||
.trace-code{
|
||||
display: none !important;
|
||||
|
||||
}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
@@ -61,36 +41,6 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{% if app['kernel'].debug == true %}
|
||||
<div class="exceptions-container">
|
||||
{# Note: The following is copied by the '@Twig/Exception/exception.html.twig' #}
|
||||
{% set exception_as_array = exception.toarray %}
|
||||
{% set _exceptions_with_user_code = [] %}
|
||||
{% for i, e in exception_as_array %}
|
||||
{% for trace in e.trace %}
|
||||
{% if (trace.file is not empty) and ('/vendor/' not in trace.file) and ('/var/cache/' not in trace.file) and not loop.last %}
|
||||
{% set _exceptions_with_user_code = _exceptions_with_user_code|merge([i]) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
<h3 class="tab-title">
|
||||
{% if exception_as_array|length > 1 %}
|
||||
Exceptions <span class="badge">{{ exception_as_array|length }}</span>
|
||||
{% else %}
|
||||
Exception
|
||||
{% endif %}
|
||||
</h3>
|
||||
|
||||
<div class="tab-content">
|
||||
{% for i, e in exception_as_array %}
|
||||
{{ include('@Twig/Exception/traces.html.twig', { exception: e, index: loop.index, expand: i in _exceptions_with_user_code or (_exceptions_with_user_code is empty and loop.first) }, with_context = false) }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block pPageLiveScripts %}
|
||||
{{ include('@Twig/base_js.html.twig') }}
|
||||
{% endblock %}
|
||||
@@ -224,14 +224,14 @@
|
||||
{% if bUserConnected %}
|
||||
<li role="separator" class="divider"></li>
|
||||
<li><a href="{{ app.url_generator.generate('p_user_profile_brick') }}"><span class="brick_icon fas fa-user fa-2x fa-fw"></span>{{ 'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil'|dict_s }}</a></li>
|
||||
{% for aPortal in app['combodo.current_user.allowed_portals'] %}
|
||||
{% for aPortal in allowed_portals %}
|
||||
{% if aPortal.id != app['combodo.portal.instance.conf'].properties.id %}
|
||||
{% set sIconClass = (aPortal.id == 'backoffice') ? 'far fa-list-alt' : 'fas fa-external-link-alt' %}
|
||||
<li><a href="{{ aPortal.url }}" target="_blank"><span class="brick_icon {{ sIconClass }} fa-2x fa-fw"></span>{{ aPortal.label|dict_s }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{# We display the separator only if the user has more then 1 portal. Meaning default portal + console or several portal at least #}
|
||||
{% if app['combodo.current_user.allowed_portals']|length > 1 %}
|
||||
{% if allowed_portals|length > 1 %}
|
||||
<li role="separator" class="divider"></li>
|
||||
{% endif %}
|
||||
<li><a href="{{ app['combodo.absolute_url'] }}pages/logoff.php"><span class="brick_icon fas fa-sign-out-alt fa-2x fa-fw"></span>{{ 'Brick:Portal:UserProfile:Navigation:Dropdown:Logout'|dict_s }}</a></li>
|
||||
@@ -263,14 +263,14 @@
|
||||
</a>
|
||||
<ul class="dropdown-menu user_options" aria-labelledby="user_options">
|
||||
<li><a href="{{ app.url_generator.generate('p_user_profile_brick') }}"><span class="brick_icon fas fa-user fa-lg fa-fw"></span>{{ 'Brick:Portal:UserProfile:Navigation:Dropdown:MyProfil'|dict_s }}</a></li>
|
||||
{% for aPortal in app['combodo.current_user.allowed_portals'] %}
|
||||
{% for aPortal in allowed_portals %}
|
||||
{% if aPortal.id != app['combodo.portal.instance.conf'].properties.id %}
|
||||
{% set sGlyphiconClass = (aPortal.id == 'backoffice') ? 'far fa-list-alt' : 'fas fa-external-link-alt' %}
|
||||
<li><a href="{{ aPortal.url }}" {% if app['combodo.portal.instance.conf'].properties.allowed_portals.opening_mode == 'tab' %}target="_blank"{% endif %} title="{{ aPortal.label|dict_s }}"><span class="brick_icon {{ sGlyphiconClass }} fa-lg fa-fw"></span>{{ aPortal.label|dict_s }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{# We display the separator only if the user has more then 1 portal. Meaning default portal + console or several portal at least #}
|
||||
{% if app['combodo.current_user.allowed_portals']|length > 1 %}
|
||||
{% if allowed_portals|length > 1 %}
|
||||
<li role="separator" class="divider"></li>
|
||||
{% endif %}
|
||||
<li><a href="{{ app['combodo.absolute_url'] }}pages/logoff.php"><span class="brick_icon fas fa-sign-out-alt fa-lg fa-fw"></span>{{ 'Brick:Portal:UserProfile:Navigation:Dropdown:Logout'|dict_s }}</a></li>
|
||||
|
||||
@@ -23,59 +23,61 @@ $vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Combodo\\iTop\\Portal\\Brick\\AbstractBrick' => $baseDir . '/src/Brick/AbstractBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\AggregatePageBrick' => $baseDir . '/src/Brick/AggregatePageBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrickCollection' => $baseDir . '/src/Brick/BrickCollection.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrickNotFoundException' => $baseDir . '/src/Brick/BrickNotFoundException.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrowseBrick' => $baseDir . '/src/Brick/BrowseBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\CreateBrick' => $baseDir . '/src/Brick/CreateBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\FilterBrick' => $baseDir . '/src/Brick/FilterBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\ManageBrick' => $baseDir . '/src/Brick/ManageBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\PortalBrick' => $baseDir . '/src/Brick/PortalBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\PropertyNotFoundException' => $baseDir . '/src/Brick/PropertyNotFoundException.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\UserProfileBrick' => $baseDir . '/src/Brick/UserProfileBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\AbstractController' => $baseDir . '/src/Controller/AbstractController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\AggregatePageBrickController' => $baseDir . '/src/Controller/AggregatePageBrickController.class.inc.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\BrickController' => $baseDir . '/src/Controller/BrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController' => $baseDir . '/src/Controller/BrowseBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\CreateBrickController' => $baseDir . '/src/Controller/CreateBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\DefaultController' => $baseDir . '/src/Controller/DefaultController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => $baseDir . '/src/Controller/ManageBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\ObjectController' => $baseDir . '/src/Controller/ObjectController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => $baseDir . '/src/Controller/SessionMessageController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => $baseDir . '/src/Controller/UserProfileBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\AbstractConfiguration' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/AbstractConfiguration.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Basic' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Basic.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Forms' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Forms.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Lists' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Lists.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetPluginPropertyClass' => $baseDir . '/src/EventListener/ApplicationContextSetPluginPropertyClass.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetUrlMakerClass' => $baseDir . '/src/EventListener/ApplicationContextSetUrlMakerClass.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\CssFromSassCompiler' => $baseDir . '/src/EventListener/CssFromSassCompiler.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ExceptionListener' => $baseDir . '/src/EventListener/ExceptionListener.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\UserProvider' => $baseDir . '/src/EventListener/UserProvider.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\ObjectFormManager' => $baseDir . '/src/Form/ObjectFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\PasswordFormManager' => $baseDir . '/src/Form/PasswordFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\PreferencesFormManager' => $baseDir . '/src/Form/PreferencesFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ApplicationHelper' => $baseDir . '/src/Helper/ApplicationHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\BrickControllerHelper' => $baseDir . '/src/Helper/BrickControllerHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\BrowseBrickHelper' => $baseDir . '/src/Helper/BrowseBrickHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ContextManipulatorHelper' => $baseDir . '/src/Helper/ContextManipulatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\LifecycleValidatorHelper' => $baseDir . '/src/Helper/LifecycleValidatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\NavigationRuleHelper' => $baseDir . '/src/Helper/NavigationRuleHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ObjectFormHandlerHelper' => $baseDir . '/src/Helper/ObjectFormHandlerHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\RequestManipulatorHelper' => $baseDir . '/src/Helper/RequestManipulatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ScopeValidatorHelper' => $baseDir . '/src/Helper/ScopeValidatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\SecurityHelper' => $baseDir . '/src/Helper/SecurityHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\SessionMessageHelper' => $baseDir . '/src/Helper/SessionMessageHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\UIExtensionsHelper' => $baseDir . '/src/Helper/UIExtensionsHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Kernel' => $baseDir . '/src/Kernel.php',
|
||||
'Combodo\\iTop\\Portal\\Routing\\ItopExtensionsExtraRoutes' => $baseDir . '/src/Routing/ItopExtensionsExtraRoutes.php',
|
||||
'Combodo\\iTop\\Portal\\Routing\\UrlGenerator' => $baseDir . '/src/Routing/UrlGenerator.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppExtension' => $baseDir . '/src/Twig/AppExtension.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppVariable' => $baseDir . '/src/Twig/AppVariable.php',
|
||||
'Combodo\\iTop\\Portal\\UrlMaker\\AbstractPortalUrlMaker' => $baseDir . '/src/UrlMaker/AbstractPortalUrlMaker.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractStringVariableAccessor' => $baseDir . '/src/VariableAccessor/AbstractStringVariableAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractVariableAccessor' => $baseDir . '/src/VariableAccessor/AbstractVariableAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoCurrentContactPhotoUrl' => $baseDir . '/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoPortalInstanceConf' => $baseDir . '/src/VariableAccessor/CombodoPortalInstanceConf.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\AbstractBrick' => $baseDir . '/src/Brick/AbstractBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\AggregatePageBrick' => $baseDir . '/src/Brick/AggregatePageBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrickCollection' => $baseDir . '/src/Brick/BrickCollection.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrickNotFoundException' => $baseDir . '/src/Brick/BrickNotFoundException.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrowseBrick' => $baseDir . '/src/Brick/BrowseBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\CreateBrick' => $baseDir . '/src/Brick/CreateBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\FilterBrick' => $baseDir . '/src/Brick/FilterBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\ManageBrick' => $baseDir . '/src/Brick/ManageBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\PortalBrick' => $baseDir . '/src/Brick/PortalBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\PropertyNotFoundException' => $baseDir . '/src/Brick/PropertyNotFoundException.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\UserProfileBrick' => $baseDir . '/src/Brick/UserProfileBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\AbstractController' => $baseDir . '/src/Controller/AbstractController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\AggregatePageBrickController' => $baseDir . '/src/Controller/AggregatePageBrickController.class.inc.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\BrickController' => $baseDir . '/src/Controller/BrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController' => $baseDir . '/src/Controller/BrowseBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\CreateBrickController' => $baseDir . '/src/Controller/CreateBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\DefaultController' => $baseDir . '/src/Controller/DefaultController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => $baseDir . '/src/Controller/ManageBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\ObjectController' => $baseDir . '/src/Controller/ObjectController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => $baseDir . '/src/Controller/SessionMessageController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => $baseDir . '/src/Controller/UserProfileBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\AbstractConfiguration' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/AbstractConfiguration.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Basic' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Basic.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Forms' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Forms.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Lists' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Lists.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetPluginPropertyClass' => $baseDir . '/src/EventListener/ApplicationContextSetPluginPropertyClass.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetUrlMakerClass' => $baseDir . '/src/EventListener/ApplicationContextSetUrlMakerClass.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\CssFromSassCompiler' => $baseDir . '/src/EventListener/CssFromSassCompiler.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ExceptionListener' => $baseDir . '/src/EventListener/ExceptionListener.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\UserProvider' => $baseDir . '/src/EventListener/UserProvider.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\ObjectFormManager' => $baseDir . '/src/Form/ObjectFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\PasswordFormManager' => $baseDir . '/src/Form/PasswordFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\PreferencesFormManager' => $baseDir . '/src/Form/PreferencesFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ApplicationHelper' => $baseDir . '/src/Helper/ApplicationHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\BrickControllerHelper' => $baseDir . '/src/Helper/BrickControllerHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\BrowseBrickHelper' => $baseDir . '/src/Helper/BrowseBrickHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ContextManipulatorHelper' => $baseDir . '/src/Helper/ContextManipulatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\LifecycleValidatorHelper' => $baseDir . '/src/Helper/LifecycleValidatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\NavigationRuleHelper' => $baseDir . '/src/Helper/NavigationRuleHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ObjectFormHandlerHelper' => $baseDir . '/src/Helper/ObjectFormHandlerHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\RequestManipulatorHelper' => $baseDir.'/src/Helper/RequestManipulatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ScopeValidatorHelper' => $baseDir.'/src/Helper/ScopeValidatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\SecurityHelper' => $baseDir.'/src/Helper/SecurityHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\SessionMessageHelper' => $baseDir.'/src/Helper/SessionMessageHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\UIExtensionsHelper' => $baseDir.'/src/Helper/UIExtensionsHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Kernel' => $baseDir.'/src/Kernel.php',
|
||||
'Combodo\\iTop\\Portal\\Routing\\ItopExtensionsExtraRoutes' => $baseDir.'/src/Routing/ItopExtensionsExtraRoutes.php',
|
||||
'Combodo\\iTop\\Portal\\Routing\\UrlGenerator' => $baseDir.'/src/Routing/UrlGenerator.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppExtension' => $baseDir.'/src/Twig/AppExtension.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppVariable' => $baseDir.'/src/Twig/AppVariable.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\CurrentUserAccessor' => $baseDir.'/src/Twig/CurrentUserAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppGlobal' => $baseDir.'/src/Twig/AppGlobal.php',
|
||||
'Combodo\\iTop\\Portal\\UrlMaker\\AbstractPortalUrlMaker' => $baseDir.'/src/UrlMaker/AbstractPortalUrlMaker.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractStringVariableAccessor' => $baseDir.'/src/VariableAccessor/AbstractStringVariableAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractVariableAccessor' => $baseDir.'/src/VariableAccessor/AbstractVariableAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoCurrentContactPhotoUrl' => $baseDir.'/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoPortalInstanceConf' => $baseDir.'/src/VariableAccessor/CombodoPortalInstanceConf.php',
|
||||
);
|
||||
|
||||
@@ -43,61 +43,63 @@ class ComposerStaticInitdf408f3f8ea034d298269cdf7647358b
|
||||
);
|
||||
|
||||
public static $classMap = array (
|
||||
'Combodo\\iTop\\Portal\\Brick\\AbstractBrick' => __DIR__ . '/../..' . '/src/Brick/AbstractBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\AggregatePageBrick' => __DIR__ . '/../..' . '/src/Brick/AggregatePageBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrickCollection' => __DIR__ . '/../..' . '/src/Brick/BrickCollection.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrickNotFoundException' => __DIR__ . '/../..' . '/src/Brick/BrickNotFoundException.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrowseBrick' => __DIR__ . '/../..' . '/src/Brick/BrowseBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\CreateBrick' => __DIR__ . '/../..' . '/src/Brick/CreateBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\FilterBrick' => __DIR__ . '/../..' . '/src/Brick/FilterBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\ManageBrick' => __DIR__ . '/../..' . '/src/Brick/ManageBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\PortalBrick' => __DIR__ . '/../..' . '/src/Brick/PortalBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\PropertyNotFoundException' => __DIR__ . '/../..' . '/src/Brick/PropertyNotFoundException.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\UserProfileBrick' => __DIR__ . '/../..' . '/src/Brick/UserProfileBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\AbstractController' => __DIR__ . '/../..' . '/src/Controller/AbstractController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\AggregatePageBrickController' => __DIR__ . '/../..' . '/src/Controller/AggregatePageBrickController.class.inc.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\BrickController' => __DIR__ . '/../..' . '/src/Controller/BrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController' => __DIR__ . '/../..' . '/src/Controller/BrowseBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\CreateBrickController' => __DIR__ . '/../..' . '/src/Controller/CreateBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\DefaultController' => __DIR__ . '/../..' . '/src/Controller/DefaultController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => __DIR__ . '/../..' . '/src/Controller/ManageBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\ObjectController' => __DIR__ . '/../..' . '/src/Controller/ObjectController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => __DIR__ . '/../..' . '/src/Controller/SessionMessageController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => __DIR__ . '/../..' . '/src/Controller/UserProfileBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\AbstractConfiguration' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/AbstractConfiguration.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Basic' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Basic.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Forms' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Forms.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Lists' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Lists.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetPluginPropertyClass' => __DIR__ . '/../..' . '/src/EventListener/ApplicationContextSetPluginPropertyClass.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetUrlMakerClass' => __DIR__ . '/../..' . '/src/EventListener/ApplicationContextSetUrlMakerClass.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\CssFromSassCompiler' => __DIR__ . '/../..' . '/src/EventListener/CssFromSassCompiler.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ExceptionListener' => __DIR__ . '/../..' . '/src/EventListener/ExceptionListener.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\UserProvider' => __DIR__ . '/../..' . '/src/EventListener/UserProvider.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\ObjectFormManager' => __DIR__ . '/../..' . '/src/Form/ObjectFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\PasswordFormManager' => __DIR__ . '/../..' . '/src/Form/PasswordFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\PreferencesFormManager' => __DIR__ . '/../..' . '/src/Form/PreferencesFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ApplicationHelper' => __DIR__ . '/../..' . '/src/Helper/ApplicationHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\BrickControllerHelper' => __DIR__ . '/../..' . '/src/Helper/BrickControllerHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\BrowseBrickHelper' => __DIR__ . '/../..' . '/src/Helper/BrowseBrickHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ContextManipulatorHelper' => __DIR__ . '/../..' . '/src/Helper/ContextManipulatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\LifecycleValidatorHelper' => __DIR__ . '/../..' . '/src/Helper/LifecycleValidatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\NavigationRuleHelper' => __DIR__ . '/../..' . '/src/Helper/NavigationRuleHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ObjectFormHandlerHelper' => __DIR__ . '/../..' . '/src/Helper/ObjectFormHandlerHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\RequestManipulatorHelper' => __DIR__ . '/../..' . '/src/Helper/RequestManipulatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ScopeValidatorHelper' => __DIR__ . '/../..' . '/src/Helper/ScopeValidatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\SecurityHelper' => __DIR__ . '/../..' . '/src/Helper/SecurityHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\SessionMessageHelper' => __DIR__ . '/../..' . '/src/Helper/SessionMessageHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\UIExtensionsHelper' => __DIR__ . '/../..' . '/src/Helper/UIExtensionsHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Kernel' => __DIR__ . '/../..' . '/src/Kernel.php',
|
||||
'Combodo\\iTop\\Portal\\Routing\\ItopExtensionsExtraRoutes' => __DIR__ . '/../..' . '/src/Routing/ItopExtensionsExtraRoutes.php',
|
||||
'Combodo\\iTop\\Portal\\Routing\\UrlGenerator' => __DIR__ . '/../..' . '/src/Routing/UrlGenerator.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppExtension' => __DIR__ . '/../..' . '/src/Twig/AppExtension.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppVariable' => __DIR__ . '/../..' . '/src/Twig/AppVariable.php',
|
||||
'Combodo\\iTop\\Portal\\UrlMaker\\AbstractPortalUrlMaker' => __DIR__ . '/../..' . '/src/UrlMaker/AbstractPortalUrlMaker.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractStringVariableAccessor' => __DIR__ . '/../..' . '/src/VariableAccessor/AbstractStringVariableAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractVariableAccessor' => __DIR__ . '/../..' . '/src/VariableAccessor/AbstractVariableAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoCurrentContactPhotoUrl' => __DIR__ . '/../..' . '/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoPortalInstanceConf' => __DIR__ . '/../..' . '/src/VariableAccessor/CombodoPortalInstanceConf.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\AbstractBrick' => __DIR__ . '/../..' . '/src/Brick/AbstractBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\AggregatePageBrick' => __DIR__ . '/../..' . '/src/Brick/AggregatePageBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrickCollection' => __DIR__ . '/../..' . '/src/Brick/BrickCollection.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrickNotFoundException' => __DIR__ . '/../..' . '/src/Brick/BrickNotFoundException.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\BrowseBrick' => __DIR__ . '/../..' . '/src/Brick/BrowseBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\CreateBrick' => __DIR__ . '/../..' . '/src/Brick/CreateBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\FilterBrick' => __DIR__ . '/../..' . '/src/Brick/FilterBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\ManageBrick' => __DIR__ . '/../..' . '/src/Brick/ManageBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\PortalBrick' => __DIR__ . '/../..' . '/src/Brick/PortalBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\PropertyNotFoundException' => __DIR__ . '/../..' . '/src/Brick/PropertyNotFoundException.php',
|
||||
'Combodo\\iTop\\Portal\\Brick\\UserProfileBrick' => __DIR__ . '/../..' . '/src/Brick/UserProfileBrick.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\AbstractController' => __DIR__ . '/../..' . '/src/Controller/AbstractController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\AggregatePageBrickController' => __DIR__ . '/../..' . '/src/Controller/AggregatePageBrickController.class.inc.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\BrickController' => __DIR__ . '/../..' . '/src/Controller/BrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController' => __DIR__ . '/../..' . '/src/Controller/BrowseBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\CreateBrickController' => __DIR__ . '/../..' . '/src/Controller/CreateBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\DefaultController' => __DIR__ . '/../..' . '/src/Controller/DefaultController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => __DIR__ . '/../..' . '/src/Controller/ManageBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\ObjectController' => __DIR__ . '/../..' . '/src/Controller/ObjectController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => __DIR__ . '/../..' . '/src/Controller/SessionMessageController.php',
|
||||
'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => __DIR__ . '/../..' . '/src/Controller/UserProfileBrickController.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\AbstractConfiguration' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/AbstractConfiguration.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Basic' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Basic.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Forms' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Forms.php',
|
||||
'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Lists' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Lists.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetPluginPropertyClass' => __DIR__ . '/../..' . '/src/EventListener/ApplicationContextSetPluginPropertyClass.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetUrlMakerClass' => __DIR__ . '/../..' . '/src/EventListener/ApplicationContextSetUrlMakerClass.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\CssFromSassCompiler' => __DIR__ . '/../..' . '/src/EventListener/CssFromSassCompiler.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\ExceptionListener' => __DIR__ . '/../..' . '/src/EventListener/ExceptionListener.php',
|
||||
'Combodo\\iTop\\Portal\\EventListener\\UserProvider' => __DIR__ . '/../..' . '/src/EventListener/UserProvider.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\ObjectFormManager' => __DIR__ . '/../..' . '/src/Form/ObjectFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\PasswordFormManager' => __DIR__ . '/../..' . '/src/Form/PasswordFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Form\\PreferencesFormManager' => __DIR__ . '/../..' . '/src/Form/PreferencesFormManager.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ApplicationHelper' => __DIR__ . '/../..' . '/src/Helper/ApplicationHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\BrickControllerHelper' => __DIR__ . '/../..' . '/src/Helper/BrickControllerHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\BrowseBrickHelper' => __DIR__ . '/../..' . '/src/Helper/BrowseBrickHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ContextManipulatorHelper' => __DIR__ . '/../..' . '/src/Helper/ContextManipulatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\LifecycleValidatorHelper' => __DIR__ . '/../..' . '/src/Helper/LifecycleValidatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\NavigationRuleHelper' => __DIR__ . '/../..' . '/src/Helper/NavigationRuleHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ObjectFormHandlerHelper' => __DIR__.'/../..'.'/src/Helper/ObjectFormHandlerHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\RequestManipulatorHelper' => __DIR__.'/../..'.'/src/Helper/RequestManipulatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\ScopeValidatorHelper' => __DIR__.'/../..'.'/src/Helper/ScopeValidatorHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\SecurityHelper' => __DIR__.'/../..'.'/src/Helper/SecurityHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\SessionMessageHelper' => __DIR__.'/../..'.'/src/Helper/SessionMessageHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Helper\\UIExtensionsHelper' => __DIR__.'/../..'.'/src/Helper/UIExtensionsHelper.php',
|
||||
'Combodo\\iTop\\Portal\\Kernel' => __DIR__.'/../..'.'/src/Kernel.php',
|
||||
'Combodo\\iTop\\Portal\\Routing\\ItopExtensionsExtraRoutes' => __DIR__.'/../..'.'/src/Routing/ItopExtensionsExtraRoutes.php',
|
||||
'Combodo\\iTop\\Portal\\Routing\\UrlGenerator' => __DIR__.'/../..'.'/src/Routing/UrlGenerator.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppExtension' => __DIR__.'/../..'.'/src/Twig/AppExtension.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\CurrentUserAccessor' => __DIR__.'/../..'.'/src/Twig/CurrentUserAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppGlobal' => __DIR__.'/../..'.'/src/Twig/AppGlobal.php',
|
||||
'Combodo\\iTop\\Portal\\Twig\\AppVariable' => __DIR__.'/../..'.'/src/Twig/AppVariable.php',
|
||||
'Combodo\\iTop\\Portal\\UrlMaker\\AbstractPortalUrlMaker' => __DIR__.'/../..'.'/src/UrlMaker/AbstractPortalUrlMaker.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractStringVariableAccessor' => __DIR__.'/../..'.'/src/VariableAccessor/AbstractStringVariableAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractVariableAccessor' => __DIR__.'/../..'.'/src/VariableAccessor/AbstractVariableAccessor.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoCurrentContactPhotoUrl' => __DIR__.'/../..'.'/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php',
|
||||
'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoPortalInstanceConf' => __DIR__.'/../..'.'/src/VariableAccessor/CombodoPortalInstanceConf.php',
|
||||
);
|
||||
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'portal:itop-portal' => '标准门户', // This is the portal name that will be displayed in portal dispatcher (eg. URL in menus)
|
||||
'Page:DefaultTitle' => ITOP_APPLICATION_SHORT.' - 用户门户',
|
||||
'Brick:Portal:UserProfile:Title' => '我的资料',
|
||||
'Brick:Portal:UserProfile:Title' => '我的设置',
|
||||
'Brick:Portal:NewRequest:Title' => '新建工单',
|
||||
'Brick:Portal:NewRequest:Title+' => '<p>需要帮助?</p><p>选择子服务,然后提交工单给我们的支持团队.</p>',
|
||||
'Brick:Portal:OngoingRequests:Title' => '正在处理的工单',
|
||||
|
||||
@@ -135,11 +135,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Problem/Attribute:resolution_date' => '解决日期',
|
||||
'Class:Problem/Attribute:resolution_date+' => '',
|
||||
'Class:Problem/Attribute:knownerrors_list' => '已知问题',
|
||||
'Class:Problem/Attribute:knownerrors_list+' => '该问题相关的所有已知问题',
|
||||
'Class:Problem/Attribute:knownerrors_list+' => '此问题相关的所有已知问题',
|
||||
'Class:Problem/Attribute:related_request_list' => '相关需求',
|
||||
'Class:Problem/Attribute:related_request_list+' => '该问题相关的所有需求',
|
||||
'Class:Problem/Attribute:related_request_list+' => '此问题相关的所有需求',
|
||||
'Class:Problem/Attribute:related_incident_list' => '相关事件',
|
||||
'Class:Problem/Attribute:related_incident_list+' => '该问题相关的所有事件',
|
||||
'Class:Problem/Attribute:related_incident_list+' => '此问题相关的所有事件',
|
||||
'Class:Problem/Stimulus:ev_assign' => '分配',
|
||||
'Class:Problem/Stimulus:ev_assign+' => '',
|
||||
'Class:Problem/Stimulus:ev_reassign' => '重新分配',
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Menu:RequestManagement' => '服务台',
|
||||
'Menu:RequestManagement+' => '服务台',
|
||||
'Menu:RequestManagementProvider' => 'Helpdesk provider',
|
||||
'Menu:RequestManagementProvider+' => 'Helpdesk provider',
|
||||
'Menu:RequestManagementProvider' => '服务台提供者',
|
||||
'Menu:RequestManagementProvider+' => '服务台提供者',
|
||||
'Menu:UserRequest:Provider' => 'Open request transfered to provider',
|
||||
'Menu:UserRequest:Provider+' => 'Open request transfered to provider',
|
||||
'Menu:UserRequest:Overview' => '概况',
|
||||
@@ -168,8 +168,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:UserRequest/Attribute:resolution_code+' => '',
|
||||
'Class:UserRequest/Attribute:resolution_code/Value:assistance' => '帮助',
|
||||
'Class:UserRequest/Attribute:resolution_code/Value:assistance+' => '帮助',
|
||||
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed' => 'bug修复',
|
||||
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed+' => 'bug修复',
|
||||
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed' => '缺陷修复',
|
||||
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed+' => '缺陷修复',
|
||||
'Class:UserRequest/Attribute:resolution_code/Value:hardware repair' => '硬件维修',
|
||||
'Class:UserRequest/Attribute:resolution_code/Value:hardware repair+' => '硬件维修',
|
||||
'Class:UserRequest/Attribute:resolution_code/Value:other' => '其它',
|
||||
@@ -201,7 +201,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:UserRequest/Attribute:parent_incident_ref' => '父级事件编号',
|
||||
'Class:UserRequest/Attribute:parent_incident_ref+' => '~~',
|
||||
'Class:UserRequest/Attribute:related_request_list' => '子需求',
|
||||
'Class:UserRequest/Attribute:related_request_list+' => '该父级需求相关的所有子需求',
|
||||
'Class:UserRequest/Attribute:related_request_list+' => '此父级需求相关的所有子需求',
|
||||
'Class:UserRequest/Attribute:public_log' => '评论',
|
||||
'Class:UserRequest/Attribute:public_log+' => '',
|
||||
'Class:UserRequest/Attribute:user_satisfaction' => '用户满意度',
|
||||
@@ -245,12 +245,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:UserRequest/Error:CannotAssignParentRequestIdToSelf' => '无法分配父级需求到本身',
|
||||
|
||||
'Class:UserRequest/Method:ResolveChildTickets' => '解决子工单',
|
||||
'Class:UserRequest/Method:ResolveChildTickets+' => '将该解决方案直接挪给子需求(自动解决), 包括下列字段: 服务, 团队, 办理人, 解决方案信息',
|
||||
'Class:UserRequest/Method:ResolveChildTickets+' => '将此解决方案直接挪给子需求(自动解决), 包括下列字段: 服务, 团队, 办理人, 解决方案信息',
|
||||
));
|
||||
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Organization:Overview:UserRequests' => '该组织的所有用户需求',
|
||||
'Organization:Overview:MyUserRequests' => '我在该组织内发起的需求',
|
||||
'Organization:Overview:Tickets' => '该组织内的所有工单',
|
||||
'Organization:Overview:UserRequests' => '此组织的所有用户需求',
|
||||
'Organization:Overview:MyUserRequests' => '我在此组织内发起的需求',
|
||||
'Organization:Overview:Tickets' => '此组织内的所有工单',
|
||||
));
|
||||
|
||||
@@ -203,7 +203,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:UserRequest/Attribute:parent_change_ref' => '变更编号',
|
||||
'Class:UserRequest/Attribute:parent_change_ref+' => '',
|
||||
'Class:UserRequest/Attribute:related_request_list' => '衍生事件',
|
||||
'Class:UserRequest/Attribute:related_request_list+' => '该事件相关的所有子事件',
|
||||
'Class:UserRequest/Attribute:related_request_list+' => '此事件相关的所有子事件',
|
||||
'Class:UserRequest/Attribute:public_log' => '评论',
|
||||
'Class:UserRequest/Attribute:public_log+' => '',
|
||||
'Class:UserRequest/Attribute:user_satisfaction' => '用户满意度',
|
||||
@@ -278,7 +278,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Organization:Overview:UserRequests' => '来自该组织的用户需求',
|
||||
'Organization:Overview:UserRequests' => '来自此组织的用户需求',
|
||||
'Organization:Overview:MyUserRequests' => 'My User Requests for this organization~~',
|
||||
'Organization:Overview:Tickets' => '来自该组织的工单',
|
||||
'Organization:Overview:Tickets' => '来自此组织的工单',
|
||||
));
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user