diff --git a/alpha/scripts/utils/updateHtmlPurifierOnPartners.php b/alpha/scripts/utils/updateHtmlPurifierOnPartners.php
new file mode 100644
index 0000000000..8f9451ce85
--- /dev/null
+++ b/alpha/scripts/utils/updateHtmlPurifierOnPartners.php
@@ -0,0 +1,123 @@
+ [realrun]
+ *
+ * Available statuses: ignore, notify, sanitize, block
+ *
+ * @package Deployment
+ * @subpackage updates
+ */
+
+$fromStatusArg = isset($argv[1]) ? strtolower($argv[1]) : null;
+$toStatusArg = isset($argv[2]) ? strtolower($argv[2]) : null;
+$dryRun = !in_array('realrun', $argv);
+
+//------------------------------------------------------
+
+require_once(__DIR__ . '/../../../deployment/bootstrap.php');
+
+$validStatuses = array(
+ 'ignore' => HTMLPurifierBehaviourType::IGNORE,
+ 'notify' => HTMLPurifierBehaviourType::NOTIFY,
+ 'sanitize' => HTMLPurifierBehaviourType::SANITIZE,
+ 'block' => HTMLPurifierBehaviourType::BLOCK,
+);
+
+if (!$fromStatusArg || !$toStatusArg)
+{
+ print("Usage: php updateHtmlPurifierOnPartners.php [realrun]\n");
+ print("Available statuses: " . implode(', ', array_keys($validStatuses)) . "\n");
+ exit(1);
+}
+
+if (!array_key_exists($fromStatusArg, $validStatuses))
+{
+ print("Invalid from_status: '{$fromStatusArg}'. Available statuses: " . implode(', ', array_keys($validStatuses)) . "\n");
+ exit(1);
+}
+
+if (!array_key_exists($toStatusArg, $validStatuses))
+{
+ print("Invalid to_status: '{$toStatusArg}'. Available statuses: " . implode(', ', array_keys($validStatuses)) . "\n");
+ exit(1);
+}
+
+if ($fromStatusArg === $toStatusArg)
+{
+ print("from_status and to_status are the same ('{$fromStatusArg}'). Nothing to do.\n");
+ exit(1);
+}
+
+$fromStatus = $validStatuses[$fromStatusArg];
+$toStatus = $validStatuses[$toStatusArg];
+
+$con = myDbHelper::getConnection(myDbHelper::DB_HELPER_CONN_PROPEL2);
+KalturaStatement::setDryRun($dryRun);
+
+$countLimitEachLoop = 500;
+$offset = 0;
+
+print("HTML Purifier behaviour migration: " . strtoupper($fromStatusArg) . " -> " . strtoupper($toStatusArg) . "\n");
+print($dryRun ? "[DRY RUN] No changes will be saved.\n" : "[REAL RUN] Changes will be saved.\n");
+
+$c = new Criteria();
+$c->addAscendingOrderByColumn(PartnerPeer::ID);
+$c->addAnd(PartnerPeer::ID, 99, Criteria::GREATER_EQUAL);
+$c->addAnd(PartnerPeer::STATUS, Partner::PARTNER_STATUS_ACTIVE, Criteria::EQUAL);
+$c->setLimit($countLimitEachLoop);
+
+$partners = PartnerPeer::doSelect($c, $con);
+
+while (count($partners))
+{
+ foreach ($partners as $partner)
+ {
+ /* @var $partner Partner */
+ $partnerId = $partner->getId();
+ $changed = false;
+
+ if ($partner->getCustomDataObj()->get(Partner::PURIFY_IMAGE_CONTENT) !== true)
+ {
+ print("Enable purify_image_content for partner id [{$partnerId}]\n");
+ $partner->setPurifyImageContent(true);
+ $changed = true;
+ }
+
+ if (!$partner->getHtmlPurifierBaseListUsage())
+ {
+ print("Enable html_purifier_base_list_usage for partner id [{$partnerId}]\n");
+ $partner->setHtmlPurifierBaseListUsage(true);
+ $changed = true;
+ }
+
+ if ($partner->getHtmlPurifierBehaviour() == $fromStatus)
+ {
+ print("Set HTML purifier behaviour from " . strtoupper($fromStatusArg) . " to " . strtoupper($toStatusArg) . " for partner id [{$partnerId}]\n");
+ $partner->setHtmlPurifierBehaviour($toStatus);
+ $changed = true;
+ }
+
+ if ($changed)
+ {
+ $partner->save();
+ }
+ }
+
+ kMemoryManager::clearMemory();
+ $offset += $countLimitEachLoop;
+
+ $c = new Criteria();
+ $c->addAscendingOrderByColumn(PartnerPeer::ID);
+ $c->addAnd(PartnerPeer::ID, 99, Criteria::GREATER_EQUAL);
+ $c->addAnd(PartnerPeer::STATUS, Partner::PARTNER_STATUS_ACTIVE, Criteria::EQUAL);
+ $c->setLimit($countLimitEachLoop);
+ $c->setOffset($offset);
+
+ $partners = PartnerPeer::doSelect($c, $con);
+}
+
+print("Done\n");