From 7ea9d0d8d94fe2b8844171d6678486995658ae13 Mon Sep 17 00:00:00 2001
From: Inbal Vasserman <>
Date: Tue, 4 Aug 2026 10:44:04 +0300
Subject: [PATCH 1/5] feat(SUP-52187): UI conf restoration from admin console
---
.../controllers/WidgetController.php | 17 +++-
admin_console/views/scripts/widget/list.phtml | 62 ++++++++++---
.../service.adminconsole.uiconfadmin.ini | 17 +++-
.../lib/api/KalturaUiConfAdmin.php | 14 ++-
.../services/UiConfAdminService.php | 90 ++++++++++++++++---
release-notes.md | 7 ++
6 files changed, 173 insertions(+), 34 deletions(-)
diff --git a/admin_console/controllers/WidgetController.php b/admin_console/controllers/WidgetController.php
index f094fe88148..80e85f8263f 100644
--- a/admin_console/controllers/WidgetController.php
+++ b/admin_console/controllers/WidgetController.php
@@ -187,11 +187,24 @@ public function duplicateAction()
$id = $request->getParam('id');
$client = Infra_ClientHelper::getClient();
$adminConsolePlugin = Kaltura_Client_AdminConsole_Plugin::get($client);
-
+
$uiConf = $adminConsolePlugin->uiConfAdmin->get($id);
$uiConf->id = null;
$uiConf = $adminConsolePlugin->uiConfAdmin->add($uiConf);
-
+
+ echo $this->_helper->json('ok', false);
+ }
+
+ public function restoreAction()
+ {
+ $this->_helper->viewRenderer->setNoRender();
+ $request = $this->getRequest();
+ $id = $request->getParam('id');
+ $client = Infra_ClientHelper::getClient();
+ $adminConsolePlugin = Kaltura_Client_AdminConsole_Plugin::get($client);
+
+ $adminConsolePlugin->uiConfAdmin->restore($id);
+
echo $this->_helper->json('ok', false);
}
diff --git a/admin_console/views/scripts/widget/list.phtml b/admin_console/views/scripts/widget/list.phtml
index 1e720031699..4075d84e514 100644
--- a/admin_console/views/scripts/widget/list.phtml
+++ b/admin_console/views/scripts/widget/list.phtml
@@ -50,15 +50,21 @@
|
@@ -75,12 +81,20 @@ jQuery('#filter_type').change(function()
if(this.value == "by-uiconf-type")
{
$("#filter_text").css("display","none");
- $("#filter_obj_type_input").css("display","inline");
- }
+ $("#filter_obj_type_input").css("display","inline");
+ $("#filter_status_input").css("display","none");
+ }
+ else if(this.value == "by-status")
+ {
+ $("#filter_text").css("display","none");
+ $("#filter_obj_type_input").css("display","none");
+ $("#filter_status_input").css("display","inline");
+ }
else
- {
+ {
$("#filter_text").css("display","inline");
- $("#filter_obj_type_input").css("display","none");
+ $("#filter_obj_type_input").css("display","none");
+ $("#filter_status_input").css("display","none");
}
});
@@ -191,6 +205,28 @@ function deleteWidget(id) {
}
}
+function restoreWidget(id) {
+ var ok = confirm('translate('are you sure restore uiconf?'); ?>');
+
+ if (ok) {
+ var url = 'url(array('controller' => 'widget', 'action' => 'restore', 'id' => '')); ?>' + id;
+
+ jQuery.ajax({
+ url: url,
+ dataType: 'json',
+ success: function(result) {
+ if (result != 'ok')
+ return this.error();
+ alert('translate('uiconf was restored');?>');
+ jQuery('#frmPaginator1').submit();
+ },
+ error: function() {
+ alert('translate('uiconf was not restored');?>');
+ }
+ });
+ }
+}
+
function duplicateWidget(id) {
var url = 'url(array('controller' => 'widget', 'action' => 'duplicate', 'id' => '')); ?>' + id;
diff --git a/deployment/permissions/service.adminconsole.uiconfadmin.ini b/deployment/permissions/service.adminconsole.uiconfadmin.ini
index fa2935e8b36..1c7efeadfe5 100644
--- a/deployment/permissions/service.adminconsole.uiconfadmin.ini
+++ b/deployment/permissions/service.adminconsole.uiconfadmin.ini
@@ -38,9 +38,18 @@ permissionItem4.permissions = SYSTEM_ADMIN_WIDGET
permissionItem5.service = adminconsole_uiconfadmin
permissionItem5.action = delete
permissionItem5.partnerId = -2
-permissionItem5.param3 =
-permissionItem5.param4 =
-permissionItem5.param5 =
-permissionItem5.tags =
+permissionItem5.param3 =
+permissionItem5.param4 =
+permissionItem5.param5 =
+permissionItem5.tags =
permissionItem5.permissions = SYSTEM_ADMIN_WIDGET
+permissionItem6.service = adminconsole_uiconfadmin
+permissionItem6.action = restore
+permissionItem6.partnerId = -2
+permissionItem6.param3 =
+permissionItem6.param4 =
+permissionItem6.param5 =
+permissionItem6.tags =
+permissionItem6.permissions = SYSTEM_ADMIN_WIDGET
+
diff --git a/plugins/admin_console/lib/api/KalturaUiConfAdmin.php b/plugins/admin_console/lib/api/KalturaUiConfAdmin.php
index afda80522ce..deaf465b6e5 100644
--- a/plugins/admin_console/lib/api/KalturaUiConfAdmin.php
+++ b/plugins/admin_console/lib/api/KalturaUiConfAdmin.php
@@ -9,7 +9,13 @@ class KalturaUiConfAdmin extends KalturaUiConf
* @var bool
*/
public $isPublic;
-
+
+ /**
+ * @var int
+ * @readonly
+ */
+ public $status;
+
public function doFromObject($source_object, KalturaDetachedResponseProfile $responseProfile = null)
{
if ($source_object instanceof uiConf)
@@ -18,8 +24,10 @@ public function doFromObject($source_object, KalturaDetachedResponseProfile $res
$this->isPublic = true;
else
$this->isPublic = false;
+
+ $this->status = $source_object->getStatus();
}
-
+
return parent::doFromObject($source_object, $responseProfile);
}
@@ -34,4 +42,4 @@ public function toObject($object_to_fill = null, $props_to_skip = array())
}
return parent::toObject($object_to_fill, $props_to_skip);
}
-}
\ No newline at end of file
+}
diff --git a/plugins/admin_console/services/UiConfAdminService.php b/plugins/admin_console/services/UiConfAdminService.php
index 9d76c2a15fd..43c434a728e 100644
--- a/plugins/admin_console/services/UiConfAdminService.php
+++ b/plugins/admin_console/services/UiConfAdminService.php
@@ -116,37 +116,103 @@ function deleteAction($id)
}
/**
- * Retrieve a list of available UIConfs with no partner limitation
- *
+ * Restore a deleted UIConf and its file syncs
+ *
+ * @action restore
+ * @param int $id
+ * @return KalturaUiConfAdmin
+ *
+ * @throws APIErrors::INVALID_UI_CONF_ID
+ */
+ function restoreAction($id)
+ {
+ uiConfPeer::setUseCriteriaFilter(false);
+ $dbUiConf = uiConfPeer::retrieveByPK($id);
+ uiConfPeer::setUseCriteriaFilter(true);
+
+ if (!$dbUiConf)
+ throw new KalturaAPIException(APIErrors::INVALID_UI_CONF_ID, $id);
+
+ $fileSyncSubTypes = array(
+ uiConf::FILE_SYNC_UICONF_SUB_TYPE_DATA,
+ uiConf::FILE_SYNC_UICONF_SUB_TYPE_CONFIG,
+ uiConf::FILE_SYNC_UICONF_SUB_TYPE_FEATURES,
+ );
+
+ $fileSyncs = array();
+ FileSyncPeer::setUseCriteriaFilter(false);
+ foreach ($fileSyncSubTypes as $subType)
+ {
+ $fileSync = kFileSyncUtils::getLocalFileSyncForKey($dbUiConf->getSyncKey($subType), false);
+ if ($fileSync)
+ $fileSyncs[] = $fileSync;
+ }
+ FileSyncPeer::setUseCriteriaFilter(true);
+
+ foreach ($fileSyncs as $fileSync)
+ {
+ if (method_exists($fileSync, 'setDeletedId'))
+ $fileSync->setDeletedId(0);
+ $fileSync->setStatus(FileSync::FILE_SYNC_STATUS_READY);
+ $fileSync->save();
+ }
+
+ $dbUiConf->setStatus(uiConf::UI_CONF_STATUS_READY);
+ $dbUiConf->save();
+
+ $uiConf = new KalturaUiConfAdmin();
+ $uiConf->fromObject($dbUiConf, $this->getResponseProfile());
+
+ return $uiConf;
+ }
+
+ /**
+ * Retrieve a list of available UIConfs with no partner limitation.
+ * If the request comes from an admin console client, deleted UIConfs are included as well.
+ *
* @action list
* @param KalturaUiConfFilter $filter
* @param KalturaFilterPager $pager
* @return KalturaUiConfAdminListResponse
- */
- function listAction( KalturaUiConfFilter $filter = null , KalturaFilterPager $pager = null)
+ */
+ function listAction(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null)
+ {
+ $clientTag = kCurrentContext::$client_lang ? strtolower(kCurrentContext::$client_lang) : '';
+ $includeDeleted = strpos($clientTag, 'admin') !== false;
+ return $this->doList($filter, $pager, $includeDeleted);
+ }
+
+ private function doList(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null, $includeDeleted = false)
{
myDbHelper::$use_alternative_con = myDbHelper::DB_HELPER_CONN_PROPEL2;
-
+
if (!$filter)
$filter = new KalturaUiConfFilter();
-
+
$uiConfFilter = new uiConfFilter();
$filter->toObject($uiConfFilter);
-
+
$c = new Criteria();
$uiConfFilter->attachToCriteria($c);
+
+ if ($includeDeleted)
+ uiConfPeer::setUseCriteriaFilter(false);
+
$count = uiConfPeer::doCount($c);
- if (! $pager)
- $pager = new KalturaFilterPager ();
+ if (!$pager)
+ $pager = new KalturaFilterPager();
$pager->attachToCriteria($c);
$list = uiConfPeer::doSelect($c);
-
+
+ if ($includeDeleted)
+ uiConfPeer::setUseCriteriaFilter(true);
+
$newList = KalturaUiConfAdminArray::fromDbArray($list, $this->getResponseProfile());
-
+
$response = new KalturaUiConfAdminListResponse();
$response->objects = $newList;
$response->totalCount = $count;
-
+
return $response;
}
}
diff --git a/release-notes.md b/release-notes.md
index a87e022dd0e..fabac6aa6a8 100644
--- a/release-notes.md
+++ b/release-notes.md
@@ -1,3 +1,10 @@
+# West-23.5.0
+## Add permissions for uiConfAdmin restore
+- Issue Type: Task
+- Issue ID: SUP-52187
+### Deployment Scripts ###
+ php deployment/updates/scripts/add_permissions/2026_08_03_adminconsole_uiconfadmin_restore_permission.php
+
# West-23.4.0
## Disallowed from-email domain enforcement with fallback ##
- Issue Type: Task
From bd8f7b082faa6f9ad308bf00e36302464c98aa96 Mon Sep 17 00:00:00 2001
From: Inbal Vasserman <>
Date: Tue, 4 Aug 2026 11:06:11 +0300
Subject: [PATCH 2/5] remove unused code
---
admin_console/views/scripts/widget/list.phtml | 8 --------
1 file changed, 8 deletions(-)
diff --git a/admin_console/views/scripts/widget/list.phtml b/admin_console/views/scripts/widget/list.phtml
index 4075d84e514..02ffc360d24 100644
--- a/admin_console/views/scripts/widget/list.phtml
+++ b/admin_console/views/scripts/widget/list.phtml
@@ -82,19 +82,11 @@ jQuery('#filter_type').change(function()
{
$("#filter_text").css("display","none");
$("#filter_obj_type_input").css("display","inline");
- $("#filter_status_input").css("display","none");
- }
- else if(this.value == "by-status")
- {
- $("#filter_text").css("display","none");
- $("#filter_obj_type_input").css("display","none");
- $("#filter_status_input").css("display","inline");
}
else
{
$("#filter_text").css("display","inline");
$("#filter_obj_type_input").css("display","none");
- $("#filter_status_input").css("display","none");
}
});
From 641f0d89054a891f854c8a491ce3e21e1d9a1a9f Mon Sep 17 00:00:00 2001
From: Inbal Vasserman <>
Date: Thu, 6 Aug 2026 14:41:56 +0300
Subject: [PATCH 3/5] add permission checks
---
admin_console/views/scripts/widget/list.phtml | 4 ++--
.../lib/errors/KalturaAdminConsoleErrors.php | 2 ++
.../admin_console/services/UiConfAdminService.php | 14 +++++++++++++-
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/admin_console/views/scripts/widget/list.phtml b/admin_console/views/scripts/widget/list.phtml
index 02ffc360d24..7d983ae0a67 100644
--- a/admin_console/views/scripts/widget/list.phtml
+++ b/admin_console/views/scripts/widget/list.phtml
@@ -50,8 +50,8 @@
|